Функция 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 для различных разделов форума, учитывая категории и страницы.

 

4 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Content author

Administrator

Offline

Administrator

Last logged: 2026-07-05 18:32

  • Page published: 2025-01-21 19:09
  • Last update: 2025-01-21 19:13