Функция forums_url_structure в Cotonti
Функция forums_url_structure в фреймворке Cotonti это пользовательская функция, которая формирует URL-адреса для различных разделов форума в зависимости от переданных параметров.
Эту функцию нужно использовать соместно с этой инструкцией по настройке форума с ЧПУ.
Код функции:
function forums_url_structure(&$args)
{
global $cfg, $db, $structure, $db_forum_topics, $db_forum_posts;
require_once cot_incfile('forums', 'module');
$script = 'forums';
$replacement = '';
if(isset($args['m']) && $args['m'] == 'topics')
{
if(isset($args['s']))
{
$d = (int) $args['d'];
$replacement .= str_replace('.', '/', $structure['forums'][$args['s']]['path']);
if(isset($args['d']))
{
$replacement .= '/page'.$d;
}
unset($args['d']);
unset($args['s']);
}
else $replacement .= $script;
}
elseif(isset($args['m']) && $args['m'] == 'posts')
{
if(isset($args['q']))
{
$q = (int) $args['q'];
$d = (int) $args['d'];
$s = $db->query("SELECT fp_cat FROM $db_forum_posts WHERE fp_topicid=".$q)->fetchColumn();
$replacement .= str_replace('.', '/', $structure['forums'][$s]['path']).'/topic'.$q;
if(isset($args['d']))
{
$replacement .= '/page'.$d;
}
unset($args['d']);
unset($args['q']);
unset($args['m']);
}
elseif(isset($args['id']))
{
$id = (int) $args['id'];
$s = $db->query("SELECT fp_cat FROM $db_forum_posts WHERE fp_id=".$id)->fetchColumn();
$replacement .= str_replace('.', '/', $structure['forums'][$s]['path']).'/post'.$id;
unset($args['id']);
unset($args['m']);
}
else $replacement .= $script;
}
else $replacement .= $script;
return $replacement;
}
Давайте разберём её шаг за шагом.
Описание работы функции
1. Подключение необходимых файлов и переменных
global $cfg, $db, $structure, $db_forum_topics, $db_forum_posts;
require_once cot_incfile('forums', 'module');
$cfg — глобальная переменная конфигурации.$db — объект базы данных.$structure — структура категорий, которая используется для получения путей категорий форума.$db_forum_topics и $db_forum_posts — таблицы для хранения тем и постов форума в базе данных.cot_incfile('forums', 'module') — подключает файл модуля форума для использования его функционала (например, для получения информации о форумах и их категориях).
2. Инициализация переменных
$script = 'forums'; $replacement = '';
$script — имя скрипта (здесь это всегда 'forums'), которое используется в URL.$replacement — строка, в которую будет формироваться конечный URL.
3. Условная логика для формирования URL для различных типов страниц
3.1. Формирование URL для страницы с темами форума
if (isset($args['m']) && $args['m'] == 'topics') {
if (isset($args['s'])) {
$d = (int) $args['d'];
$replacement .= str_replace('.', '/', $structure['forums'][$args['s']]['path']);
if (isset($args['d'])) {
$replacement .= '/page'.$d;
}
unset($args['d']);
unset($args['s']);
} else {
$replacement .= $script;
}
}
Проверяется, если параметр m равен topics, что указывает на страницу с темами форума.
Если передан параметр s (код категории форума):
$d — страница с результатами (номер страницы).
В URL добавляется путь категории форума, который берётся из структуры категорий ($structure['forums'][$args['s']]['path']).
Если указан номер страницы, то добавляется /pageX, где X — номер страницы.
Если параметр s не передан, то формируется URL без указания конкретной категории, и используется основной скрипт форума — forums.
3.2. Формирование URL для страницы с постами форума
elseif (isset($args['m']) && $args['m'] == 'posts') {
if (isset($args['q'])) {
$q = (int) $args['q'];
$d = (int) $args['d'];
$s = $db->query("SELECT fp_cat FROM $db_forum_posts WHERE fp_topicid=".$q)->fetchColumn();
$replacement .= str_replace('.', '/', $structure['forums'][$s]['path']).'/topic'.$q;
if (isset($args['d'])) {
$replacement .= '/page'.$d;
}
unset($args['d']);
unset($args['q']);
unset($args['m']);
} elseif (isset($args['id'])) {
$id = (int) $args['id'];
$s = $db->query("SELECT fp_cat FROM $db_forum_posts WHERE fp_id=".$id)->fetchColumn();
$replacement .= str_replace('.', '/', $structure['forums'][$s]['path']).'/post'.$id;
unset($args['id']);
unset($args['m']);
} else {
$replacement .= $script;
}
}
Проверяется, если параметр m равен posts, что указывает на страницу с постами форума.
Если передан параметр q (ID темы):
$q — ID темы, для которой нужно вывести посты.
$d — номер страницы.
Получаем категорию форума, к которой принадлежит эта тема (через запрос к таблице forum_posts).
В URL добавляется путь категории, а затем путь к теме /topicX, где X — ID темы.
Если указан номер страницы d, то добавляется /pageX.
Если передан параметр id (ID поста):
Получаем категорию форума, к которой принадлежит данный пост.
В URL добавляется путь категории, а затем путь к посту /postX, где X — ID поста.
Если не переданы ни q, ни id, то используется основной скрипт форума — forums.
3.3. Если ни одно условие не выполнено
else $replacement .= $script;
Если ни одно из предыдущих условий не сработало, то используется основной скрипт forums для формирования URL.
4. Возвращение результата
return $replacement;
Возвращается строка $replacement, которая содержит сформированный URL для страницы форума.
Итоговое поведение функции
Функция forums_url_structure генерирует URL на основе переданных параметров $args. В зависимости от значения параметра m, она может формировать ссылки на:
Страницу с темами форума, например, для категории s и страницы d.
Страницу с постами форума, для темы q и страницы d, или для поста id.
В случае отсутствия нужных параметров, функция генерирует URL для главного скрипта форума.
Таким образом, функция предоставляет гибкость в генерации URL для различных разделов форума, учитывая категории и страницы.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 19:09
- Последнее обновление: 21.01.2025 19:13