UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: AllaVK от 26 Сентября 2011, 17:00:23

Название: Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 26 Сентября 2011, 17:00:23
Добрый вечер!
делаю на UMI сайт, параллельно разбираюсь в написании кастомных макросов.
Требуется в отдельную ленту новостей добавлять новости  об изменениях на сайте. Например, новости вида: добавлена новость в раздел "Название раздела" и ссылка на нее, добавлена статья и ссылка на нее, изменена страница и ссылка на нее, и тд...
Насколько я понимаю, надо прописывать обработчики событий systemModifyElement, systemModifyObject, systemCreateElement, systemCreateObject, systemDeleteElement, systemDeleteObject.
Подскажите, пожалуйста, чтобы отследить изменения на сайте, обработчики этих событий я должна прописывать в классе каждого модуля UMI? если можно, была бы рада и кодам с примерами... подобные вещи делаю впервые...
заранее спасибо всем откликнувшимся!
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 27 Сентября 2011, 00:58:11
не знаю точно, но есть рабочий пример когда к модулю content прикручен event, который работает только со страницами каталога (возможно, если страницы каталога редактировать в модуле каталог, то event не сработает, но на практике не проверял)

код самой функции (закидывай в __custom_adm.php , функции в __custom.php не применяются если изменения касаются админки)
public function onModifyElementCheck(iUmiEventPoint $event) {
$element  = $event->getRef("element");

$element_type_id = $element->getObject()->getTypeId();
$razdel_catalog_type_id=65;

if($element_type_id==$razdel_catalog_type_id){
//code
}
return ;
}

определение event'a (закидывай в custom_events.php)
<?php
$listener = new umiEventListener("systemModifyElement", "content", "onModifyElementCheck");
?>
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 27 Сентября 2011, 08:45:16
Спасибо за оперативный ответ, попробую - отпишусь.
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 27 Сентября 2011, 11:19:03
еще сразу вопрос:
а в файле __custom_adm.php надо ли объявлять класс, например, abstract class __custom_content_events и уже в нем прописывать обработчики событий?
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 27 Сентября 2011, 14:43:34
Вроде разобралась... в модуле Content обработчики событий systemModifyElement и systemModifyObject не срабатывали. Я пыталась в дереве структуры редактировать и обычные страницы, и объекты каталога...
Я эти обработчики перенесла в модуль Каталог, там все ок) при срабатывании event'а - в определенной ленте новостей создается новость, в которую прописывается, что произошли изменения на странице.
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 27 Сентября 2011, 15:31:38
странно что не сработал, но разобраться можно только посмотрев на ваш код)
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 27 Сентября 2011, 16:06:10
здесь вроде тоже решалась похожая задача, но так и не решилась:
http://www.umi-cms.ru/support/forum/razrabotka_sajtov/nuzhna_pomow_po_event/
в модуле Контент события не срабатывали, а приведенный пример из другого модуля - работает отлично, эвенты отлавливаются... хотя код обработчиков практически одинаковый...

P.S.: если здесь нельзя оставлять ссылки на сторонние ресурсы, то прошу удалить эту ссылку....
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 27 Сентября 2011, 20:15:12
это понятно, странность в том, что приведенный мною пример, реально работающий кусок кода
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 28 Сентября 2011, 12:53:12
Для объектов Каталога реализовала обработчики всех нужных событий, теперь приступила к событиям Блога.
Событие systemModifyElement не перехватывается.

и заметила такую странность:
в файле /classes/modules/catalog/class.php в конструкторе прописано подключение файлов с кастомными обработчиками событий  в виде строк:
       $this->__loadLib("__custom_adm.php");
       $this->__implement("__custom_adm_catalog");

а вот в файле: /classes/modules/blogs20/class.php  в конструкторе отсутствует подключение файлов с кастомными обработчиками событий.
Вопрос такой: если я их туда пропишу сама, при обновлении системы этот файл перетрется новым. Как правильнее добавить в этот файл кастомные обработчики?

P.S. к сожалению, пока не знаю в какие теги заключить вставки программного кода....
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 28 Сентября 2011, 14:21:51
Цитировать
Вопрос такой: если я их туда пропишу сама, при обновлении системы этот файл перетрется новым. Как правильнее добавить в этот файл кастомные обработчики?

все правильно заметили в блоге нет подключения кастомного файла lzk методов административного интерфейса, либо подключаете свой файл в class.php на примере того как это делается в модуле catalog, либо пишете в подключаемом admin.php в любом случае записи с системных файлах (class.php или admin.php) при обновлении будут пере затираться, отпишите с этим вопросом в СЗ они подскажут, a вернее возьмут себе на заметку
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 28 Сентября 2011, 16:08:38
В СЗ отписалась.
Для модуля Контент события тоже начали отлавливаться ) я неправильно сначала класс объявила. Сам файл __custom_adm.php и его содержимое я создавала сама и не посмотрела как должен называться класс внутри него )
admin'у большое спасибо за подсказки !
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 28 Сентября 2011, 16:12:28
приходите на курс "Продвинутый tpl" будет где-то в начале 10 чисел октября, там будет интересно)
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 28 Сентября 2011, 16:38:23
спасибо, но я не из Питера. Понравился этот форум, здесь действительно помогают, причем оперативно, до этого пару раз пыталась вопросы о разработке нестандартного кастомного функционала отправить в CЗ, оттуда приходит стандартный ответ, что это делается средствами API. и никаких подсказок, в каком направлении копать...
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 28 Сентября 2011, 16:58:46
я все переделала. убрала все обработчики из модулей и оставила только на модуль Контент. он перехватывает и обрабатывает все нужные мне события )
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: admin от 28 Сентября 2011, 16:59:32
перед ними немного другие задачи, решать неотложные вопросы, а их накапливается очень много, поэтому они и советуют смотреть в api.umi-cms.ru там действительно многое рассписано, хотя по началу конечно не знаешь где и что искать, но для этого и был создан этот форум)


Цитировать
я все переделала. убрала все обработчики из модулей и оставила только на модуль Контент. он перехватывает и обрабатывает все нужные мне события )
Значит все вопросы решены?
Название: Re:Сбор информации об обновлении страниц сайта
Отправлено: AllaVK от 28 Сентября 2011, 17:02:34
Значит все вопросы решены?

да, большое спасибо ) задача решена )
P.S.: у меня есть еще несколько вопросов по разработке, но буду задавать их уже в отдельной теме )