pdoPage не разбивает по страницам
pdoPage не разбивает по страницам и не сортирует результаты.
Вызываю так:
Что я делаю не так?
Вызываю так:
[[!pdoPage?
&element=`youtubeTest`
&sort=`[{"sortby":"myPlaceholder","sortdir":"ASC"}]`
&limit=`2`
&tpl=`stream`
]]
Элементы выводятся все сразу и не сортируются.Что я делаю не так?
Комментарии: 12
возможно проблема в параметре sort
попробуйте так:
или так:
попробуйте так:
&sort=`{"sortby":"myPlaceholder","sortdir":"ASC"}`
или так:
&sortby=`myPlaceholder`
&sortdir=`ASC`
Вариант работает, только проблема не в нем была.
А как в сниппете youtubeTest (результат работы которого Вы пытаетесь разбить на страницы) обрабатываются переменные sort и limit, которые Вы ему передаете?
pdoPage — это просто обертка. Сниппет, для вызова которого он используется, должен сам лимитировать вывод на основе входных параметров и иметь возможность сдвига (offset) для реализации пагинации.
pdoPage — это просто обертка. Сниппет, для вызова которого он используется, должен сам лимитировать вывод на основе входных параметров и иметь возможность сдвига (offset) для реализации пагинации.
Спасибо, Павел! Навел на решение.
Я почему-то думал, что это делает pdoPage.
Я почему-то думал, что это делает pdoPage.
Павел, с сортировкой я разобрался, а постраничный вывод не работает (
limit и offset работают так:
limit и offset работают так:
foreach (new LimitIterator($array_index, $offset, $limit) as $idx => $res) {
$output .= $modx->getChunk($tpl);
}
И еще…
Никак не получается вынести порядок сортировки в переменную:
Никак не получается вынести порядок сортировки в переменную:
$sortdirvalue = 'SORT_ASC'
array_multisort($sort_array, $sortdirvalue, $arry_all);
У Вас в сниппете youtubeTest что именно перебирается? Если это объект, о котором MODX знает, то используйте просто getCollection. Там можно сразу все задать:
//...
$items= $modx->getCollection('Ваш_объект', array(
'limit'=>$limit,
'offset' => $offset,
'sortby'=> $sortby,
'sortdir'=> $sortdir,
));
foreach($items as $item){
$output .= $modx->getChunk($tpl, array());
}
//....
Перебирается json массив.
Ну вот как пример:
<?php
$array = array(
'item1' => array('name' => 'Борис', 'lastname' => 'Гришин', 'age' => 1980),
'item2' => array('name' => 'Василий', 'lastname' => 'Васильев', 'age' => 1982),
'item3' => array('name' => 'Геогрий', 'lastname' => 'Демидов', 'age' => 1981),
'item4' => array('name' => 'Дмитрий', 'lastname' => 'Александров', 'age' => 1983),
'item5' => array('name' => 'Алексей', 'lastname' => 'Белов', 'age' => 1984),
);
$totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar, count($array));
$limit = $modx->getOption('limit', $scriptProperties, 10);
$offset = $modx->getOption('offset', $scriptProperties, 0);
function sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, sorter($sortby)); // сортировка
$sortdir == 'DESC' ? krsort($array) : ksort($array); // направление
$array = array_slice($array, $offset, $limit); //обрезаем, сдвигаем
foreach($array as $item){
$out .= $item['name'].' '.$item['lastname'].' '.$item['age'].'<br />'; // выводим
}
return $out;
Вызов:[[!pdoPage?
&element=`SnippetName`
&sortby=`lastname`
&sortdir=`ASC`
&limit=`3`
]]
[[!+page.nav]]
Дружище, спасибо! Я бы тебе 500 плюсов поставил за отзывчивость.
Пример подробнейший, все вроде делал правильно, просто другими способами.
Взял из твоего примера:
Сортировку, из-за многомерного массива, приходится делать так:
Пример подробнейший, все вроде делал правильно, просто другими способами.
Взял из твоего примера:
<?php
$array = array_slice($array, $offset, $limit); //обрезаем, сдвигаем
и все заработало.Сортировку, из-за многомерного массива, приходится делать так:
<?php
foreach ($arry_all as $idx => $res) {
$sort_array[] .= $res->snippet->$sortby;
}
array_multisort($sort_array, SORT_DESC, $arry_all);
и никак не работает array_multisortесли выношу
SORT_DESCв переменную.
А так?
$sortdir == 'ASC' ? $order = SORT_ASC : $order = SORT_DESC;
array_multisort($sort_array, $order, $arry_all);
Работает!
Сам не допер, извини уж, за такое количество вопросов. Да и в примере ты направление сортировки показал как надо.
Ты меня прокачал теперь я — мастер сниппетов!
Сам не допер, извини уж, за такое количество вопросов. Да и в примере ты направление сортировки показал как надо.
Ты меня прокачал теперь я — мастер сниппетов!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.