Как подружить вывод материала полученного с помощью getCollection от pdofetch с пагинацией страниц на pdoPage.
Все, кто писал свой снипет для модекс ( modx ), и в котором ресурсы каталога выводил используя метод getCollection класса pdofetch - столкнулся с проблемой корректного вывода постраничной навигации и вывода отдельных страниц каталога.
Здесь описаны основные этапы решения этого вопроса.
1. Копируем файл pdofetch.class.php в пуже папку под другим именем, например pdofetchcoll.class.php . Мы создадим ноый класс pdofetchcoll, который будет расширением класса pdotools. Это сделано для предотвращения потери наших изменений при очередном обновлении дополнения pdotools.
2. В классе pdofetchcoll создадим новый метод getCollectionMy, который является клоном метода getCollection.
3. Именим метод getCollectionMy следующим образом: (строчки помеченные myAdd добавляются в скрипт)
...
$config['class'] = $class;
$config['totalVar'] = 'page.total'; // myAdd
$config['limit'] = !isset($config['limit']);
...
if ($instance->query->stmt->execute()) {
$instance->addTime('SQL executed', microtime(true) - $tstart);
$instance->modx->queryTime += microtime(true) - $tstart;
$instance->modx->executedQueries++;
$tstart = microtime(true);
$instance->setTotal(); // myAdd
if (!$rows = $instance->query->stmt->fetchAll(PDO::FETCH_ASSOC)) {
$rows = array();
} else {
$rows = $instance->checkPermissions($rows);
$rows = $instance->prepareRows($rows);
}
...
Вот видите, нам потребовалось всего 2 строчки кода!
4. Осталось только подключить созданный класс pdofetchcoll в начало тела вашего снипета.
/** @var pdoFetchcoll $pdoFetch */
$fqn = $modx->getOption('pdoFetchcoll.class', null, 'pdotools.pdofetch', true);
if ($pdoClass = $modx->loadClass($fqn, '', false, true)) {
$pdoFetch = new $pdoClass($modx, $scriptProperties);
}
elseif ($pdoClass = $modx->loadClass($fqn, MODX_CORE_PATH . 'components/pdotools/model/', false, true)) {
$pdoFetch = new $pdoClass($modx, $scriptProperties);
}
else {
$modx->log(modX::LOG_LEVEL_ERROR, 'Could not load pdoTools from "MODX_CORE_PATH/components/pdotools/model/".');
return false;
}
Вот и все, удачных вам написанных программ!
Комментарии ()