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

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

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

Актуально для версии 2.9

Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью 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.