Обновлено: 05 июня 2015, 18:35
 Marabar

ID документа для алиаса

В последнее время стало «модным» использовать в алиасе документа его ID и отказаться от расширений, типа: .html, .php и т.д. Вместо, допустим, такой ссылки:

mysite.ru/section/parent/myresource-alias.html,

получить такую ссылку:

mysite.ru/section/parent/12345.

В этом небольшом топике речь пойдёт именно об этом, ну и конечно реализация.

Для указания, в качестве алиаса, ID документа в MODX revolution напишем плагин на событие OnDocFormSave.
<?php
switch ($modx->event->name) {
    case 'OnDocFormSave';
    // Для новых ресурсов
    if ($mode == 'new') {
        $resource->set('alias',$id);
        $resource->save();
    }
    
    // Для ресурсов, использующих определённый шаблон
    // в этом примере шаблон с id == 5
    /*if ($resource->get('template') == 5) {
        $resource->set('alias',$id);
        $resource->save();
    }*/

    // Для ресурсов не являющихся контейнерами (isfolder == 0)
    /*if ($resource->get('isfolder') == 0) {
        $resource->set('alias',$id);
        $resource->save();
    }*/
    
    break;
}
Осталось выбрать какой вариант подойдёт, и не нужные блоки удалить или закомментировать (как в примере).

Теперь избавимся от расширения. Для этого нужно создать новый тип содержимого без указания расширения файла.


В настройках системы указываем следующее:
friendly_urls — Да
default_content_type — Выбрать созданный тип содержимого.

Вот собственно и всё. Таким макаром можно и текущую дату использовать.
   Marabar Готовые решения 0    1 0

Комментарии ()

  1. Владислав Краля 09 апреля 2015, 17:12 # 0
    Здравствуйте, очень полезная статья, хотел спросить, а можно ли сделать так, чтобы id создавался только для определенной категории/ресурса а не для всех созданных ресурсов?
    1. Marabar 09 апреля 2015, 22:06 # 0
      Сделайте через шаблон и используйте второй конструкцию кода.
      1. Владислав Краля 10 апреля 2015, 12:00 # 0
        А как использовать вместо ID дату создания? (createdon) искал переменные modx revo по типу ID но не нашел. Бубу благодарен за ответ!
        1. Marabar 10 апреля 2015, 19:25 # 0
          Воспользуйся функцией data() вместо id, и будет тебе дата создания.
          if ($mode == 'new') {
              $resource->set('alias', date('d-m-Y');
              $resource->save();
          }
          
          1. Владислав Краля 10 апреля 2015, 23:19 # 0
            Спасибо!
            1. Marabar 10 апреля 2015, 23:32 # 0
              Ну и ID, всё-таки, нужно оставить. Иначе больше двух публикаций в день — будут дубли алиаса.



    Вы должны авторизоваться , чтобы оставлять комментарии.

    Marabar 21 сентября 2018, 00:32
    Login в MODX revolution 25
    Marabar 17 мая 2018, 12:22
    Выводим облако тегов в MODX revo 17
    medortex 14 июля 2017, 16:26
    Меню Аккордеон в MODX revo 54
    Madao 16 мая 2017, 18:28
    msMiniCartDynamic 3
    Семён 05 мая 2017, 23:30
    Создание ресурсов из фронтенда 41
    Филитович Владимир 26 февраля 2017, 22:25
    Apache 2.2.22, установка и настройка 41
    valery 30 ноября 2016, 15:51
    phpMyAdmin 3.5.1, установка и настройка 3