Автоматическое формирование анонса новости — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
Строка 1: Строка 1:
'''Актуально для версии 2.9'''
+
'''Актуально для версии 20'''
  
 
Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement.
 
Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement.
Добавим вызов нашего будешего метода в файл ~/classes/modules/news/custom_events.php
+
Добавим вызов нашего будущего метода в файл ~/classes/components/news/custom_events.php
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
new umiEventListener('systemCreateElement', 'news', 'anons_generate');
+
new umiEventListener('systemCreateElement', 'news', 'anonsGenerate');
new umiEventListener('systemModifyElement', 'news', 'anons_generate');
+
new umiEventListener('systemModifyElement', 'news', 'anonsGenerate');
?>
+
 
 
</source>
 
</source>
после этого напишем сам обработчик в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)
+
после этого напишем сам обработчик в файл ~/classes/components/news/customAdmin.php
 
<source lang="php">
 
<source lang="php">
<?php
+
 
public function anons_generate(iUmiEventPoint $oEventPoint){
+
public function anonsGenerate(iUmiEventPoint $oEventPoint){
            if ($oEventPoint->getMode() === "after"){
+
if ($oEventPoint->getMode() === "after"){
                $object = $oEventPoint->getRef("element");
+
$object = $oEventPoint->getRef("element");
                $content=$object->getValue('content');
+
$content = $object->getValue('content');
                $limit=200;
+
$limit = 199;
                $result=strpos($content,". ", $limit)+1;
+
$result = substr($content, 0, $limit) . '...';
                $result=substr($content,0,$result);
+
$object->setValue('anons', $result);
                $object->setValue('anons',$result);
+
$object->commit();
                $object->commit();
+
return true;
                return true;
+
}
            }
+
}
        }
+
 
?>
 
 
</source>
 
</source>
в данной функции происходит получение содержимого поля content новости, и в поле anons записывается часть содержимого поля content от начала и до первого вхождения строки ". " после 200 символа. Ограничение указывается в переменной $limit.
+
в данной функции происходит получение содержимого поля 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.