laravel-filemanager,默认按时间排序
laravel-filemanager, Sort by time default
我需要在调用 laravel-filemanager 的 iframe 时按 "time DESC" 顺序加载文件。
可能吗?我阅读了代码,发现我们无法按时间 DESC 排序,并且代码没有配置默认值 "sort_type"
的选项
我正在更改 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 ?>
代码块 added.You 可以根据需要使用 krsort()
或 ksort()
descending[=32] =] 或 升序.
这不是个好主意,但对我有用
我正在更改 vendor/unisharp/laravel-filemanager/public/js/script.js
中的代码
var sort_type = 'alphabetic';
到
var sort_type = 'time';
如果您想按降序排列日期。更改
中的代码
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'),
];
}
在 2.3 中我做了后续步骤
php artisan vendor:publish --tag=lfm_view
然后就可以找到文件
ROOT/resources/views/vendor/laravel-filemanager/grid-view.blade.php
并在包含之后
<script>{!! \File::get(base_path('vendor/unisharp/laravel-filemanager/public/js/script.js')) !!}</script>
我加了一行js
sort_type = 'time';
但是文件是从旧到新排序的。这就是我重新定义路线和 ItemsController
的原因
我需要在调用 laravel-filemanager 的 iframe 时按 "time DESC" 顺序加载文件。 可能吗?我阅读了代码,发现我们无法按时间 DESC 排序,并且代码没有配置默认值 "sort_type"
的选项我正在更改 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 ?>
代码块 added.You 可以根据需要使用 krsort()
或 ksort()
descending[=32] =] 或 升序.
这不是个好主意,但对我有用
我正在更改 vendor/unisharp/laravel-filemanager/public/js/script.js
中的代码var sort_type = 'alphabetic';
到
var sort_type = 'time';
如果您想按降序排列日期。更改
中的代码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'),
];
}
在 2.3 中我做了后续步骤
php artisan vendor:publish --tag=lfm_view
然后就可以找到文件
ROOT/resources/views/vendor/laravel-filemanager/grid-view.blade.php
并在包含之后
<script>{!! \File::get(base_path('vendor/unisharp/laravel-filemanager/public/js/script.js')) !!}</script>
我加了一行js
sort_type = 'time';
但是文件是从旧到新排序的。这就是我重新定义路线和 ItemsController
的原因