anasmorahhib
anasmorahhib

Reputation: 827

laravel-filemanager, Sort by time default

I need load files order by "time DESC" when the iframe of laravel-filemanager is called. Is posible? I read the code and see that we cant order by time DESC and the code dont have options to configure a default "sort_type"

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

Upvotes: 0

Views: 1971

Answers (4)

In 2.3 I did next steps

php artisan vendor:publish --tag=lfm_view

Then you can find file

ROOT/resources/views/vendor/laravel-filemanager/grid-view.blade.php

And after incuding

<script>{!! \File::get(base_path('vendor/unisharp/laravel-filemanager/public/js/script.js')) !!}</script>

I added one line of js

 sort_type = 'time';

But files sorts from the oldest to the newest. Thast's why I redefined routes and ItemsController

Upvotes: 0

JITENDRA CHOUDHARY
JITENDRA CHOUDHARY

Reputation: 91

this is not good idea but it's work for me

i am change the code in vendor/unisharp/laravel-filemanager/public/js/script.js

var sort_type = 'alphabetic';

to

var sort_type = 'time';

if you want to sort date in desc order. change the code in

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'),
    ];
}

with

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'),
    ];
}

Upvotes: 3

javad m
javad m

Reputation: 368

LFM 1.8:

Also, you can use this method, if you don't want to change the LFM Src code. First use this command to generate views :

php artisan vendor:publish --tag=lfm_view

Find this file:

ROOT/resources/views/vendor/laravel-filemanager/grid-view.blade.php

and change the cod according the follow:

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

...

As you can see, the <?php ?> code block was added.You can use krsort() or ksort() as you want for descending or ascending.

Upvotes: 0

anasmorahhib
anasmorahhib

Reputation: 827

i'm change the code in vendor/unisharp/laravel-filemanager/src/traits/LfmHelpers.php and it's worked

   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;
    }

with

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;
    }

Upvotes: 0

Related Questions