Автоматическое формирование анонса новости — различия между версиями
Mad grant (обсуждение | вклад) |
Vitaliks (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии | + | '''Актуально для версии 20''' |
Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement. | Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement. | ||
− | Добавим вызов нашего | + | Добавим вызов нашего будущего метода в файл ~/classes/components/news/custom_events.php |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | new umiEventListener('systemCreateElement', 'news', ' | + | new umiEventListener('systemCreateElement', 'news', 'anonsGenerate'); |
− | new umiEventListener('systemModifyElement', 'news', ' | + | new umiEventListener('systemModifyElement', 'news', 'anonsGenerate'); |
− | + | ||
</source> | </source> | ||
− | после этого напишем сам обработчик в файл ~/classes/ | + | после этого напишем сам обработчик в файл ~/classes/components/news/customAdmin.php |
<source lang="php"> | <source lang="php"> | ||
− | + | ||
− | public function | + | public function anonsGenerate(iUmiEventPoint $oEventPoint){ |
− | + | if ($oEventPoint->getMode() === "after"){ | |
− | + | $object = $oEventPoint->getRef("element"); | |
− | + | $content = $object->getValue('content'); | |
− | + | $limit = 199; | |
− | + | $result = substr($content, 0, $limit) . '...'; | |
− | + | $object->setValue('anons', $result); | |
− | + | $object->commit(); | |
− | + | return true; | |
− | + | } | |
− | + | } | |
− | + | ||
− | |||
</source> | </source> | ||
− | в данной функции происходит получение содержимого поля content новости, и в поле anons записывается | + | в данной функции происходит получение содержимого поля content новости, и в поле anons записывается первые 199 символов содержимого поля content, это ограничение указывается в переменной $limit. |
Для правильной работы, необходимо не забыть добавить запись об этой функции в файл permissions.custom.php. | Для правильной работы, необходимо не забыть добавить запись об этой функции в файл permissions.custom.php. | ||
Теперь, при добавлении/редактировании новости, анонс будет формироваться автоматически. | Теперь, при добавлении/редактировании новости, анонс будет формироваться автоматически. |
Текущая версия на 10:08, 31 октября 2019
Актуально для версии 20
Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement. Добавим вызов нашего будущего метода в файл ~/classes/components/news/custom_events.php
<?php
new umiEventListener('systemCreateElement', 'news', 'anonsGenerate');
new umiEventListener('systemModifyElement', 'news', 'anonsGenerate');
после этого напишем сам обработчик в файл ~/classes/components/news/customAdmin.php
public function anonsGenerate(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
$object = $oEventPoint->getRef("element");
$content = $object->getValue('content');
$limit = 199;
$result = substr($content, 0, $limit) . '...';
$object->setValue('anons', $result);
$object->commit();
return true;
}
}
в данной функции происходит получение содержимого поля content новости, и в поле anons записывается первые 199 символов содержимого поля content, это ограничение указывается в переменной $limit. Для правильной работы, необходимо не забыть добавить запись об этой функции в файл permissions.custom.php. Теперь, при добавлении/редактировании новости, анонс будет формироваться автоматически.
Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.