Sadist07
@Sadist07
Верстальщик, Недо дизайнер

Как сделать пагинацию MODX с помощью getPage или pdoPage для своего сниппета?

Добрый вечер, сделал свой сниппет который получает xml потом парсит его в массив.
Пытался соединить свой сниппет с getPage или с pdoPage но не получается. Прочитав эту инструкцию понял что там выборка идёт из бд через API MODX.
Подскажите пожалуйста что мне нужно сделать с массивом который хранит все посты, что бы можно было его разделить на страницы.

В данный момент у меня такой код
<?php
$limit=$modx->getOption('limit', $scriptProperties, 5);
$offset=$modx->getOption('offset', $scriptProperties, 0);
$i = 0;
$reviews = array();
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;
}
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']);
}
$res = get_id(18);
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;

К сожалению он выводит ток 1 страницу.... а другие не работают((
что выводится можно посмотреть тут
  • Вопрос задан
  • 726 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы