[solved] Почему могут не обрабатываться события?
UPD: всем спасибо, вопрос решен. Почему-то если повесить плагин на несколько событий, он не работал.
Всем превед, я тут недавно. Совсем недавно :)
Переношу старый конторский сайт на Revo. Ресурс «Новости», тип «Collection».
ЧПУ включен, отключить нельзя. Половина новостей имеют заголовок типа «Рекомендуем» и «Поздравляем», из-за чего при создании очередной новости с заголовком «Рекомендуем» видим ошибку «Ресурс с идентификатором… уже использует URI… Пожалуйста, введите уникальный псевдоним ...»
ЧПУ и заголовки новостей меняться не будут «потому что я так сказала»,© значит проблему нужно решать программно.
Нет ничего проще! Можно влезть в кишки, найти кто генерит эту ошибку и заставить движок самостоятельно дополнять алиас каким-нть ну почти случайным текстом, например id создаваемого ресурса. Но при обновлении MODX все это превратится в тыкву.
Был когда-то второй способ: плагин customURLs. Но он не работает в Revo 2.5 — вместо страницы редактировния фильтров пустота. Официально в его доке так и сказано: «до 2.3» (кто-то писал, что в некоторых 2.4 он тоже работает).
Ок, есть и третий способ. Написать плагин, повесить его на OnResourceDuplicate или OnDocFormSave и далее то же самое.
Но тут возникает одно «но» :)
Что бы я ни делал, я не могу отловить ни одно из этих событий. Прилетает описанная ошибка, и все останавливается. Такое впечатление, что до плагина даже не доходит.

Ничего не эхается, скрипт не останавливается. Даже если убрать условие, ничего не меняется.
В чем может быть причина?
Спасибы, пиво и все такое.
Всем превед, я тут недавно. Совсем недавно :)
Переношу старый конторский сайт на Revo. Ресурс «Новости», тип «Collection».
ЧПУ включен, отключить нельзя. Половина новостей имеют заголовок типа «Рекомендуем» и «Поздравляем», из-за чего при создании очередной новости с заголовком «Рекомендуем» видим ошибку «Ресурс с идентификатором… уже использует URI… Пожалуйста, введите уникальный псевдоним ...»
ЧПУ и заголовки новостей меняться не будут «потому что я так сказала»,© значит проблему нужно решать программно.
Нет ничего проще! Можно влезть в кишки, найти кто генерит эту ошибку и заставить движок самостоятельно дополнять алиас каким-нть ну почти случайным текстом, например id создаваемого ресурса. Но при обновлении MODX все это превратится в тыкву.
Был когда-то второй способ: плагин customURLs. Но он не работает в Revo 2.5 — вместо страницы редактировния фильтров пустота. Официально в его доке так и сказано: «до 2.3» (кто-то писал, что в некоторых 2.4 он тоже работает).
Ок, есть и третий способ. Написать плагин, повесить его на OnResourceDuplicate или OnDocFormSave и далее то же самое.
Но тут возникает одно «но» :)
Что бы я ни делал, я не могу отловить ни одно из этих событий. Прилетает описанная ошибка, и все останавливается. Такое впечатление, что до плагина даже не доходит.
if ($modx->event->name == 'OnDocFormSave')
{
echo 'jopa';
die;
} Ничего не эхается, скрипт не останавливается. Даже если убрать условие, ничего не меняется.
В чем может быть причина?
Спасибы, пиво и все такое.
Комментарии: 19
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А в плагине используйте не echo, а пишите в лог:
Про лог спасибо, но это несколько неудбно. Впрочем если вместо эха поставить вашу строку, в логу будет пусто…
И если есть еще какие-то плагины на OnDocFormSave, поиграйтесь с приоритетом.
На OnResourceDuplicate висит только мой экспериментальный плагин, с которым работаю, приоритет 0.
На OnDocFormSave:
— adminTools
— мой плагин
— modDevTools
, у всех приоритет 0. Поставил остальным 1 и 2, протестил, не изменилось ничего :(
Почистил кэш, открыл новую вкладку — увы. Эха нет, в логе пусто.
Какой-то поллитргейст…
П.С. Событие OnDocFormSave срабатывает после сохранения ресурса, а ошибка возникает при сохранении.
Экспериментальный плагин висит еще на событии OnResourceDuplicate. Я так понимаю, оно же вызывает ошибку «Ресурс с идентификатором… уже использует URI…»?
П.С. мерси, это интересно, последовательности событий я пока не знаю :(
OnBeforeDocFormSave
OnResourceDuplicate
наступают ПОСЛЕ генерации ошибки «Ресурс с идентификатором… уже использует URI…".
То есть при возникновении этой ошибки до событий дело не доходит… :(
Получается что отловить момент генерации ошибки и исправить алиас невозможно?
Revo 2.5.7
if ( $resource->get('parent') == 9 && $mode == 'new') на OnBeforeDocFormSave.
Полчаса назад сделал точно как вы описали здесь, только еще добавил и время создания. Мало ли редактору захочется написать > 1 новости сегодня…
Повесился только на один OnBeforeDocFormSave, это было ключевым моментом, спасибо за подсказку. Если повеситься на несколько событий — не происходило ничего.