Автонумерация алиасов

Этот плагин генерируют алиасов
site.ru/news/1/
site.ru/news/2/

Включите Дружественные URL и Автоматически генирировать псевдоним
Создайте новый плагин событиям OnDocFormSave
<?php
if ($modx->event->name == 'OnDocFormSave') {
	 // Категории
    if (in_array($resource->parent, array(1,2,3,4))) {
        $i = 1;
        $where = array('parent' => $resource->parent, 'alias' => $i, 'id:!=' => $resource->id);
        if ($modx->getCount('modResource', $where) > 0)
        {
            while ($modx->getCount('modResource', $where) > 0)
            {
                $i++;
                $where['alias'] = $i;
            }
        }
        // Устанавливаем алиас
        $resource->set('alias', $i);
        $resource->save();
        // Удаляем из URI суффикс .html
        $uri = preg_replace('@\.html$@', '', $resource->uri);
        // Устанавливаем URI. Пример /catalog/1
        $resource->set('uri', $uri);
        $resource->set('uri_override', 1);
        $resource->save();
    }
}
Автор плагина: Брежнев Иван (vanchelo)
TITAN-UZ
19 августа 2014, 11:31
modx.pro
4
1 556
+2

Комментарии: 8

Иван Брежнев
19 августа 2014, 21:33
0
Да)) Было дело)
    Василий Наумкин
    19 августа 2014, 22:41
    0
    Зачем вручную убирать .html, если это лучше сделать через «типы содержимого»?

    Иначе на сайте будут страницы и с .html и без — это как-то неправильно.
      Иван Брежнев
      19 августа 2014, 22:46
      0
      А я не знаю, человек попросил чтобы у него так были новости, без .html
    Сергей Шлоков
    20 августа 2014, 09:42
    +2
    Мне кажется, если уж предлагать, то что-то универсальное или хотя бы с инструкциями. А этот плагин сделан под конкретный сайт. Это я к чему. Опытный модиксовец сам может такой за 2 минуты сделать, а новичок типа меня просто воткнет и будет голову ломать, чего он то работает, то нет.
    И, кстати, зачем бегать в цикле, если можно одним запросом найти максимальное число.
    Вопрос. А если первую новость из 100 удалят, то новая новость будет с алиасом = 1?
      Иван Брежнев
      23 августа 2014, 18:09
      0
      Судя по коду, да, если удалять новость с алиасом 1, то новая будет с алиасом 1
        Иван Брежнев
        23 августа 2014, 18:11
        0
        Да, вы прав, лучше переделать на получение максимального алиаса))
        Иван Брежнев
        23 августа 2014, 19:01
        +1
        <?php
        if ($modx->event->name == 'OnDocFormSave') {
            if ($resource->parent == 4) {
                $where = array('parent' => 4, 'id:!=' => $resource->id);
                $q = $modx->newQuery('modResource')->select('max(alias) as alias')->where($where);
        
                if (!$q->prepare() or !$q->stmt->execute() or !$r = $q->stmt->fetch(PDO::FETCH_OBJ)) return;
                
                $resource->set('alias', intval($r->alias) + 1);
                $resource->save();
                $uri = preg_replace('@\.html$@', '', $resource->uri);
                $resource->set('uri', $uri);
                $resource->set('uri_override', 1);
                $resource->save();
            }
        }
        Исправил момент указанный Сергеем Шлоковым )) Спасибо тебе
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8