【问题标题】:laravel-filemanager, Sort by time defaultlaravel-filemanager,默认按时间排序
【发布时间】:2017-10-29 18:31:48
【问题描述】:

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

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

【问题讨论】:

    标签: laravel-5.5 file-management


    【解决方案1】:

    这不是个好主意,但它对我有用

    我正在更改 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'),
        ];
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        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)
          ....
        

        ...

        如您所见,添加了&lt;?php ?&gt; 代码块。您可以根据需要使用krsort()ksort() 进行descendingascending

        【讨论】:

          猜你喜欢
          • 2011-09-28
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多