Считаем количество страниц по условиям
- 453 просмотра
- 23 января, 2023
- Обновлено: 16 октября, 2023
- admin
- Время чтения: 3 минуты
Первоначально идея была объяснить решение на примере отдельной функции, однако в процессе написания статьи пришла мысль оформить решение в виде плагина. Но начнем все же с самой функции:
function cot_pagecount ($condition = '', $mode = '', $cats = '', $subs = true, $decl = 'pages') { return $totalitems; }
Примерно так она должна выглядеть. Параметры следующие:
- $condition -- условие в формате SQL;
- $mode -- режим выбора раздела для подсчета;
- $cats -- собственно, перечень разделов
- $subs -- параметр учета вложенных подразделов;
- $decl -- имя lang-переменной для использования функции cot_declension
Задаем значения параметров по умолчанию для того, чтобы вывод без них привел к выводу всех страниц сайта красивой фразой типа "25 страниц".
Функция будет обращаться к таблице страниц базы данных, и использовать массив локализаций $Ls. Кроме этого, нам понадобится файл локализации модуля Page и файл функций плагина Pagelist:
function cot_pagecount ($condition = '', $mode = '', $cats = '', $subs = true, $decl = 'pages') { global $Ls; $db_pages = Cot::$db->pages; require_once cot_langfile('page', 'module'); require_once cot_incfile('pagelist', 'plug'); return $totalitems; }
Функции плагина Pagelist, а конкретно cot_compilecats() мы используем для формирования MYSQL-запроса на основе введенного режима (single, white, black или array) и разделов. Так и поступим, а заодно подключим параметр с указанием условия:
function cot_pagecount ($condition = '', $mode = '', $cats = '', $subs = true, $decl = 'pages') { global $Ls; $db_pages = Cot::$db->pages; require_once cot_langfile('page', 'module'); require_once cot_incfile('pagelist', 'plug'); $where_cat = cot_compilecats($mode, $cats, (bool)$subs); $condition = (empty($condition)) ? '' : 'AND ' . $condition; return $totalitems; }
Добавим MYSQL-запрос -- все необходимое для него мы подготовили:
function cot_pagecount ($condition = '', $mode = '', $cats = '', $subs = true, $decl = 'pages') { global $Ls; $db_pages = Cot::$db->pages; require_once cot_langfile('page', 'module'); require_once cot_incfile('pagelist', 'plug'); $where_cat = cot_compilecats($mode, $cats, (bool)$subs); $condition = (empty($condition)) ? '' : 'AND ' . $condition; $totalitems = Cot::$db->query(" SELECT COUNT(*) FROM $db_pages WHERE page_state='0' $where_cat $condition ")->fetchColumn(); return $totalitems; }
Финальный штрих -- применение функции cot_declension() -- если указано имя переменной:
function cot_pagecount ($condition = '', $mode = '', $cats = '', $subs = true, $decl = 'pages') { global $Ls; $db_pages = Cot::$db->pages; require_once cot_langfile('page', 'module'); require_once cot_incfile('pagelist', 'plug'); $where_cat = cot_compilecats($mode, $cats, (bool)$subs); $condition = (empty($condition)) ? '' : 'AND '.$condition; $totalitems = $db->query(" SELECT COUNT(*) FROM $db_pages WHERE page_state='0' $where_cat $condition ")->fetchColumn(); $totalitems = (empty($decl)) ? $totalitems : cot_declension($totalitems, $Ls[$decl]); return $totalitems; }
Для удобства использования функции имеет смысл создать для нее плагин со следующими нюансами:
- Поскольку используем функцию плагина Pagelist, имеет смысл создать соответствующую установочную зависимость.
- Поскольку Pagelist используется глобально (Hooks=global), подключение lang-файла Pages и функций Pagelist становится необязательным.
Исходя из этого, попробуйте создать плагин самостоятельно, или скачайте его с нашего сайта.
Новый комментарий