Алфавитный рубрикатор для ресурсов 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
2 991
+5

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

Василий Столейков
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 'А'
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
14