По поводу ajaxa — делаю нечто похожее тут, можно запускать где-то внизу страницы сниппет с условием:
<?php
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
return;
}
if ($_POST['action'] == "название экшна в аяксе") {
//ваши вызовы и операции
}
if (!empty($result)) {
die(json_encode($result));
}
— и отправлять аякс-запрос на ту же страницу, где вы и находитесь. После чего скриптами вставлять результат в нужное место.
Подробнее — тут (основы).
Подводя итоги: если вы хотите при помощи своего сниппета реализовать выборку и вывести все через pdoTools, то вам нужно получить список ресурсов своим сниппетом и внутри него запустить pdoTools с параметром &resources. Как-то вот так:
$limit = число;
$offset = число
$query = $modx->newQuery('modResource');
$query->where(array(список_условий_для_выборки_вашего_сниппета));
$query->select(array('modResource.id'));
$query->limit($limit, $offset);
if ($query->prepare() && $query->stmt->execute()) {
//тут получаем и формируем циклом массив в строку $resources, перечисляющую id ресурсов выборки
}
$pdoOptions = array();
$pdoOptions['limit'] = значение_лимита_для_пдо;
$pdoOptions['offcet'] = значение_оффсета_для_пдо; //в теории, эти строки не слишком нужны, т.к. уже можно ограничить до нужного размера результат при получении из бд
$pdoOptions['resources'] = $resources;
return $modx->runSnippet('pdoPage', $pdoOptions);
У вас, наверняка, или внутри тега head или перед закрывающим тегом body есть строчки в духе:
— в том месте, где написано «здесь может быть еще код», сразу после }); пишите:
— ну и "$('#container').masonry();" нужно заменить на ваш вызов masonry, само собой.
(менюиндекс ресурсов можно скриптом проставить в соответствии с порядком в списке)
По поводу ajaxa — делаю нечто похожее тут, можно запускать где-то внизу страницы сниппет с условием:
— и отправлять аякс-запрос на ту же страницу, где вы и находитесь. После чего скриптами вставлять результат в нужное место.
Подробнее — тут (основы).
Что же до велосипеда… Ну, в целом — да, ваша правда.
Но в рамках pdoResources (при всех его преимуществах с позиции скорости и удобовводимости данных): на мой взгляд, говорить, что кто-то уже придумал запросы к базе данных и, поэтому, любые собственные запросы к бд — велосипед, это — перебор..)
limit для pdoPage = кол-во результатов на страницу.
limit для сниппета = ограничение кол-во результатов, которые нужно разбить на страницы. (Пример: ТОП-100 популярных ресурсов, выводимых по 10 на страницу.)
Что же до element — через api, думаю, выйдет быстрее, да и не придется городить массу переменных непосредственно в вызове pdoPage.
— и, соответственно, если в вызове будут присутвовать свойства &a=`5` &b=`10` — они будут перекрывать их.
Что же конкретно до сниппетов pdoTools — у них есть как параметр &limit, так и параметр &offset.
Подводя итоги: если вы хотите при помощи своего сниппета реализовать выборку и вывести все через pdoTools, то вам нужно получить список ресурсов своим сниппетом и внутри него запустить pdoTools с параметром &resources. Как-то вот так:
Вообще, в этом примере я предлагал подставить его в уже существующий сниппет, формирующий урл.
Если использовать как отдельный — то можно вызывать его в шаблоне со страницей формы где-нибудь в самом низу, и обернуть все в условие:
Ну и редирект и die тоже обернуть в условие, что кол-во get-переменных не нулевое.
— и без .submit-условия. Но это плохое решение
К слову, конкретно на данном сайте подключен визуальный редактор markItUp, идущий в комплекте к дополнению tickets
Пример: подключить ckeditor
— но тогда он возвращает пустой результат при любом ответе, кроме тех случаев, когда id=текущему.
Необходимо, преимущественно, для реализации своих аякс-страниц, возвращающих новый заголовок.
Я так понимаю, что 1 товар может иметь несколько подходящих марок машин с нескольими подходящими подрубриками для них => мультикатегории мультикатегорий..)
А дальше, когда значение уже передастся в класс-обработчик — выставить простое if/else-условие там, где определяются чанки.