grisha2217
Проверенные
- Сообщения
- 916
- Решения
- 6
- Реакции
- 1,393
- Баллы
- 8,315
Жесть...
1.
Не нужно проверять "пустоту" массива для вывода пагинации, это уже есть в шаблоне page_nav
2. Не нужно добавлять в массив $viewParams элементы startOffset и endOffset, движок сам посчитает это
3.
Есть готовые функции для выборки записей с лимитом, зачем нужен свой велосипед, да написанный далеко не лучшим образом.
Приведу пример из движка, чтобы было понятно, в чём разница.
Сам $fetchOptions
1.
Код:
<xen:if is="{$tests}">
Код:
<xen:if is="{$pageTotal} > 1">
2. Не нужно добавлять в массив $viewParams элементы startOffset и endOffset, движок сам посчитает это
3.
PHP:
$page = isset($fetchOptions['page']) ? $fetchOptions['page'] : 1; // если в массиве $fetchOptions существует элемент с ключом page, то присваем его, иначе присваиваем 1
$perPage = isset($fetchOptions['perPage']) ? $fetchOptions['perPage'] : 25; // если в массиве $fetchOptions существует элемент с ключом perPage, то присваем его, иначе присваиваем 25
$offset = ($page - 1) * $perPage; // вычисляем отступ
$limit = $perPage; // присваиваем лимит
return array(
'offset' => $offset,
'limit' => $limit
); // возвращаем готовый к работе массив
}
Есть готовые функции для выборки записей с лимитом, зачем нужен свой велосипед, да написанный далеко не лучшим образом.
Приведу пример из движка, чтобы было понятно, в чём разница.
PHP:
$whereConditions = $this->prepareThreadConditions($conditions, $fetchOptions);
$sqlClauses = $this->prepareThreadFetchOptions($fetchOptions);
$limitOptions = $this->prepareLimitFetchOptions($fetchOptions);
$forceIndex = (!empty($fetchOptions['forceThreadIndex']) ? 'FORCE INDEX (' . $fetchOptions['forceThreadIndex'] . ')' : '');
return $this->fetchAllKeyed($this->limitQueryResults(
'
SELECT thread.*
' . $sqlClauses['selectFields'] . '
FROM xf_thread AS thread ' . $forceIndex . '
' . $sqlClauses['joinTables'] . '
WHERE ' . $whereConditions . '
' . $sqlClauses['orderClause'] . '
', $limitOptions['limit'], $limitOptions['offset']
), 'thread_id');
Сам $fetchOptions
PHP:
$fetchOptions = array(
'order' => 'post_date',
'direction' => 'desc',
'join' => XenForo_Model_Thread::FETCH_FORUM | XenForo_Model_Thread::FETCH_FIRSTPOST | XenForo_Model_Thread::FETCH_USER | XenForo_Model_Thread::FETCH_AVATAR,
'readUserId' => XenForo_Visitor::getUserId(),
'includeForumReadDate' => true,
'perPage' => $perPage,
'page' => $page
);