Пагинация постов из массива через pdoPage ?
Добрый день (вечер) создал сниппет который получает xml и парсит в массив.
Потом методом getChunk выводил содержимое на страницу.
Так встал вопрос как сделать пагинацию постов через pdoPage?
вызываю сниппет так
Как отрабатывает сниппет можно увидеть тут
0
Потом методом getChunk выводил содержимое на страницу.
Так встал вопрос как сделать пагинацию постов через pdoPage?
<?php
$limit=$modx->getOption('limit', $scriptProperties, 5);
$offset=$modx->getOption('offset', $scriptProperties, 0);
$i = 0;
$reviews = array(); // Здесь будут хранится отзывы (посты)
//Функция которая пробегается по всем документам где указан определенный TV и возвращает массив (id(документа) => значение определенного TV)
function get_id($tvid){
$res = array();
global $modx;
$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$res[$row['contentid']] = $row['value'];
}
}
return $res;
}
//Функция отправляет Xml запрос и получаем Xml ответ ( комментарии )
function get_reviews_XMl($id){
$url = 'http://shop.digiseller.ru/xml/shop_reviews.asp';
$xml = "
<digiseller.request>
<seller>
<id>195463</id>
</seller>
<product>
<id>$id</id>
</product>
<reviews>
<type>good</type>
</reviews>
<pages>
<rows>1</rows>
</pages>
</digiseller.request>
";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
return curl_exec($ch);
}
// Функция которая парсит массив в чанк для вывода.
function parse_array($array,$limit,$offset){
global $modx;
$out = '';
$l = $offset + $limit;
for ($i = $offset; $i < $limit; $i++){
$placeholders = array(
'my.id' => $array[$i]['game_id'],
'my.title' => $array[$i]['title'],
'my.image' => $array[$i]['image'],
'my.text' => $array[$i]['info'],
'my.date' => $array[$i]['date']
);
$out .= $modx -> parseChunk('review-tpl2',$placeholders);
}
return $out;
}
// Функция для сортировки по дате
function mysort($a, $b){
return strtotime($b['date']) - strtotime($a['date']);
}
// Получаем все id документов со значениями TV c id 18
$res = get_id(18);
// тут мы получаем посты отзывы( и сохраняем все в массив $reviews)
foreach($res as $id => $v){
$xml_obj = simplexml_load_string(get_reviews_XMl($v), 'SimpleXMLElement', LIBXML_NOCDATA);
foreach($xml_obj->reviews->review as $rv){
$reviews[$i]['game_id'] = (string)$id;
$reviews[$i]['title'] = $modx->getObject('modResource',$id)->get('pagetitle');
$reviews[$i]['image'] = $modx->getObject('modResource',$id)->getTVValue(1);
$reviews[$i]['date'] = (string)$rv->date;
$reviews[$i]['info'] = (string)$rv->info;
$i++;
}
}
$total = count($reviews); //количество постов
$totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar,$total);
usort($reviews, 'mysort');
$a = parse_array($reviews,$limit,$offset);
return $a;Вроде я подготовил сниппеет для pdoPage, но в итоге пагинация появляется но при переходе на 2 страницу нечего не появляется. Не могу понять в чём причина.вызываю сниппет так
[[!pdoPage? &element=`reviews2` &limit=`5` &offset=`0` ]] [[!+page.nav]]Помогите пожалуйста) и если возможно подскажите как еще хранить посты в кэше (скажем сутки).Как отрабатывает сниппет можно увидеть тут