Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость

Считаем количество страниц по условиям

  • 358 просмотров
  • 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;
}

Для удобства использования функции имеет смысл создать для нее плагин со следующими нюансами:

  1. Поскольку используем функцию плагина Pagelist, имеет смысл создать соответствующую установочную зависимость.
  2. Поскольку Pagelist используется глобально (Hooks=global), подключение lang-файла Pages и функций Pagelist становится необязательным.

Исходя из этого, попробуйте создать плагин самостоятельно, или скачайте его с нашего сайта.

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Комментарии отсутствуют