Подскажите, как вывести свой сниппет через 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?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.