laravel-filemanager,默认按时间排序

laravel-filemanager, Sort by time default

我需要在调用 laravel-filemanager 的 iframe 时按 "time DESC" 顺序加载文件。 可能吗?我阅读了代码,发现我们无法按时间 DESC 排序,并且代码没有配置默认值 "sort_type"

的选项

https://github.com/UniSharp/laravel-filemanager

我正在更改 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

的原因