【发布时间】:2017-10-29 18:31:48
【问题描述】:
调用 laravel-filemanager 的 iframe 时,我需要按“时间 DESC”顺序加载文件。 有可能吗?我阅读了代码,发现我们无法按时间 DESC 排序,并且代码没有配置默认“sort_type”的选项
【问题讨论】:
标签: laravel-5.5 file-management
调用 laravel-filemanager 的 iframe 时,我需要按“时间 DESC”顺序加载文件。 有可能吗?我阅读了代码,发现我们无法按时间 DESC 排序,并且代码没有配置默认“sort_type”的选项
【问题讨论】:
标签: laravel-5.5 file-management
这不是个好主意,但它对我有用
我正在更改 vendor/unisharp/laravel-filemanager/public/js/script.js 中的代码
var sort_type = 'alphabetic';
到
var sort_type = 'time';
如果您想按 desc 顺序对日期进行排序。修改代码
vendor/unisharp/laravel-filemanager/src/Controllers/ItemsController.php
public function getItems()
{
$currentPage = self::getCurrentPageFromRequest();
$perPage = $this->helper->getPaginationPerPage();
$items = array_merge($this->lfm->folders(), $this->lfm->files());
return [
'items' => array_map(function ($item) {
return $item->fill()->attributes;
}, array_slice($items, ($currentPage - 1) * $perPage, $perPage)),
'paginator' => [
'current_page' => $currentPage,
'total' => count($items),
'per_page' => $perPage,
],
'display' => $this->helper->getDisplayMode(),
'working_dir' => $this->lfm->path('working_dir'),
];
}
与
use Illuminate\Http\Request;
public function getItems(Request $request)
{
$currentPage = self::getCurrentPageFromRequest();
$perPage = $this->helper->getPaginationPerPage();
$files = $this->lfm->files();
if($request->sort_type=='time'){
$files = array_reverse($files);
}
$items = array_merge($this->lfm->folders(), $files);
return [
'items' => array_map(function ($item) {
return $item->fill()->attributes;
}, array_slice($items, ($currentPage - 1) * $perPage, $perPage)),
'paginator' => [
'current_page' => $currentPage,
'total' => count($items),
'per_page' => $perPage,
],
'display' => $this->helper->getDisplayMode(),
'working_dir' => $this->lfm->path('working_dir'),
];
}
【讨论】:
我正在更改 vendor/unisharp/laravel-filemanager/src/traits/LfmHelpers.php 中的代码 并且成功了
public function sortFilesAndDirectories($arr_items, $sort_type)
{
if ($sort_type == 'time') {
$key_to_sort = 'updated';
} elseif ($sort_type == 'alphabetic') {
$key_to_sort = 'name';
} else {
$key_to_sort = 'updated';
}
return strcmp($a->{$key_to_sort}, $b->{$key_to_sort});
});
return $arr_items;
}
与
public function sortFilesAndDirectories($arr_items, $sort_type)
{
if ($sort_type == 'time') {
$key_to_sort = 'updated';
} elseif ($sort_type == 'alphabetic') {
$key_to_sort = 'name';
} else {
$key_to_sort = 'updated';
}
uasort($arr_items, function ($a, $b) use ($key_to_sort) {
if ( $a->$key_to_sort == $a->$key_to_sort )
return 0;
else if ( $a->$key_to_sort > $a->$key_to_sort)
return -1;
else
return 1;
});
return $arr_items;
}
【讨论】:
LFM 1.8:
此外,如果您不想更改 LFM Src 代码,也可以使用此方法。 首先使用此命令生成视图:
php artisan vendor:publish --tag=lfm_view
找到这个文件:
ROOT/resources/views/vendor/laravel-filemanager/grid-view.blade.php
并根据以下更改鳕鱼:
@if((sizeof($files) > 0) || (sizeof($directories) > 0))
<div class="row">
<!-- -----------------------------------Begin of added block -->
<?php
$file_temp = [];
if($files != null){
foreach ($files as $key => $value) {
$file_temp[$value['updated']] = $value;
}
krsort($file_temp);
$file_temp1 = [];
$i = 0;
foreach ($file_temp as $key => $value) {
$file_temp1[$i] = $value;
$i+=1;
}
$files = $file_temp1;
}
?>
<!-- ---------------------------------------End of added block -->
@foreach($items as $item)
....
...
如您所见,添加了<?php ?> 代码块。您可以根据需要使用krsort() 或ksort() 进行descending 或ascending。
【讨论】: