Для работы требуется сниппет phpThumbOf.
Настройки
Массив настроек состоит из вложенных массивов настроек для разных директорий. Если файл загружается в директорию, для которой нет настроек — то берется конфиг по умолчанию, для корня сайта (/).Во вложенных массивах должны быть параметры для phpThumb:
- w — максимальная ширина изображений, по умолчанию 800px
- h — максимальная высота изображения, по умолчанию 600px
- zc — увеличение и обрезка, по умолчанию отключено
- bg — фон картинки, нужно при $zc=0, по умолчанию белый
- q — качество пережатия, по умолчанию — 100%
Вообще, это скорее черновик, чем готовый плагин — ибо у каждого свои требования для обработки изображений. Можно, например, для картинки высчитывать ширину в зависимости от максимальной высоты.
Так что комментируйте и поправляйте.
Плагин
<?php /** * ResizeOnUpload Plugin * * Events: OnFileManagerUpload * Author: Vasiliy Naumkin <bezumkin@yandex.ru> * Required: PhpThumbOf snippet for resizing images */ if ($modx->event->name != 'OnFileManagerUpload') {return;} /* Settings */ $config = array( '/' => array( // default config 'w' => 800 // max width of uploaded images ,'h' => 600 // max height of uploaded images ,'zc' => 0 // zoom & crop ,'bg' => '#fff' // backgroud, needed only for zc=0 ,'q' => 100 // quality ) //,'/assets/images/' => array() ); /*----------*/ $file = $modx->event->params['files']['file']; $directory = $modx->event->params['directory']; if ($file['error'] != 0) {return;} $name = $file['name']; $extensions = explode(',', $modx->getOption('upload_images')); if (array_key_exists($directory, $config)) { $config = $config[$directory]; } else { $config = $config['/']; } $filename = MODX_BASE_PATH . $directory . $name; $ext = substr(strrchr($name, '.'), 1); if (in_array($ext, $extensions)) { $sizes = getimagesize($filename); $format = substr($sizes['mime'],6); if ($sizes[0] > $config['w'] || $sizes[1] > $config['h']) { if ($sizes[0] < $config['w']) {$config['w'] = $sizes[0];} if ($sizes[1] < $config['h']) {$config['h'] = $sizes[1];} $options = ''; foreach ($config as $k => $v) { $options .= '&'.$k.'='.$v; } $resized = $modx->runSnippet('PhpThumbOf', array( 'input' => $directory.$name ,'options' => $options )); rename(MODX_BASE_PATH . substr($resized, 1), $filename); } }
Сделано по вот этой просьбе.
← Следующая заметка
Импорт в miniShop
Импорт в miniShop
Предыдущая заметка →
Robokassa для miniShop
Robokassa для miniShop
что именно не так писал в почту. там то всего пару строк поправить надо )
отдебагил ровно до этого момента:
/core/components/phpthumbof/model/phpthumbof/phpthumbof.class.php
строка 310
$this->cacheFilename .= '.'.md5(serialize($this->options)).$this->modx->resource->get('id');
вообщем почему то ресайз падает именно на ней, если убрать $this->modx->resource->get('id') — то работает, но тогда сам phpthumb некорректно работает на страницах.
я так понял это как то повлияло.
пробовал переустанавливать и пхп фамб и плагин — нифига не помогает,
тут явно какая-то особенность модикса или пхпфамба
И, кстати, я вместо runSnippet сделал так:
require_once MODX_CORE_PATH.'model/phpthumb/phpthumb.class.php';
Потому что, runSnippet('PhpThumbOf') генерировал ошибку, глянув в код — увидел, что он пытается получить id текущего ресурса, а ресурса то и нет…
В любом случае, это не готовый пакет, а ответ на просьбу одного из посетителей. Если доведете до ума и выложите готовое расширения — буду только рад.
На такие и надо переделать.
для пакетной загрузки
Может сделать возможность заливки на сервер большой картинки, с последующим ресайзом до вменяемого размера при помощи сервиса boxresizer.com или аналогичных (правда другие что то не нашел).
Не всем секретаршам удается успешно объяснить, как и зачем ресайзить фоточки с цифровичков, а такой плагин решил бы проблему…
Он уже там отписывался) но читателям может пригодится чтобы невелосипедить)
Фото грузятся в выбранную директорию
Внутри директории создается папка thumb в нее пишутся одноименные мниатюры
Лог загрузки пишется в log.txt внутри папки
Мы этот вопрос решили иначе и более комплексно.
Сейчас я делаю еще один источник и если в нем параметры basePath и baseUrl пустые то плагин отрабатывает, а если добавляю путь то не срабатывает.