pdoPage и вывод результата прямого запроса

Добрый день.

Есть БД, вертится на Оракле.

В MODX сниппете получаю результат прямого запроса к Ораклу в виде массива. К примеру, так:
<?php
$conn = oci_connect($baselogin, $basepass, $oraconnect);
$stid = oci_parse($conn, 'SELECT rownum as IDX, s.* FROM V_WEBCLIENTS s where ID_FIRM='.$occlient);
$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW);
return $res;
Массив ассоциативный, по именам полей запроса.

Как вывести этот массив через pdoPage?
Или — есть ли какие-либо идеи (лучше этой) по выводу постранично больших табличных данных, хранящихся не в БД MODX?

Спасибо.
Андрей Гузенков
14 сентября 2015, 03:31
modx.pro
2 481
0

Комментарии: 5

Василий Наумкин
14 сентября 2015, 08:10
1
0
Нужно написать свой сниппет, который будет совместим с pdoPage и указать его для работы:
[[!pdoPage?
	&element=`твойсниппет`
]]
Принцип работы таких сниппетов вот здесь.
    Андрей Гузенков
    14 сентября 2015, 11:43
    0
    Спасибо за ссылку. Прочитал, сделал сниппет — не заработал… :(
    Код страницы:
    [[!pdoPage?
    	&element= `testPdoPage`
        &tpl=`@INLINE <p>[[+pagetitle]]</p>`
    ]]
    [[!+page.nav]]
    Код сниппета testPdoPage:
    <?php
    $totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
    $modx->setPlaceholder($totalVar,1000);
    $limit=$modx->getOption('limit', $scriptProperties, 10);
    $offset=$modx->getOption('offset', $scriptProperties, 0);
    $data=array();
    for($i=1;$i<=$limit;$i++){
    	$data[$i]=array('ids'=>$offset+$i, 'pagetitle'=>'Page ' . ($offset+$i) );
    }
    
    print_r($data);
    
    return $data;
    Вроде совсем простой код. Из документации: «Данный сниппет должен понимать параметры &page и &limit.» Мой — принимает, и даже отрабатывает, простейшим образом.
    Результат — на рис.


    Где же ошибка (кроме той, что в генах :) )? Навигация работает исправно. Отображения не происходит. Может быть, надо массив составить определенного формата? Но какого?
      Василий Наумкин
      14 сентября 2015, 12:35
      0
      Отображения не происходит
      А что ты сделал в сниппете для этого отображения? Где оформление результата в указанный чанк?

      Я вижу только print_r($data); — что и приводит к распечатыванию данных на экране. Читай дальше, что ли.

      И кстати, работать с @INLINE чанками MODX по умолчанию не умеет. Если хочешь их использовать, то нужно подключать pdoTools.
        Андрей Гузенков
        14 сентября 2015, 15:56
        0
        Мда… Вот ведь как…
        Когда по кодам pdo* полазил, только тогда понял очевидную же вещь, которая есть и в мануалах — то, что pdoPage обёртка и сама выходные данные вызываемого сниппета не форматирует. А форматировать выходной массив нужно в самом сниппете. А для полноты ощущений надо в том же сниппете подключить pdoTools, и настанет счастье.

        Спасибо за подсказки и терпение! )
          Василий Наумкин
          14 сентября 2015, 15:58
          0
          Да, pdoPage, как и getPage, просто разбивает данные другого сниппета на страницы.

          А вот задача сниппета — всё выбрать и оформить.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5