Кэширование картинок в LaravelFilemanager при помощи CropImages by crghome

Зависимости:

LaravelFilemanager под капотом требует библиотеку php imagick для создания миниатюр, в случае отсутствия - происходят ошибки при загрузке. Картинка загружается, но миниатюра не создается. Но это не основная даже проблема. Наибольшая проблема - если мы грузим картинки не при помощи Файлового менеджера (ftp, resource), тогда при вызове менеджера - будет показана полная картинка. И в директории может находится много картинок с большими размерами, что приведет к долгой загрузке.

Сам обработчик построен на скриптовом файле, и осуществить подмену не удалось. Поэтому страшная вещь - дополнение скрипта в Vendor. Благо поддержка слабая - и обновление пакета крайне редкое явление, но стоит помнить.

Файл собирающий массив для аджакс запроса находится по адресу /vendor/unisharp/laravel-filemanager/src/Controllers/ItemsController. необходимо подключить файл обработки, и произвести генерации thumbnails:

use App\Helpers\CropImages;

// ...

    public function getItems()
    {
        $cropImages = new CropImages();
        $currentPage = self::getCurrentPageFromRequest();

        $perPage = $this->helper->getPaginationPerPage();
        $items = array_merge($this->lfm->folders(), $this->lfm->files());

        return [
            'items' => array_map(function ($item)use($cropImages) {
                $itemI = $item->fill()->attributes;
                if($itemI['is_file']??false) $itemI['thumb_url'] = $cropImages->cropImages(imagePath: $itemI['url'], createWidth: 200);
                return $itemI;
            }, 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'),
        ];
    }

// ...
Статьи данной темы

CRG Home 2026

Не является публичной офертой.