Как генерировать ALIAS из MENUTITLE вместо PAGETITLE?
Друзья, подскажите пожалуйста, есть ли решение, настройка в MODX REVO, что бы alias создавался из menutitle, а если поле пустое то из pagetitle. Как это сделать? Дело в том что pagetitle всегда огромные, пишутся для SEO, и содержание такое сложное, когда translit отработает, то получается немного не то название простое по смыслу которое хотелось бы, а вот в menutitle всегда пишу короткое и простое название для меню. Хотелось бы из него брать заголовок для aliasa, а если пусто, то как обычно из pagetitle. Есть решения?
Есть плагин у меня на событие OnDocFormSave
Но он не работает почему то :( а должен.
Есть плагин у меня на событие OnDocFormSave
if ($modx->event->name == 'OnDocFormSave') {
if($menutitle != ''){
$resource->set('alias',$menutitle);
}else{
$resource->set('alias',$pagetitle);
}
$resource->save();
}
Но он не работает почему то :( а должен.
Комментарии: 13
Потому что при сохранении документа плагин получает объект сохраненного документа. Поэтому ваш код будет выглядеть следующим образом:
if ($modx->event->name == 'OnDocFormSave') {
if (!empty($resource->get('menutitle'))) {
$resource->set('alias',$resource->get('menutitle'));
}
else {
$resource->set('alias',$resource->get('pagetitle'));
}
$resource->save();
}
БЛАГОДАРЮ!
А не подскажете, как еще добавить проверку, если alias уже вписан руками, его не менять?
А то если по умолчанию вписываю alias при создании ресурса, он его затирает при сохранении и пишет из menutitle если не пустое, иначе из pagetitle, тут порядок.
Если делаю дополнительную проверку, то все равно не работает
А то если по умолчанию вписываю alias при создании ресурса, он его затирает при сохранении и пишет из menutitle если не пустое, иначе из pagetitle, тут порядок.
Если делаю дополнительную проверку, то все равно не работает
if ($modx->event->name == 'OnDocFormSave') {
if(!empty($resource->get('alias'))){
if (!empty($resource->get('menutitle'))) {
$resource->set('alias',$resource->get('menutitle'));
}
else {
$resource->set('alias',$resource->get('pagetitle'));
}
}
$resource->save();
}
if ($modx->event->name == 'OnDocFormSave') {
if (empty($resource->get('alias'))) {
if (!empty($resource->get('menutitle'))) {
$resource->set('alias',$resource->get('menutitle'));
}
else {
$resource->set('alias',$resource->get('pagetitle'));
}
$resource->save();
}
}
Благодарю! Ошибся, !empty написал, работает. А можно в плагине получить id шаблона ресурса который сохраняем? Просто хочу все это с alias делать только для страниц с определенным шаблоном.
Объект
$resource
хранит в себе все данные о странице, в том числе и шаблон.$resource->get('template')
Почему то не работает проверка empty($resource->get('alias') и когда ресурс только создается и обновляется, не проходит почему то. С этой проверкой плагин перестает работать, берет alias из pagetitle и все.
if ($modx->event->name == 'OnDocFormSave') {
if (empty($resource->get('alias'))) {
if (!empty($resource->get('menutitle'))) {
$resource->set('alias',$resource->get('menutitle'));
}
else {
$resource->set('alias',$resource->get('pagetitle'));
}
$resource->save();
}
}
Видимо в момент создания документа он и так пустой. Проверьте поля объекта через отладку.
$modx->log(MODX_LOG_LEVEL_DEBUG, print_r($resource->toArray()));
В журнал ошибок выведет объект $resource
Такой результат, но это обновление ресурса, и все равно, видно что menutitle один, а берет pagetitle почему то. Алиас затер и сохранил ресурс. Такой результат.
[2020-02-05 14:55:57] (ERROR @ /home/bmlandin/public_html/ladygincms/core/model/modx/modx.class.php : 1671) [OnDocFormSave]Array
(
[id] => 135
[type] => document
[contentType] => text/html
[pagetitle] => Тумба для ТВ аппаратуры1
[longtitle] =>
[description] =>
[alias] => tumba-dlya-tv-apparaturyi1
[alias_visible] => 1
[link_attributes] =>
[published] => 1
[pub_date] => 0
[unpub_date] => 0
[parent] => 12
[isfolder] =>
[introtext] =>
[content] =>
[richtext] => 1
[template] => 3
[menuindex] => 4
[searchable] => 1
[cacheable] => 1
[createdby] => 1
[createdon] => 2020-02-05 13:02:41
[editedby] => 1
[editedon] => 2020-02-05 14:55:57
[deleted] =>
[deletedon] => 0
[deletedby] => 0
[publishedon] => 2020-02-05 13:02:00
[publishedby] => 1
[menutitle] => Тумба44
[donthit] =>
[privateweb] =>
[privatemgr] =>
[content_dispo] => 0
[hidemenu] =>
[class_key] => msProduct
[context_key] => web
[content_type] => 1
[uri] => catalog/tumby/tumbyi-dlya-texniki/tumba-dlya-tv-apparaturyi1
[uri_override] => 0
[hide_children_in_tree] => 0
[show_in_tree] => 1
[properties] =>
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 2
[create-resource-token] => 5e3ad5aec6e295.86174906
[reloaded] => 1
[parent-original] => 12
[ta] =>
[parent-cmp] => 12
[syncsite] => 1
[categories] => Array
(
)
[query] => Поиск
[ext-comp-1068] => 50
[tvs] => 1
[tv34] =>
[tv49] => не выбрано
[tv46] => <span>рекомендуем</span> посмотреть
[tv44] => Array
(
[0] =>
)
[tv45] => Нет
[tv48] => Вы смотрели
[tv47] => Да
[action] => resource/update
[resource_groups] => []
[options] => Array
(
)
[vendor.id] =>
[vendor.name] =>
[vendor.resource] => 0
[vendor.country] =>
[vendor.logo] =>
[vendor.address] =>
[vendor.phone] =>
[vendor.fax] =>
[vendor.email] =>
[vendor.description] =>
[vendor.properties] =>
)
Так выглядит сейчас плагин<?php
if ($modx->event->name == 'OnDocFormSave') {
if (empty($resource->get('alias'))) {
if (!empty($resource->get('menutitle'))) {
$resource->set('alias',$resource->get('menutitle'));
}
else {
$resource->set('alias',$resource->get('pagetitle'));
}
}
$resource->save();
}
$modx->log(MODX_LOG_LEVEL_DEBUG, print_r($resource->toArray()));
$resource->save(); вынес из IF про alias
Вы можете и сами посмотреть в логах, что при сохранении документа, даже с пустым alias, modx подставляет pagetitle в alias и передает объект плагину на событие уже с заполненным alias. То есть проверить alias на пустоту нельзя. Даже если посмотреть объект на событие OnBeforeDocFormSave, то там alias тоже уже сгенерирован.
То есть можно забыть про эту идею через плагин? Алиас всегда будет перезаписан pagetitle.
Спасибо, понятно, очинка выделки не стоит.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.