Как добавить дату из TV date к alias страницы?
Приветствую, подскажите пожалуйста, как делать кастомные URL страниц? Например к alias страницы при создании добавлять например id страницы, но только для страниц с определенным шаблоном. Как такое сделать?
Или не iв страницы, а дату из TV date этой страницы. Еще не завезли в настройки MODx такое по умолчанию?
Раньше был снипgет CustomUrls а теперь его нет в базе установщика :( а если установить из архива, Modx пишет он устарел и его код устарел, короче автор его не обновляет.
Или не iв страницы, а дату из TV date этой страницы. Еще не завезли в настройки MODx такое по умолчанию?
Раньше был снипgет CustomUrls а теперь его нет в базе установщика :( а если установить из архива, Modx пишет он устарел и его код устарел, короче автор его не обновляет.
Комментарии: 15
Привет!
rtfm.modx.com/current/ru/extending-modx/plugins/system-events/ondocformsave
Плагин на это событие не подойдёт?
rtfm.modx.com/current/ru/extending-modx/plugins/system-events/ondocformsave
Плагин на это событие не подойдёт?
Да спасибо! Пока сделал с плагином, по номеру шаблона добавляю просто id к alias через дефис, TV с датой пока решил не делать, там массив JSON и нужно только первую запись взять, в общем придется попыхтеть на php а я не так силен в нем.
Через плагин вроде разобрался, но при каждом обновлении добавляет id в конце alias, блин, получается ерунда типа tur-29-29-29 как это пофиксить?
Использую так
Использую так
<?php
if ($modx->event->name == 'OnDocFormSave') {
if ($mode == 'new') {
// resource created
if (!empty($resource->get('alias'))) {
$resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
$resource->save();
}else{
$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
$resource->save();
}
}
else {
// existing resource was updated
if ($resource->get('template') == 2) {
if (!empty($resource->get('alias'))) {
$resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
$resource->save();
}else{
$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
$resource->save();
}
}
}
}
наверное, перед генерацией проверять по вхождению — есть или нет уже этот id И если есть, то не генерить.
Это первое что сделал, но это неверный подход, не работает почему-то, я хочу попробовать получить символы в конце строки до дефиса, и их сравнить с id страницы, если есть такое и сравнивается значит id уже висит на конце и ничего не делаем, сейчас все равно добавляет id при каждом нажатии на кнопу сохранить. Получается такая лажа tur-29-29-29
else {
// existing resource was updated
if ($resource->get('template') == 2) {
if (!empty($resource->get('alias'))) {
if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id')) {
$resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
$resource->save();
}
}
}
}
так не проверяется у вас всегда будет не равно…
Как вариант сравнивайте через функцию php strpos
и ищите это '-'.$resource->get('id')
можно еще посмотреть функции php которые в строке ищут. варианты есть.
if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id'))
у вас же pagetitle русскими, а алиас английскими?Как вариант сравнивайте через функцию php strpos
и ищите это '-'.$resource->get('id')
можно еще посмотреть функции php которые в строке ищут. варианты есть.
Блиииин :)) точно, pagetitle же еще не обработан transalias ом, понял, попробую strpos
Можно ещё так сделать
$title = $resource->get('pagetitle') . '-' . $resource->get('id');
$alias = $resource->cleanAlias($title);
if ($resource->get('alias') != $alias){
// тут остальное
}
Пробовал $resource->cleanAlias($title) пусто почему-то в $resource->cleanAlias($title)
Где-то у тебя ошибка. Я проверил у себя на сайте в плагине на сохранение всё работает.
Да тоже все работает, просто если прям подставить
$resource->set('alias',$resource->cleanAlias($title));
$resource->save();
то записывается пустота
тут один вариант, смотреть на конце строки ID и уже от этого плясать, пробую strpos
Я просто вариант предложил, а ты делай как больше нравится)))
Благодарю! Спасибо что откликаетесь.
В итоге сделал так, вроде работает :), может кому зайдет еще.
Для проверки ID на конце alias воспользовfлся explode и end
Для проверки ID на конце alias воспользовfлся explode и end
<?php
if ($modx->event->name == 'OnDocFormSave') {
if ($mode == 'new') {
// resource created
if ($resource->get('template') == 2) {
if (!empty($resource->get('alias'))) {
$resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
$resource->save();
}else{
$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
$resource->save();
}
}
}
else {
// existing resource was updated
if ($resource->get('template') == 2) {
if (!empty($resource->get('alias'))) {
$array = explode('-', $resource->get('alias'));
$altid = end($array);
if ($altid != $resource->get('id')) {
$resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
$resource->save();
}
}else{
//$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
//$resource->save();
}
}
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.