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`.