Для небольших массивов (десятки-сотни страниц, при условии что там нет серьезной выборки, которая забьет или Мускул или РНР) я осознанно применяю такое:
1. Написал два метода в классе Utils:
Код |
---|
public static function makePagination($res)
{
$rows = array();
while ($row = $res->fetch()) {
$rows[] = $row;
}
$res = new \CDBResult;
$res->InitFromArray($rows);
$res->navStart(Options::PAGE_COUNT);
self::$pagintaionStr = $res->GetPageNavStringEx($navComponentObject, '', 'visual');
return $res;
}
public static function getPagination()
{
return self::$pagintaionStr;
}
|
2. Вместо
MyTable::getList($params)
юзаю
Utils::makePagination(MyTable::getList($params))
3. Вывожу постраничку
Код |
---|
<?= \***\Utils::getPagination()?> |
Да, говнокод, но вряд ли другие надстройки получатся прозрачными и удобными. Чтобы сделать качественную постраничку, надо внедряться системно на уровне getList. Почему это до сих пор не сделано - ума не приложу.
На самом деле можно попыхтеть и сделать что-то типа такого:
1. Переопределить getList.
2. Слушать там номер постранички из request, реагировать на него.
3. Подставлять лимиты, оффсеты, а затем вызывать parent::getList($params).
Но руки не доходят.