Алфавитный рубрикатор для ресурсов Modx Revo.
Результат работы тут: lab.nikann.ru/catalog#abc
За основу был взят: modx.ws/urok-modx-ajax-zagruzka-resursov
1. Создать чанк «ajaxGetResorces_abc-letter»:
3. Создать в корне сайта ресурс с пcевдонимом ajax-abc, который будет отдавать данные, чтобы полный адрес был sitename.com/ajax-abc. Задать ему шаблон Blank и вставить в содержимое вызов сниппета:
Если ничего не забыл :) должно работать.
За основу был взят: 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]]
Если ничего не забыл :) должно работать.
Комментарии: 15
Супер! Спасибо!
Жалко, что не генерируются ЧПУ ссылки, чтобы сразу перейти в какую-то открытую букву.
Жалко, что не генерируются ЧПУ ссылки, чтобы сразу перейти в какую-то открытую букву.
Вот рецепт от Василия. По образцу сделать совсем не сложно.
я что то пытался, но нефига не получается по рецепту Василия
Ну у меня такой задачи не было.
Можно попробовать «обернуть» в какой нибудь jQuery EasyTabs plugin и будут якоря+хистори…
Ну это теоретически…
Можно попробовать «обернуть» в какой нибудь jQuery EasyTabs plugin и будут якоря+хистори…
Ну это теоретически…
Подскажите, пожалуйста, ID родителя это id ресурса /ajax-abc?
И правильно ли я понимаю, нам еще необходимо создать чанк tpl.ajaxResources_abc с шаблоном? Например,[[+pagetitle]] [[+longtitle]].
И правильно ли я понимаю, нам еще необходимо создать чанк tpl.ajaxResources_abc с шаблоном? Например,[[+pagetitle]] [[+longtitle]].
Подскажите, пожалуйста, ID родителя это id ресурса /ajax-abc?Нет конечно. У этого ресурса /ajax-abc нет потомков. Нужно указать того или тех родителей, потомки которых будут участвовать в поиске.
И правильно ли я понимаю, нам еще необходимо создать чанк tpl.ajaxResources_abc с шаблоном? Например,[[+pagetitle]] [[+longtitle]].Абсолютли.
Сергей, спасибо. Скажите, а если ресурсы не имеют родителя (все расположены в корне), что необходимо указать в «ID родителя»?
Не советую так делать. Лучше создавать контейнеры. Сотни, а то и тысячи ресурсов в корне — это крайне не рационально.
Согласна, но для моего текущего проекта это необходимое решение.
Так подскажите, что необходимо в данной ситуации указывать в «ID родителя»?)
Так подскажите, что необходимо в данной ситуации указывать в «ID родителя»?)
Надо указать 0
Спасибо, попробую)
Здравствуйте! Очень интересно, спасибо! Подскажите, а с pdoResourсes работает?
С PHP 7.1 не работает. Белый экран и в журнале 58) PHP warning: Illegal string offset 'А'
Не работает, делал по инструкции, при нажатии на буквы кидает на главную (т.е скрипт не пашет)
на обще странице словарика шаблон выдает левый прописывай не прописывай
на обще странице словарика шаблон выдает левый прописывай не прописывай
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.