Пагинация постов из массива через pdoPage ?
Добрый день (вечер) создал сниппет который получает xml и парсит в массив.
Потом методом getChunk выводил содержимое на страницу.
Так встал вопрос как сделать пагинацию постов через pdoPage?
вызываю сниппет так
Как отрабатывает сниппет можно увидеть тут
Потом методом 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]]
Помогите пожалуйста) и если возможно подскажите как еще хранить посты в кэше (скажем сутки).Как отрабатывает сниппет можно увидеть тут