Автоматическое копирование фотографии в другую языковую версию — различия между версиями
Davidov (обсуждение | вклад) (Новая страница: «Если на сайте несколько языковых версий, то добавлять материалы, не содержащие текста, так…») |
Davidov (обсуждение | вклад) |
||
Строка 42: | Строка 42: | ||
?> | ?> | ||
</source> | </source> | ||
− | указывая необходимые id языковой версии и фотогалереи в ней. | + | указывая необходимые id языковой версии и фотогалереи в ней. Если требуется копирование страницы, а не создание виртуальной копии, то в обработчике нужно заменить copyElement на cloneElement. |
− | + | Для работы обработчика, необходимо также добавить в файл ~/classes/modules/content/permissions.custom.php запись об этом кастомном методе: | |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php |
Версия 06:35, 2 июля 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')
);
?>