SimpleGallery: расширение функционала, часть 1
- Дополнения
- SimpleGallery
- Расширение функционала, часть 1
SimpleGallery: расширение функционала, часть 1
Среди достоинств SimpleGallery есть возможность изменять логику работы, не опасаясь потерять эти изменения с очередным обновлением (ну, почти не опасаясь).
Возможности даже три — можно писать плагины, можно расширять классы, можно загружать свои js-скрипты.
В этой статье опишу события для плагинов, а в следующий раз покажу пример более радикального вмешательства с изменением не только логики работы, но и интерфейса.
На сегодняшний день в SimpleGallery можно использовать четыре события.
OnFileBrowserUpload
Событие происходит после успешной загрузки файла.
Доступные переменные:
- $filepath — путь к файлу, без слеша в конце (/var/www/test/www/assets/galleries/5);
- $filename — имя файла (image.jpg);
- $template — id шаблона галереи;
- $rid- id ресурса с галереей.
Применение: обработка загруженных изображений и генерация превью.
OnSimpleGallerySave
Событие происходит после записи информации о файле в базу, т.е. после успешной загрузки файла и после сохранения формы редактирования.
Доступные переменные:
- названия полей в базе (sg_id,sg_image и т.д.);
- $template — id шаблона галереи;
- $newDoc — если true, то событие произошло при добавлении данных о файле, иначе — при редактировании.
Для новых файлов это событие можно считать частным случаем события OnFileBrowserUpload, которое происходит после загрузки файлов вообще (т.е. и через управление файлами, и через KCFinder).
Применение: дополнительная обработка данных в БД.
OnSimpleGalleryDelete
Событие происходит после того, как из базы удаляется информация о файле.
Доступные переменные:
- $id — значение поля sg_id для удаленного файла;
- $filepath — путь к файлу, без слеша в конце;
- $filename — имя файла;
- $name — имя файла без расширения;
- $ext — расширение файла;
- $mime — MIME-тип файла;
- $template — id шаблона галереи.
Применение: удаление сгенерированных при загрузке превьюшек.
OnSimpleGalleryRefresh
Событие происходит после того, как администратор нажмет соответствующую кнопку и позволяет выполнить какую-то обработку уже загруженных файлов. По сути это событие OnSimpleGallerySave с установленным флагом $newDoc.
Доступные переменные — те же, что и для OnSimpleGallerySave, кроме $newDoc.
Применение: пересоздать превью с новыми параметрами.
И чтобы было понятно, вот пример плагина, который:
- создает превьюшки при загрузке и сохраняет их в подпапку small;
- удаляет их при удалении картинок;
- позволяет сгенерировать превьюшки для уже загруженных ранее картинок;
- а также будет очищать поле sg_title для новых картинок (для тех, кто страдает seo).
$e = &$modx->event; if ($e->name == "OnFileBrowserUpload" && isset($template)) { $thumb = new \Helpers\PHPThumb(); $fs = \Helpers\FS::getInstance(); $fs->makeDir($filepath.'/small'); $thumb->create($filepath.'/'.$filename,$filepath.'/small/'.$filename,'w=350&h=245&zc=1&q=96&f=jpg'); } if ($e->name == "OnSimpleGalleryRefresh") { $fs = \Helpers\FS::getInstance(); $filepath = $fs->takeFileDir($sg_image); $filename = $fs->takeFileBasename($sg_image); $thumb = new \Helpers\PHPThumb(); $fs->makeDir($filepath.'/small'); $thumb->create($filepath.'/'.$filename,$filepath.'/small/'.$filename,'w=350&h=245&zc=1&q=96&f=jpg'); } if ($e->name == "OnSimpleGalleryDelete") { $fs = \Helpers\FS::getInstance(); $file = $filepath.'/small/'.$filename; if (file_exists($file)) unlink($file); } if ($e->name == "OnSimpleGallerySave") { if ($newDoc) { $data = new \SimpleGallery\sgData($modx); $data->edit($sg_id)->set('sg_title',' ')->save(); } }
Как видно из примера, в событиях доступны классы \SimpleGallery\sgData, \Helpers\FS и \Helpers\PHPThumb, чем я и воспользовался, чтобы не усложнять плагин.
Если выводить через sgLister, то нужно создать сниппет, который будет добавлять small/ перед именем файла:
<?php //mythumb $file = end(explode('/',$input)); return str_replace($file,$options.'/'.$file,$input);
И указать параметры: &thumbSnippet=`mythumb` &thumbOptions=`small`.