[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();
	}            
                Да, Максим, очень элегантно – благодарю!            
                    
            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.