Алфавитный рубрикатор для ресурсов Modx Revo.

Результат работы тут: lab.nikann.ru/catalog#abc
За основу был взят: modx.ws/urok-modx-ajax-zagruzka-resursov

1. Создать чанк «ajaxGetResorces_abc-letter»:
<!-- Скрипт запроса и обработки -->
<script type="text/javascript">
$(document).ready(function() {
  $('a.ltr').click(function() {
    var data = $(this).data();
    $.post('./ajax-abc', data, function(data) {
      $('#result').html(data);
      $('a.ltr').data();
    })
     return false;
  })
})
</script>
<!-- Рубрикатор -->
			<div class="cont-abc-letter" >
				<a href="#" class="ltr"  data-ltr="а" >А</a>
				<a href="#" class="ltr"  data-ltr="б" >Б</a>
				<a href="#" class="ltr"  data-ltr="в" >В</a>
				<a href="#" class="ltr"  data-ltr="г" >Г</a>
				<a href="#" class="ltr"  data-ltr="д" >Д</a>
				<a href="#" class="ltr"  data-ltr="е" >Е</a>
				<a href="#" class="ltr"  data-ltr="ж" >Ж</a>
				<a href="#" class="ltr"  data-ltr="з" >З</a>
				<a href="#" class="ltr"  data-ltr="и" >И</a>
				<a href="#" class="ltr"  data-ltr="к" >К</a>
				<a href="#" class="ltr"  data-ltr="л" >Л</a>
				<a href="#" class="ltr"  data-ltr="м" >М</a>
				<a href="#" class="ltr"  data-ltr="н" >Н</a>
				<a href="#" class="ltr"  data-ltr="о" >О</a>
				<a href="#" class="ltr"  data-ltr="п" >П</a>
  				<a href="#" class="ltr"  data-ltr="р" >Р</a>
				<a href="#" class="ltr"  data-ltr="с" >С</a>
				<a href="#" class="ltr"  data-ltr="т" >Т</a>
				<a href="#" class="ltr"  data-ltr="у" >У</a>
				<a href="#" class="ltr"  data-ltr="ф" >Ф</a>
				<a href="#" class="ltr"  data-ltr="х" >Х</a>
				<a href="#" class="ltr"  data-ltr="ц" >Ц</a>
				<a href="#" class="ltr"  data-ltr="ч" >Ч</a>
				<a href="#" class="ltr"  data-ltr="ш" >Ш</a>
				<a href="#" class="ltr"  data-ltr="щ" >Щ</a>
				<a href="#" class="ltr"  data-ltr="э" >Э</a>
				<a href="#" class="ltr"  data-ltr="ю" >Ю</a>
				<a href="#" class="ltr"  data-ltr="я" >Я</a>
			</div>

<!-- Сюда будут выводиться результаты: -->
	<div id="result">Выберите букву, цифры</div>
2. Создать сниппет «ajaxResources_abc»:
<?php
// Отвечаем ТОЛЬКО на ajax запросы
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}

// данный код можно расширить добавив другие действия и указать их в case
$action = 'getResources';

// Если в массиве POST нет действия - выход
if (empty($action)) {return;}

// А если есть - работаем
$res = '';

switch ($action) {
    case 'getResources': 
        // Задаём параметры getResource для сниппета в AJAX запросе
		$params = array();
                $params['tpl'] = 'tpl.ajaxResources_abc';  // Задаём шаблон 
		$ltr = filter_input(INPUT_POST,'ltr');
		$params['where'] = '{"pagetitle:LIKE":"'.$ltr.'%"}'; // Задаём условие 
                $params['parents'] = '481'; // ID родителя
		$params['limit'] = '0'; // Задаём кол-во
		$params['hideContainers'] = '1'; // Прячем контейнеры 
		$params['showHidden'] = '1'; // Показать не опубл. в меню 
		$params['sortby'] = '{"pagetitle":"ASC"}'; // Задаём сортировку 

		$res = $modx->runSnippet('getResources', $params); break;

}
// Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
if (!empty($res)) {
    die($res);
}


3. Создать в корне сайта ресурс с пcевдонимом ajax-abc, который будет отдавать данные, чтобы полный адрес был sitename.com/ajax-abc. Задать ему шаблон Blank и вставить в содержимое вызов сниппета:
[[ajaxResources_abc]]
4. Ну и вставить в нужное место шаблона чанк, созданный в п.1
[[$ajaxGetResorces_abc-letter]]

Если ничего не забыл :) должно работать.
G@G
G@G
18 февраля 2015, 09:40
modx.pro
26
4 329
+5

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

Василий Столейков
18 февраля 2015, 12:46
0
Супер! Спасибо!
Жалко, что не генерируются ЧПУ ссылки, чтобы сразу перейти в какую-то открытую букву.
G@G
G@G
18 февраля 2015, 12:55
0
Ну у меня такой задачи не было.
Можно попробовать «обернуть» в какой нибудь jQuery EasyTabs plugin и будут якоря+хистори…
Ну это теоретически…
    Александра
    19 февраля 2015, 17:59
    0
    Подскажите, пожалуйста, ID родителя это id ресурса /ajax-abc?
    И правильно ли я понимаю, нам еще необходимо создать чанк tpl.ajaxResources_abc с шаблоном? Например,[[+pagetitle]] [[+longtitle]].
      Сергей Шлоков
      19 февраля 2015, 19:29
      +1
      Подскажите, пожалуйста, ID родителя это id ресурса /ajax-abc?
      Нет конечно. У этого ресурса /ajax-abc нет потомков. Нужно указать того или тех родителей, потомки которых будут участвовать в поиске.
      И правильно ли я понимаю, нам еще необходимо создать чанк tpl.ajaxResources_abc с шаблоном? Например,[[+pagetitle]] [[+longtitle]].
      Абсолютли.
        Александра
        19 февраля 2015, 19:45
        0
        Сергей, спасибо. Скажите, а если ресурсы не имеют родителя (все расположены в корне), что необходимо указать в «ID родителя»?
          Сергей Шлоков
          19 февраля 2015, 19:50
          0
          Не советую так делать. Лучше создавать контейнеры. Сотни, а то и тысячи ресурсов в корне — это крайне не рационально.
            Александра
            19 февраля 2015, 20:23
            0
            Согласна, но для моего текущего проекта это необходимое решение.
            Так подскажите, что необходимо в данной ситуации указывать в «ID родителя»?)
    Simha
    31 марта 2016, 11:11
    0
    Здравствуйте! Очень интересно, спасибо! Подскажите, а с pdoResourсes работает?
      Александр
      06 ноября 2017, 14:52
      0
      С PHP 7.1 не работает. Белый экран и в журнале 58) PHP warning: Illegal string offset 'А'
        Евгений
        15 марта 2021, 14:19
        0
        Не работает, делал по инструкции, при нажатии на буквы кидает на главную (т.е скрипт не пашет)
        на обще странице словарика шаблон выдает левый прописывай не прописывай
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          15