Сохранение автора новости, при её создании — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 14: Строка 14:
 
public function setAuthor(iUmiEventPoint $oEventPoint){
 
public function setAuthor(iUmiEventPoint $oEventPoint){
 
if ($oEventPoint->getMode() === "after"){
 
if ($oEventPoint->getMode() === "after"){
 +
'''Актуально для версии 2.9'''
 +
 
$object = $oEventPoint->getRef("element");
 
$object = $oEventPoint->getRef("element");
 
$permissions = permissionsCollection::getInstance();
 
$permissions = permissionsCollection::getInstance();
Строка 39: Строка 41:
 
Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.
 
Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.
 
</p>
 
</p>
[[Категория:Модуль Новости]]
+
[[Категория:Модуль Новости]][[Категория:Написание кастомных макросов]]

Версия 09:32, 5 июня 2013

Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS. В файл ~/classes/modules/news/custom_events.php добавим код

<?php
new umiEventListener('systemCreateElement', 'news', 'setAuthor');
new umiEventListener('systemModifyElement', 'news', 'setAuthorEdition');
?>

В файл ~/classes/modules/news/permissions.custom.php добавим запись о наших будущих обработчиках. Теперь в типе данных Новость создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника спаравочник "Пользователь". Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего. Код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)

<?php
public function setAuthor(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
'''Актуально для версии 2.9'''

$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 тот кто редактировал.

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