Istruzioni per gestire l'ordinamento dei file in base al tempo per il file manager laravel della libreria
- 24-07-2022
- Toanngo92
- 0 Comments
In un progetto recente, dovevo caricare i file nell'ordine "time DESC" quando è stato chiamato l'iframe di laravel-filemanager. (Per impostazione predefinita, i file in laravel file manager sono ordinati in ordine alfabetico.) Il problema si verifica quando il numero di file è troppo grande, l'utente non riesce a trovare il file che ha appena caricato.
Durante la lettura dei documenti, non ho visto le opzioni personalizzate in questa situazione, quindi ci è voluto un po' più di tempo per imparare sull'overflow dello stack per risolvere il problema, quindi ho riscritto questo articolo oggi per farti risparmiare tempo nella ricerca, anche se dal mio punto di vista, questa è una cattiva soluzione perché devi modificare direttamente il codice nella directory del fornitore, ci saranno problemi durante l'aggiornamento, quindi per favore commenta il progetto in modo che i seguenti fratelli di codice comprendano il flusso di manutenzione.
Passaggio 1: accedi al file vendor/unisharp/laravel-filemanager/public/js/script.js
Modificare la seguente variabile per modificare il parametro di richiesta quando si chiama il server per ottenere i file:
var sort_type = 'alphabetic';
Modificato in:
var sort_type = 'time';
Passaggio 2: accedi al file vendor/unisharp/laravel-filemanager/src/Controllers/ItemsController.php
Commenta o elimina la vecchia funzione getItems() del file 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'), ]; }*/
Modifica il codice sorgente in:
use IlluminateHttpRequest; // định nghĩa kiểu dữ liệu request để hứng tham số từ request // sửa hàm getItems trong Controller public function getItems(Request $request) { /* dd($request) => nếu dump biến này ra, chúng ta sẽ thấy parameter url được thay đổi từ alphabetic thành time nếu sửa đúng */ $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'), ]; }
Quindi ok, buona fortuna!
Fare riferimento al collegamento per i dettagli: https://stackoverflow.com/questions/47003766/laravel-filemanager-sort-by-time-default