Поэтому решил попытаться сделать похожее в Revo, где в качестве галереи выбрал Gallery. В Revo есть возможность создавать собственные параметры ввода для TV, на основе которых в Gallery сделан тип TV galleryalbumlist, с помощью которого можно привязать альбом к документы, но фотографии по прежнему загружаются через компоненты.
Создадим новый тип galleryalbumview. Принцип работы будет такой: TV хранит ID альбома в галерее, редактирования ID не будет. При редактировании документа проблем не будет, т.к. в TV значение ID альбома уже будет, а для новых документов создавать альбомы и записывать его ID будем при первом сохранении документа.
Для этого в папке core/components/gallery/elements/tv/input/ создадим файл galleryalbumview.class.php
<?php class GalleryAlbumViewInputRender extends modTemplateVarInputRender { public function getTemplate() { return $this->modx->getOption('gallery.core_path',null, $this->modx->getOption('core_path').'components/gallery/').'elements/tv/galleryalbumview.input.tpl'; } } return 'GalleryAlbumViewInputRender';
В папке core/components/gallery/elements/tv создадим шаблон galleryalbumview.input.tpl
<div id="tv{$tv->id}-form"></div> <input id="tv{$tv->id}" type="hidden" name="tv{$tv->id}" value="{$tv->value}"/> {if $tv->value ne ''} {literal} <script type="text/javascript"> // <![CDATA[ Ext.onReady(function() { MODx.load({{/literal} xtype: 'gal-panel-album-items' ,border: false ,autoHeight: true ,autoScroll: true ,forceLayout: true ,width: Ext.getCmp('modx-panel-resource').getWidth() - 300 ,album: '{$tv->value}' ,renderTo: 'tv{$tv->id}-form' ,tv: '{$tv->id}' ,tvValue: '{$tv->value}' {literal} }); }); // ]]> </script> {/literal} {else} <p>Please, save document before create gallery</p> {/if}
В плагине GalleryCustomTV (ставится вместе с Gallery) допишем нужные нам js и css файлы, в итоге в конце плагина код должен быть таким:
$modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/tv/Spotlight.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/gallery.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/widgets/album/album.items.view.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/widgets/album/album.tree.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/tv/gal.browser.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/tv/galtv.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/utils/ddview.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/utils/fileuploader.js'); $modx->controller->addJavascript($gallery->config['assetsUrl'].'js/mgr/widgets/album/album.panel.js'); $modx->controller->addCss($gallery->config['cssUrl'].'mgr.css'); $modx->controller->addCss($gallery->config['cssUrl'].'fileuploader.css');
Теперь у нас появился новый тип TV, создадим с данным типом TV, например GalleryAlbum и привяжем его к шаблону. Удобно такие автосозданные альбомы хранить в отдельном корневом альбоме в галерее, поэтому на вкладке «Параметры» создадим параметр galParentId со значением, к примеру, 1. Это ID родительского альбома (его необходимо предварительно создать).
Далее нам нужен плагин, который при сохранении документа будет создавать альбом в галерее и записывать его ID в TV.
Создадим плагин CreateGalleryAlbum, укажем событие OnDocFormSave
<?php switch ($modx->event->name) { case 'OnDocFormSave': $GalleryProcessorPath = $modx->getOption('gallery.core_path',$config,$modx->getOption('core_path').'components/gallery/').'processors/'; $options = array('processors_path'=>$GalleryProcessorPath); $galleryName = $resource->get('pagetitle'); //Получаем все TV текущего ресурса $tvs = $resource->getTemplateVars(); foreach($tvs as $tv) { //нам нужны только TV с типом galleryalbumview if ($tv->get('type')=='galleryalbumview') { $tvvalue = $tv->getValue($id); if (empty($tvvalue)) { //Параметры TV $tv_prop = $tv->get('properties'); //Создаем альбом $album = array( 'name' => $galleryName, 'parent' => isset($tv_prop['galParentId']['value'])?$tv_prop['galParentId']['value']:0, 'description' => '', 'active' => 1, 'prominent' => 0 ); $resp = $modx->runProcessor('mgr/album/create',$album,$options); if (!$resp->isError()) { $album = $resp->getObject(); $tv->setValue($id,$album['id']); $tv->save(); } } else { // TV уже есть, обновим название альбома $resp = $modx->runProcessor('mgr/album/get',array('id'=>$tvvalue),$options); if (!$resp->isError()) { $album = $resp->getObject(); $album['name'] = $galleryName; $modx->runProcessor('mgr/album/update',$album,$options); } } } } break; }
Для удобства при изменении документа плагин меняет название альбома как заголовок страницы. Это сделано на всякий случай для удобного поиска в галерее нужного альбома, чтобы названия страниц соответствовали названиям альбомов
Для удобства можно через Form Customization вынести данный TV на отдельную вкладку.
Вот собственно и все. Скриншот конечного результата:
Источник: community.modx-cms.ru/blog/tips_and_tricks/8733.html
Может ты сталкивался с проблемой использования Gallery на мультиязычных сайтах?
В контексте web альбомы нормально отображаются, а в других контекстах битые ссылки получаются т.к. phpthumb пытается их вывести через контекст web.
Если редактировать item галереи через дополнительные поля ресурса, то в textarea с именем description рендерится TinyMCE, может кто-нибудь сталкивался с такой проблемой?
TinyMCE вместо простой textarea
Вопрос — а как присвоить своему tv-параметру значение поля «обложка альбома» из выбранного выше альбома?
Я не совсем точно сформулировал.
В общем, суть такова — нужно создать два tv-параметра с типом «выпадающий список» и, чтобы при выборе значения из первого списка, во втором списке динамически формировались значения, на основании значения, выбранного в первом списке.
Как это сделать на голом php+ajax я примерно представляю, но не могу переложить это на админку modx, в разрезе использования tv-параметров.
Он позволяет публиковать изображения с привязкой к ресурсу. Изображения кладет в папки: год->месяц->число
Можно использовать с Tickets, для этого в настройках компонента в поле assman.class_keys указать [«Ticket»]
Автор пишет, что обновление компонента почему-то не допускают в репозиторий модекс
Поэтому, чтобы исправить баг меню в версии ModX 2.4.2, нужно из гитхаба автора переписать файл core/components/assman/controllers/BaseController.php.
в чем дело?
У меня несколько альбомов, массово загрузил в них фото. Хочу описание фото сделать из названия фото. Накидал такое:
Что вместо setTVValue нужно?
Данная инструкция еще работает? Кто подскажет результат работы на последней gallery?
если нет какие альтернативы?
Modx Gallery. Блок на главной — «ГАЛЕРЕЯ НАШИХ РАБОТ» содержит некоторое количество альбомов, внутри которых фотографии. Если выводить стандартным чанком «galAlbumRowWithCoverTpl», то выводятся заглавные картинки альбомов.
А как сделать при клике на альбом, чтобы открывалась галерея с фотографиями (содержимым альбома)…? не понимаю… Сейчас ссылка в чанке на это выглядит так…
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]]>
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]]"`]] alt="[[+title]]" />`]]
Как поменять ее в нужную сторону?