Сохранение автора новости, при её создании
Актуально для версии 2.18
Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS.
В новой реализации модулей необходимо добавить код в файл ~/classes/components/news/custom_events.php В старой реализации модулей добавим код в файл ~/classes/modules/news/custom_events.php
<?php
new umiEventListener('systemCreateElement', 'news', 'setAuthor');
new umiEventListener('systemModifyElement', 'news', 'setAuthorEdition');
?>
В новой реализации добавим в файл ~/classes/components/news/permissions.custom.php запись о наших будущих обработчиках. В старой реализации запись добавляется в файл ~/classes/modules/news/permissions.custom.php
Теперь в типе данных "Новость" создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника справочник "Пользователь". Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего.
В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/components/news/customAdmin.php после строки
public $module;
В старой реализации модулей код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)
public function setAuthor(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
$object = $oEventPoint->getRef("element");
$permissions = permissionsCollection::getInstance();
$currentUser=$permissions->getUserId();
$object->setValue('author',$currentUser);
$object->commit();
return true;
}
}
public function setAuthorEdition(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
$object = $oEventPoint->getRef("element");
$permissions = permissionsCollection::getInstance();
$currentUser=$permissions->getUserId();
$object->setValue('authoredition',$currentUser);
$object->commit();
return true;
}
}
Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал.