[ms2gallery] Источник файлов для разных шаблонов

Небольшой плагин, позволяющий автоматически установить нужный источник файлов при создании ресурса с использованием дополнения ms2gallery.

У меня была такая ситуация: галерея нужна для 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();
  }
}
Наумов Алексей
04 сентября 2014, 09:51
modx.pro
30
4 796
+5

Комментарии: 15

Игорь Новичек
04 сентября 2014, 23:43
0
Спасибо, Алексей.
    nekto
    08 октября 2015, 16:59
    0
    А как сделать аналогичный плагин для minishop2?
      Дмитрий
      07 мая 2016, 14:42
      1
      +1
      Как оказалось, еще проще:
      <?php
      if ($modx->event->name == 'OnDocFormSave' && $mode == modSystemEvent::MODE_NEW) {
          if ($resource->get('template') == 3) {
              $resource->set('source', 4);
          }
      }
        Николай
        22 ноября 2017, 14:54
        0
        Привет подскажи пожалуйста почему может не срабатывать для обычного документа, код от Наумова Алексея
          Дмитрий
          22 ноября 2017, 16:17
          0
          У меня работает для обычного документа. Если сделаешь минимальный пример на тестовом modx.pro, может посмотрю.
            Николай
            22 ноября 2017, 16:52
            0
            сам код работает:
            $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
              Дмитрий
              22 ноября 2017, 17:00
              0
              Может, я на 2.5.8 проверял…
              Но на php7
              Выведи в лог значения $mode, modSystemEvent::MODE_NEW и посмотри, чему они равны.
                Николай
                22 ноября 2017, 17:04
                0
                new = new
                  Дмитрий
                  22 ноября 2017, 17:15
                  0
                  Ну значит загвоздка не в этой строчке.
                  Логай дальше и ищи ошибку, не знаю чем еще помочь)
                  Николай
                  22 ноября 2017, 17:13
                  0
                  если делаю так, то при повторном сохранение документа 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();
                      }
                  }
      Николай
      22 ноября 2017, 13:36
      0
      не срабатывает, помогите пожалуйста
        Дмитрий
        22 ноября 2017, 20:15
        0
        Рабочий код. Использую на всех проектах. Modx 2.5.8, 2.6. Версия php 7.0, 7.1
        Пример для нескольких источников и разных шаблонов. Системные события проставить соответственно: 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;
            }
          }
        }
          Максим Кузнецов
          22 ноября 2017, 22:30
          1
          +2
          Мои глаза…

          <?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();
          	}
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      15