Сохранение автора новости, при её создании — различия между версиями
Mad grant (обсуждение | вклад) |
Kublan (обсуждение | вклад) |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 2.18''' | ||
+ | |||
Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS. | Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS. | ||
− | В файл ~/classes/ | + | |
+ | В новой реализации модулей необходимо добавить код в файл ~/classes/components/news/custom_events.php | ||
+ | В старой реализации модулей добавим код в файл ~/classes/modules/news/custom_events.php | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
Строка 7: | Строка 11: | ||
?> | ?> | ||
</source> | </source> | ||
− | В файл ~/classes/ | + | В новой реализации добавим в файл ~/classes/components/news/permissions.custom.php запись о наших будущих обработчиках. В старой реализации запись добавляется в файл ~/classes/modules/news/permissions.custom.php |
− | Теперь в типе данных Новость создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника | + | |
− | Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего. | + | Теперь в типе данных "Новость" создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника справочник "Пользователь". |
+ | Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего. | ||
+ | |||
+ | В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/components/news/customAdmin.php после строки | ||
+ | <source lang="php"> | ||
+ | public $module; | ||
+ | </source> | ||
+ | В старой реализации модулей код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode) | ||
<source lang="php"> | <source lang="php"> | ||
− | + | ||
public function setAuthor(iUmiEventPoint $oEventPoint){ | public function setAuthor(iUmiEventPoint $oEventPoint){ | ||
− | if ($oEventPoint->getMode() === "after"){ | + | if ($oEventPoint->getMode() === "after"){ |
− | + | $object = $oEventPoint->getRef("element"); | |
− | + | $permissions = permissionsCollection::getInstance(); | |
− | $object = $oEventPoint->getRef("element"); | + | $currentUser=$permissions->getUserId(); |
− | $permissions = permissionsCollection::getInstance(); | + | $object->setValue('author',$currentUser); |
− | $currentUser=$permissions->getUserId(); | + | $object->commit(); |
− | $object->setValue('author',$currentUser); | + | return true; |
− | $object->commit(); | + | } |
− | return true; | ||
− | } | ||
} | } | ||
public function setAuthorEdition(iUmiEventPoint $oEventPoint){ | public function setAuthorEdition(iUmiEventPoint $oEventPoint){ | ||
− | if ($oEventPoint->getMode() === "after"){ | + | if ($oEventPoint->getMode() === "after"){ |
− | $object = $oEventPoint->getRef("element"); | + | $object = $oEventPoint->getRef("element"); |
− | $permissions = permissionsCollection::getInstance(); | + | $permissions = permissionsCollection::getInstance(); |
− | $currentUser=$permissions->getUserId(); | + | $currentUser=$permissions->getUserId(); |
− | $object->setValue('authoredition',$currentUser); | + | $object->setValue('authoredition',$currentUser); |
− | $object->commit(); | + | $object->commit(); |
− | return true; | + | return true; |
+ | } | ||
} | } | ||
− | |||
− | |||
</source> | </source> | ||
Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал. | Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал. | ||
− | |||
− | |||
− | |||
[[Категория:Модуль Новости]][[Категория:Написание кастомных макросов]] | [[Категория:Модуль Новости]][[Категория:Написание кастомных макросов]] |
Текущая версия на 15:47, 1 мая 2018
Актуально для версии 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 тот кто редактировал.