Автоматическое копирование фотографии в другую языковую версию — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 51: Строка 51:
 
?>
 
?>
 
</source>
 
</source>
 +
<p>
 +
Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.
 +
</p>
 
[[Категория:Модуль Фотогалереи]][[Категория:Написание кастомных макросов]]
 
[[Категория:Модуль Фотогалереи]][[Категория:Написание кастомных макросов]]

Версия 06:52, 1 августа 2012

Если на сайте несколько языковых версий, то добавлять материалы, не содержащие текста, такие как фотографии можно одинаковые во все языковые версии. Воспользуемся для этого событийной моделью UMI.CMS. Для того, чтобы при добавлении фотографии, создавалась её виртуальная копия в другой языковой версии, напишем обработчик события systemCreateElement. В файле ~/classes/modules/content/custom_events.php размещаем код вызова обработчика:

<?php
	new umiEventListener('systemCreateElement', 'content', 'copy_on_other_lang');
?>

сам обработчик поместим в файл ~/classes/modules/content/__custom.php после строки //TODO: Write here your own macroses, код обработчика будет примерно следующий:

<?php
public function copy_on_other_lang(iUmiEventPoint $oEventPoint) {
 if ($oEventPoint->getMode() === "after"){
  $object = $oEventPoint->getRef("element");
  $id=$object->id;
  $parentId=$object->getParentId();
  $hierarchy = umiHierarchy::getInstance();
  $module=$object->getModule();
  //Если модуль photoalbum, выполняем копирование
  if($module=='photoalbum'){
   $newPhoto=$hierarchy->copyElement($id,$parentId);
   $hierarchy = umiHierarchy::getInstance();
   $photo=$hierarchy->getElement($newPhoto);
   $photo->setLangId(2);
   $hierarchy->moveFirst($newPhoto,157);
   $photo->commit();
  }
  return true;
 }
}
?>

в данном случае, при добавлении фотографии будет создана её виртуальная копия в языковой версии с id 2 в фотогалерею с id 157. Если требуется производить копирование ещё в несколько языковых версий, следует повторить для каждой языковой версии участок кода

<?php
   $newPhoto=$hierarchy->copyElement($id,$parentId);
   $hierarchy = umiHierarchy::getInstance();
   $photo=$hierarchy->getElement($newPhoto);
   $photo->setLangId(id_языковой_версии);
   $hierarchy->moveFirst($newPhoto,id_фотогалереи_в_другой_языковой_версии);
   $photo->commit();
?>

указывая необходимые id языковой версии и фотогалереи в ней. Если требуется копирование страницы, а не создание виртуальной копии, то в обработчике нужно заменить copyElement на cloneElement. Для работы обработчика, необходимо также добавить в файл ~/classes/modules/content/permissions.custom.php запись об этом кастомном методе:

<?php
$permissions = Array(
'sitetree' => Array('copy_on_other_lang')
);
?>

Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.