Вывод новостей начинающиеся с букв/цифр и т.п

Пример:
site.ru/catalog/А
site.ru/catalog/Б
site.ru/catalog/В

Создаём на сайте страницу /catalog/ в которой может быть вызов контента или что-то подобное — сюда мы будем отправлять юзера.

[[!pdoPage:default=`Новостей на указанную букву не найдено!`?
	&element=`pdoResources`
	&parents=`2`
	&useWeblinkUrl=`1`
	&where=`{"pagetitle:LIKE": "[[!+catalog_name]]%"}`
	&tpl=`@INLINE <p>[[+idx]]. <a href="[[+link]]">[[+pagetitle]]</a></p>`
	&tplPageWrapper=`@INLINE <ul class="pagination">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul>`
]]
[[!+page.nav]]

Создаём плагин и отмечает во вкладке "Системные события" — OnPageNotFound

<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}

$request = $_REQUEST[$alias];
$tmp = explode('/', $request);

// Ссылка подходит под заданный формат: catalog/{буква/цифра}
if ($tmp[0] == 'catalog' && count($tmp) >= 2) {
    // Определяем id раздела /brands/.
    // Конечно, можно его и руками прописать - но так гибче
    if (!$section = $modx->findResource($tmp[0] . '/')) {
        // Если вдруг раздел куда-то делся - выходим.
        return false;
    }
    // Теперь очищаем имя бренда от возможного расширения
    $name = str_replace('.html', '', $tmp[1]);
    // Если очищенное имя не равно запрошенному - то можно отредиректить юзера
    // Также возможен вариант с косой на конце имени бренда - его тоже учитываем
    // SEOшники должны оценить =)
    if ($tmp[1] != $name || (isset($tmp[2]) && $tmp[2] == '')) {
        $modx->sendRedirect($tmp[0] . '/' . $name);
    }

    $modx->toPlaceholder('catalog_name',$name);
    $modx->sendForward($section);
}
// Иначе ничего не делаем и юзер получает 404 или его перехватывает другой плагин.


Более подробный пример тут

PS: перед тем как опубликовать в готовых решениях выложу тут, мб поправить надо что нить
Spam
19 февраля 2015, 11:27
modx.pro
10
2 213
+4

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

Сергей Шлоков
19 февраля 2015, 20:18
+2
У тебя получается, что если нет новости на указанную букву, то пользователь получит страницу 404. Мне кажется это не правильно. Т.е. последнее условие не нужно.
А pdoPage вызывать с фильтром
[[!pdoPage:default=`Новостей на указанную букву не найдено!`?
...
]]
    yani
    20 февраля 2015, 08:30
    0
    Интересно, нравится именно такой УРЛ, я недавно реализовывала поиск по первой букве ТЕГА. но через ?tag=A
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2