Подскажите, как вывести свой сниппет через pdoPage
        Все здравствуйте!
Уважаемые знатоки, подскажите, как правильно вывести результаты своего сниппета через пагинацию pdoPage?
Мой сниппет собирает комментарии к страницам товаров и выводит все в одном месте (нужна особая выборка, по этому решился на свой скрипт).
Код:
Благодарен буду любой подсказке.
    
    
                                                                                
            Уважаемые знатоки, подскажите, как правильно вывести результаты своего сниппета через пагинацию pdoPage?
Мой сниппет собирает комментарии к страницам товаров и выводит все в одном месте (нужна особая выборка, по этому решился на свой скрипт).
Код:
<?php
// проверяем входные в сниппет параметры
if (empty($lmt)) {$lmt = '1000';}
if (empty($chunk)) {$chunk= 'tpl.Review';}
// установил фиксированное значение на время разработки
// попытка прикрутить pdoPage
$total = 800;
$totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar,$total);
$limit=$modx->getOption('limit', $scriptProperties, 10);
$offset=$modx->getOption('offset', $scriptProperties, 0);
// готовим запрос к базе данных
$query=$modx->newQuery('TicketComment');
$query->select(array(
    '`TicketComment`.`id`, `TicketComment`.`text`, `TicketComment`.`name`, `TicketComment`.`createdon`, `TicketComment`.`properties`, `Therd` . `resource`'
    ));
$query->leftJoin('modUser','User','User.id = TicketComment.createdby');
$query->leftJoin('modUserProfile','Profile', 'Profile.internalkey = TicketComment.createdby');
$query->leftJoin('TicketThread','Therd', 'Therd.id = TicketComment.thread');
$query->where(array('TicketComment.deleted' => 0, 'TicketComment.parent' => 0));
$query->groupby('TicketComment.id');
$query->sortby('TicketComment.createdon','DESC');
$query->limit($limit, $offset);
$query->prepare();
//echo $query->toSQL();
if ($query->prepare() && $query->stmt->execute()) {
    // Зачитываем в ассоциативный массив
    $reviews = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
}
// переменная для вывода резальтатов сниппета
$output = '';
// перебираем результат и собираем вывод
foreach ($reviews as $review) {
    $reviewID = $review['id'];
    $reviewText =  $review['text'];
    $properties =  $modx->fromJSON($review['properties']);
    $reviewImg =   $properties['image'];
    $reviewImgOrg =   $properties['image_orig'];
    $reviewUserName =   $review['name'];
    $reviewCreatedAt =    $review['createdon'];
    $reviewResourceURI = $modx->makeUrl($review['resource'], 'web', '', 'full');
    $reviewURI = $reviewResourceURI . '#comment-' . $review['id'];
    
    
   $output .= $modx->getChunk($chunk, array(
        'id' => $reviewID,
        'text' => $reviewText,
        'img' => $reviewImg,
        'img_orign' => $reviewImgOrg,
        'username' => $reviewUserName,
        'createdat' => $reviewCreatedAt,
        'parent' => $reviewResourceURI,
        'url' => $reviewURI,
    
    ));
}
return $output;В итоге, получаю только первую страницу без пагинации…Благодарен буду любой подсказке.
Комментарии: 20
                Всё в сниппете верно, пагинация должна работать. Как вызываете?
                    [[!pdoPage? &element=`mySnippet`]]
