Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

Файл forums.posts.php в Cotonti. завершающая часть

Файл forums.posts.php в Cotonti. завершающая часть

 

 

// Назначаем теги пагинации для шаблона
$t->assign(cot_generatePaginationTags($pagenav));

// Иконка темы
$rowt['ft_icon'] = 'posts';  // Устанавливаем базовую иконку для темы как 'posts'.
$rowt['ft_postisnew'] = FALSE;  // Флаг, указывающий, что тема не новая

// Проверка, обновлялась ли тема после последнего визита пользователя
if ($rowt['ft_updated'] > Cot::$usr['lastvisit'] && Cot::$usr['id'] > 0) {
    $rowt['ft_icon'] .= '_new';  // Если тема обновлена после визита, добавляем к иконке '_new'.
    $rowt['ft_postisnew'] = TRUE;  // Отмечаем, что тема новая
}

// Проверка на горячую тему
if ($rowt['ft_postcount'] >= Cot::$cfg['forums']['hottopictrigger'] && !$rowt['ft_state'] && !$rowt['ft_sticky']) {
    $rowt['ft_icon'] = ($rowt['ft_postisnew']) ? 'posts_new_hot' : 'posts_hot';  // Если количество сообщений больше порога, устанавливаем иконку горячей темы.
} else {
    $rowt['ft_icon'] .= ($rowt['ft_sticky']) ? '_sticky' : '';  // Если тема закреплена, добавляем '_sticky' к иконке.
    $rowt['ft_icon'] .= ($rowt['ft_state']) ? '_locked' : '';  // Если тема заблокирована, добавляем '_locked' к иконке.
}

// Сохраняем тип иконки для дальнейшего использования
$rowt['ft_icon_type'] = $rowt['ft_icon'];
$rowt['ft_icon'] = cot_rc('forums_icon_topic', array('icon' => $rowt['ft_icon']));  // Генерируем окончательную иконку через шаблонный тег.

// Определение расширенной иконки для пользователя, если он является первым постером
$rowt['ft_icon_type_ex'] = $rowt['ft_icon_type'];
if (Cot::$usr['id'] > 0 && $rowt['ft_firstposterid'] == Cot::$usr['id']) {
    $rowt['ft_icon_type_ex'] .= '_posted';  // Если текущий пользователь является первым постером, добавляем '_posted'.
}

// Передаем иконки в шаблон
$t->assign([
    'FORUMS_POSTS_ICON' => $rowt['ft_icon'],
    'FORUMS_POSTS_ICON_TYPE' => $rowt['ft_icon_type'],
    'FORUMS_POSTS_ICON_TYPE_EX' => $rowt['ft_icon_type_ex'],
]);

Разбор кода:

  1. Пагинация: В первую очередь вызывается функция cot_generatePaginationTags($pagenav), которая генерирует теги для пагинации, и эти теги присваиваются переменной $t. Это позволяет отображать пагинацию на страницах форума.

  2. Иконка темы:

    • Изначально задается базовая иконка темы как posts.
    • Флаг ft_postisnew используется для того, чтобы отметить, что тема новая (если она была обновлена после последнего визита пользователя).
    • Если тема имеет больше сообщений, чем установленный порог (hottopictrigger), и не является заблокированной или закрепленной, то она считается "горячей". В противном случае иконка будет дополнена в зависимости от того, закреплена ли тема или заблокирована.
  3. Тип иконки:

    • После определения иконки для темы, её тип сохраняется в переменной ft_icon_type. Иконка генерируется с помощью функции cot_rc, которая позволяет работать с шаблонами и заменять параметры внутри строк.
  4. Расширенная иконка:

    • Если текущий пользователь является первым постером темы, то иконка для него будет дополнена суффиксом _posted, чтобы обозначить его вклад в тему.
  5. Назначение значений в шаблон:

    • В конце иконки передаются в шаблон через t->assign(), чтобы они могли быть использованы в представлении страницы форума.

 

