Id вместо alias в URL
Добрый день!
В MODx Evo, если не указывать псевдоним ресурса, то в дружественных URL используется его id.
Как тоже самое сделать для MODx Revo?
В MODx Evo, если не указывать псевдоним ресурса, то в дружественных URL используется его id.
Как тоже самое сделать для MODx Revo?
Комментарии: 10
Например, ссылка на данную страницу выглядит вот так https://modx.pro/help/13302/
Т.е. ID вместо Alias!
Как так же сделать?
Через плагин не работает, т.к. до события и до плагина не доходит дело, вылезает сразу сообщение о том, что не заполнено обязательное поле «псевдоним».
Т.е. ID вместо Alias!
Как так же сделать?
Через плагин не работает, т.к. до события и до плагина не доходит дело, вылезает сразу сообщение о том, что не заполнено обязательное поле «псевдоним».
Интересно, заминусовал спам-робот какой-то? Если минусуете, объясните причину.
т.е. по факту вы хотите чтобы в поле «псевдоним» автоматом подставлялся id создаваемого документа?
Мне нужно именно когда пустое поле «псевдоним», то вместо него использовалось бы id в дружественных URL.
А как оно будет реализовано не так важно.
Можно чтоб подставлялось id вместо «псевдоним», можно чтоб как-то при генерации URL проверка делалась.
В Evo так было устроено в самом ядре.
А как оно будет реализовано не так важно.
Можно чтоб подставлялось id вместо «псевдоним», можно чтоб как-то при генерации URL проверка делалась.
В Evo так было устроено в самом ядре.
Да, перед проверкой псевдонима никакое событие не вызывается. Здесь используется дополнение Tickets — тикеты это расширенные ресурсы с дополнительным функционалом, в том числе, со своим механизмом генерации URL.
Можно как костыль использовать такое решение:
1. Включаем автоматическую генерацию псевдонима
2. В плагине проверяем — если псевдоним ресурса такой же, как его сгенерировал бы MODX, заменяем псевдоним:
Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном.
Можно как костыль использовать такое решение:
1. Включаем автоматическую генерацию псевдонима
2. В плагине проверяем — если псевдоним ресурса такой же, как его сгенерировал бы MODX, заменяем псевдоним:
<?php
switch ($modx->event->name) {
case 'OnDocFormSave':
$generated = $resource->cleanAlias($resource->pagetitle);
if ($resource->alias == $generated) {
$resource->set('alias', $resource->id);
}
$resource->save();
break;
default:
break;
}
Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном.
Спасибо, помогло!
Да, может не идеально, но хоть что-то!
Да, может не идеально, но хоть что-то!
Мне кажется есть еще вариант повесить плагин на OnBeforeDocFormSave, при выключенной «живой» генерации псевдонима в этот момент поле алиас должно быть пустым, и в этот момент выполнять проверку — при пустом алиасе вставить псевдоним.
Но тут могут быть нестыковки, писал навскидку.
Но тут могут быть нестыковки, писал навскидку.
Не, я проверил — валидация прерывает процесс сохранения до события OnBeforeDocFormSave
А modx.com/extras/package/customurls не помогает? Там есть возможность перезаписать алиас по шаблону. Делал много раз им то что вы пишете, нормально работает (для обычных ресурсов)
Не помогает. Кучу правил прописывать придется вручную для разных шаблонов, типов страниц и т.п.
Не удобно, хочется автоматизации.
Не удобно, хочется автоматизации.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.