[[!+page.nav]]            
                Вызываю так:
                    [[!pdoPage?
    &element=`mySnippet`
    &chunk=`tpl.Review`
    &limit=`2`
[[!+page.nav]]            
                Идиотия…
я просто забыл закрывающие скобки для сниппета (((((((
Спасибо, что откликнулись =), а так может хоть скрипт кому пригодиться.
На всякий случай, правильный вызов:
                    я просто забыл закрывающие скобки для сниппета (((((((
Спасибо, что откликнулись =), а так может хоть скрипт кому пригодиться.
На всякий случай, правильный вызов:
[[!pdoPage?
    &element=`mySnippet`
    &chunk=`tpl.Review`
    &limit=`2`
]]
[[!+page.nav]]            
                Меня не много это смутило:
                    $query->leftJoin('TicketThread','Therd', 'Therd.id = TicketComment.thread');            
                Опечатка, но на функциональность она не повлияет — ведь это просто алиас, можно даже так написать:
                    $query->leftJoin('TicketThread','Vetka', 'Vetka.id = TicketComment.thread');            
                а, ну да, я чет замылился видать            
                    
                спасибо)            
                    
                нет идей ни у кого?            
                    
                Друзья, прошу помощи с выводом свего сниппета через pdoPage и пагинации к нему. У меня есть форма поиска в базе (сторонней) которая отправляет запрос через Ajax. Как быть в этом случае? Т.е. запрос с формы идет на страницу со сниппетом, который возвращяет результаты поиска в сторонней БД, после чего эти данные вставляются в div на странице с формой. Как в ткаом случае выводить результаты с пагинацией? Я совершенно запутался            
                    
                Чтобы выводить данные с разбивкой по страницам, нужно в ajax запросе отправлять limit и offset и вставлять эти данные в SQL запрос к БД в которой идёт поиск. Соответственно limit и offset зависят о номера страницы.            
                    
                а как этот блок пагинации [[!+page.nav]] знает что либо об ответе сниппета на аякс запрос? Вы бы могли какой-то простой пример привести?            
                    
                Статья действительно толковая, но там ни слова про аякс. В моем случае не особо помогла. Попробую расписать подробнее.
У меня есть страница, на которой есть форма, которая отсылает чререз аякс запрос и блок с результатами запроса, куда они вставляются после успешного его выполнения. Первоначально выглядит к примеру так:
Старался понятно расписать) заранее спасибо за ответы!)
                    У меня есть страница, на которой есть форма, которая отсылает чререз аякс запрос и блок с результатами запроса, куда они вставляются после успешного его выполнения. Первоначально выглядит к примеру так:
[[$searchForm]]
<div id="search-results" class="col-lg-8">
[[!+page.nav]]
[[!pdoPage? &element=`display_something` &limit=`2` &chunk=`itemRowTpl`]]
</div>в сниппете «display something», если в $_REQUEST ничего нет, то возвращаются все записи. И все сделано впринципе как в статье, т.е. прописаны $total, $totalVar, $limit и $offset. И пагинация в этом случае выводится (т.е. когда выводятся все данные), типа сниппет отработал, без запроса с формы и все ок. НО после ввода данных с формы, отправки их через аякс и получении ответа с этого сниппета, где был выполнен другой запрос на основании данных из формы, мы все так же видим пагинацию первоначальную, со ссылками вида<a href="mysite/thispage?page_1">1</a>
<a href="mysite/thispage?page_2">2</a>и тд. И выходит что результат запроса аяксом вставлен в блок id=«search-results», но пагинация то осталась старая. Как сделать, чтоб пагинация работала именно для текущих результатов полученных с помощью аякса? Старался понятно расписать) заранее спасибо за ответы!)
мы все так же видим пагинацию первоначальнуюПервое, что приходит на ум, это заменить блок, так же как и результаты, т.е. при запросе на сервер вызвать pdoPage.
                Т.е. вы имеете ввиду вызвать pdoPage на сервере верно? типа получить в ответе кроме результатов еще и блок page.nav, но с сервера? но ведь это не сработает) потому что при переходе по страницам этого page.nav будет обращение к server_page.php?page_1 и тд но без даных ранее веденных в форме, соответственно ответ будет не тот опять таки)            
                    
                А что за аякс. вы сами этот аякс писали? он отделен от pdoPage?            
                    
                ну мне необходимо как-то из формы передать данные, что именно искать в базе, получить ответ и вставить его в блок с результатами . Соответственно беру данные и передаю ajaxoм и получаю ответ:
                    $("#search-form").submit(function (event) {
        let formData = {
            internal_id: $("#search-form-internal-id").val(),
            iupac_name: $('#search-form-iupac-name').val(),
            formula: $("#formula").val(),
            cas: $("#cas").val(),
            molweight_min: $("#mol-weight-min").val(),
            molweight_max: $("#mol-weight-max").val()
        };
        console.log(formData); //debug
        $.ajax({
            type: "POST",
            url: "./search-handler",
            dataType: "json",
            data: formData,
            encode: true,
            converters: {
                'text json': true
            },
            success: function(data) {
                // console.log(data); //debug
                $('#search-results').html(data);
            }
        }).done(function () {
            console.log("request_done");
        });
        event.preventDefault();
    });            
                так это не работает. вы либо делаете свой сниппет и свою пагинацию
либо используете полностью pdoPage без своего ajax. Потому что pdoPage и знать не знает что у вас там в ajax. и как следствие не сможет перерисовать вам пагинацию.
Где-то была статья по поводу фильтров на PdoPage, но есть ощущение что или писать все самому или брать mSearch2, к нему можно прикрутить свою таблицу и там встроенные фильтры и все это на ajax работает.
СТатья:
ilyaut.ru/tips-and-tricks/simple-ajax-filter-using-pdopage/
                    либо используете полностью pdoPage без своего ajax. Потому что pdoPage и знать не знает что у вас там в ajax. и как следствие не сможет перерисовать вам пагинацию.
Где-то была статья по поводу фильтров на PdoPage, но есть ощущение что или писать все самому или брать mSearch2, к нему можно прикрутить свою таблицу и там встроенные фильтры и все это на ajax работает.
СТатья:
ilyaut.ru/tips-and-tricks/simple-ajax-filter-using-pdopage/
                а как в данном случае можно полностью использвоать pdoPage?            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.