// Проверяем, есть ли дополнительные поля для темы форума
if (!empty(Cot::$extrafields[Cot::$db->forum_topics])) {
    // Перебираем все дополнительные поля для темы форума
    foreach (Cot::$extrafields[Cot::$db->forum_topics] as $exfld) {
        $tag = mb_strtoupper($exfld['field_name']);  // Преобразуем имя поля в верхний регистр для использования в теге.
        $exfld_title = cot_extrafield_title($exfld, 'forums_topic_');  // Получаем заголовок для поля с использованием функции cot_extrafield_title.
        
        // Передаем в шаблон данные о дополнительном поле
        $t->assign([
            'FORUMS_POSTS_TOPIC_' . $tag . '_TITLE' => $exfld_title,  // Заголовок дополнительного поля
            'FORUMS_POSTS_TOPIC_' . $tag => cot_build_extrafields_data('forums', $exfld, $rowt['ft_' . $exfld['field_name']],
                (Cot::$cfg['forums']['markup'] && Cot::$cfg['forums']['cat_' . $s]['allowbbcodes'])),  // Значение поля, с учетом разрешения BB-кодов.
            'FORUMS_POSTS_TOPIC_' . $tag . '_VALUE' => $rowt['ft_' . $exfld['field_name']],  // Значение поля
        ]);
    }
}

Разбор кода:

  1. Проверка дополнительных полей:

    • Сначала проверяется, есть ли у темы форума дополнительные поля, используя условие !empty(Cot::$extrafields[Cot::$db->forum_topics]). Это массив дополнительных полей для темы форума.
  2. Обработка каждого дополнительного поля:

    • В цикле foreach перебираются все дополнительные поля. Для каждого поля:
      • mb_strtoupper($exfld['field_name']) — преобразует имя поля в верхний регистр для использования в теге шаблона.
      • cot_extrafield_title($exfld, 'forums_topic_') — вызывает функцию, которая возвращает заголовок для данного дополнительного поля с префиксом 'forums_topic_'.
  3. Передача данных в шаблон:

    • Для каждого поля создаются теги, которые передаются в шаблон с помощью $t->assign(). Теги содержат:
      • Заголовок поля (FORUMS_POSTS_TOPIC_..._TITLE).
      • Значение поля (FORUMS_POSTS_TOPIC_...), которое формируется через функцию cot_build_extrafields_data(). Эта функция также проверяет, разрешены ли BB-коды для данного поля.
      • Оригинальное значение поля из базы данных (FORUMS_POSTS_TOPIC_..._VALUE).

 

/* === Hook  === */
foreach (cot_getextplugins('forums.posts.tags') as $pl) {
    include $pl;  // Включаем расширения (плагины), если они существуют для форума в разделе 'forums.posts.tags'.
}
/* ===== */

// Парсим основной шаблон и выводим его
$t->parse('MAIN');  // Парсит (генерирует) шаблон 'MAIN'.
$t->out('MAIN');  // Выводит результат шаблона 'MAIN' на экран.

require_once Cot::$cfg['system_dir'] . '/footer.php';  // Подключаем файл footer.php, который обычно завершает страницу (например, для вывода футера).

// Кеширование данных
if (Cot::$cache && Cot::$usr['id'] === 0 && Cot::$cfg['cache_forums']) {
    Cot::$cache->static->write();  // Если кеширование включено, пользователь не авторизован, и кэш для форумов включен, то сохраняем кэш статической страницы.
}

Разбор кода:

  1. Работа с плагинами:

    • cot_getextplugins('forums.posts.tags') — функция, которая получает список плагинов, зарегистрированных для хука forums.posts.tags.
    • В цикле foreach эти плагины подключаются с помощью include $pl. Это позволяет подключить внешние расширения, которые могут изменять поведение или внешний вид страницы форума.
  2. Парсинг и вывод шаблона:

    • $t->parse('MAIN') — эта строка парсит (обрабатывает) шаблон, создавая HTML-контент, который соответствует шаблону с меткой MAIN.
    • $t->out('MAIN') — выводит результат шаблона на страницу. Этот метод фактически отображает сгенерированное содержимое шаблона пользователю.
  3. Подключение футера:

    • require_once Cot::$cfg['system_dir'] . '/footer.php'; — подключает файл футера. Обычно это файл, который завершает страницу, добавляя стандартный футер (например, информацию о копирайте или другие элементы внизу страницы).
  4. Кеширование:

    • Включена проверка, чтобы данные кешировались только в случае, если:
      • Включено кеширование в системе (Cot::$cache).
      • Пользователь не авторизован (Cot::$usr['id'] === 0).
      • Кеширование для форума включено в настройках (Cot::$cfg['cache_forums']).
    • Если все условия выполнены, данные сохраняются в кеш с помощью Cot::$cache->static->write(). Это помогает ускорить загрузку страницы, так как статическая информация будет храниться в кеше и использоваться для последующих запросов.

 

No comments yet
Only registered users can post new comments
Account