[ms2gallery] Источник файлов для разных шаблонов
Небольшой плагин, позволяющий автоматически установить нужный источник файлов при создании ресурса с использованием дополнения ms2gallery.
У меня была такая ситуация: галерея нужна для 2-х разных сущностей: продукция и обычная страница.
Для каждого объекта нужны свои размеры превьюшек.
Решается просто: создаем 2 разных источника файлов, и создаем плагин на OnDocFormSave.
Плагин используется вместе с changeTemplate, что бы при создании ресурсов и шаблоны нужные прописывались.
У меня была такая ситуация: галерея нужна для 2-х разных сущностей: продукция и обычная страница.
Для каждого объекта нужны свои размеры превьюшек.
Решается просто: создаем 2 разных источника файлов, и создаем плагин на OnDocFormSave.
Плагин используется вместе с changeTemplate, что бы при создании ресурсов и шаблоны нужные прописывались.
<?php
if ($modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NEW) {
if($resource->get('template') == 3){ // наш шаблон
$properties = $modx->fromJSON($resource->get('properties'));
$properties['ms2gallery'] = array('media_source' => 3); // его источник файлов
$resource->set('properties', $modx->toJSON($properties));
$resource->save();
}
}
Комментарии: 15
Спасибо, Алексей.
А как сделать аналогичный плагин для minishop2?
Как оказалось, еще проще:
<?php
if ($modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NEW) {
if ($resource->get('template') == 3) {
$resource->set('source', 4);
}
}
Привет подскажи пожалуйста почему может не срабатывать для обычного документа, код от Наумова Алексея
У меня работает для обычного документа. Если сделаешь минимальный пример на тестовом modx.pro, может посмотрю.
сам код работает:
$properties = $modx->fromJSON($resource->get('properties'));
$properties['ms2gallery'] = array('media_source' => 5); // его источник файлов
$resource->set('properties', $modx->toJSON($properties));
$resource->save();
Загвоздка где то тут:$modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NE
Может из за того что ModX revo 2.6.0 и PHP 7
Может, я на 2.5.8 проверял…
Но на php7
Выведи в лог значения $mode, modSystemEvent::MODE_NEW и посмотри, чему они равны.
Но на php7
Выведи в лог значения $mode, modSystemEvent::MODE_NEW и посмотри, чему они равны.
new = new
Ну значит загвоздка не в этой строчке.
Логай дальше и ищи ошибку, не знаю чем еще помочь)
Логай дальше и ищи ошибку, не знаю чем еще помочь)
если делаю так, то при повторном сохранение документа media_source изменяется
if ($modx->event->name == 'OnDocFormSave') {
if ($resource->get('template') == 13){ // наш шаблон
$properties = $modx->fromJSON($resource->get('properties'));
$properties['ms2gallery'] = array('media_source' => 5); // его источник файлов
$resource->set('properties', $modx->toJSON($properties));
$resource->save();
}
}
не срабатывает, помогите пожалуйста
Рабочий код. Использую на всех проектах. Modx 2.5.8, 2.6. Версия php 7.0, 7.1
Пример для нескольких источников и разных шаблонов. Системные события проставить соответственно: OnDocFormSave и OnDocFormRender
Пример для нескольких источников и разных шаблонов. Системные события проставить соответственно: OnDocFormSave и OnDocFormRender
<?php
$tplList3=Array("10,12,14"); //Шаблоны с источником файлов "3" через запятую
$tplList5=Array("11"); //Шаблоны с источником файлов "5"
$tplList6=Array("15"); //Шаблоны с источником файлов "6"
if (($modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NEW) OR ($modx->event->name == 'OnDocFormRender' && $mode == modSystemEvent::MODE_UPD)) {
foreach($tplList3 as $tpl){ // Поочерёдно считываем данные из массива
if($resource->get('template')==$tpl){
$properties = $resource->get('properties');
$properties['ms2gallery'] = array('media_source' => 3); //источник файлов
$resource->set('properties', $properties);
$resource->save();
return;
}
}
foreach($tplList5 as $tpl){ // Поочерёдно считываем данные из массива
if($resource->get('template')==$tpl){
$properties = $resource->get('properties');
$properties['ms2gallery'] = array('media_source' => 5); //источник файлов
$resource->set('properties', $properties);
$resource->save();
return;
}
}
foreach($tplList6 as $tpl){ // Поочерёдно считываем данные из массива
if($resource->get('template')==$tpl){
$properties = $resource->get('properties');
$properties['ms2gallery'] = array('media_source' => 6); //источник файлов
$resource->set('properties', $properties);
$resource->save();
return;
}
}
}
Мои глаза…
<?php
if (($modx->event->name == 'OnDocFormSave' && $mode == 'new') || ($modx->event->name == 'OnDocFormRender' && $mode == 'upd')) {
switch ($resource->get('template')) {
case 10:
case 12:
case 14:
$source = 3;
break;
case 11:
$source = 5;
break;
case 15:
$source = 6;
break;
}
if ($source) {
$properties = $resource->get('properties');
$properties['ms2gallery'] = array('media_source' => $source);
$resource->set('properties', $properties);
}
}
if ($mode == 'new') {
$resource->save();
}
Да, Максим, очень элегантно – благодарю!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.