Поддержать Проект

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
      • Вывод изображений
      • Вывод списка галерей
      • Генерация превью при загрузке
      • Расширение функционала, часть 1
      • Расширение функционала, часть 2
      • Расширение функционала, часть 3
      • Переход с MaxiGallery
      • Переход с EvoGallery
      • Переход с PssGallery
      • Переход с MultiPhotos
      • Подключение редактора
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • SimpleGallery

SimpleGallery: расширение функционала, часть 1

  • Дополнения
  • SimpleGallery
  • Расширение функционала, часть 1
669

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