Сторінки, статті та новини
Інструменти та плагіни
Заготовка заголовок


Опис як приклад заготовки. Приклад текстового контенту для подальшої кастомізації шаблону "Index36".

Редагувати шаблон можна на власний розсуд. Якщо у вас немає часу або знань – завжди можна замовити адаптацію шаблону, написавши мені через GitHub або особисті повідомлення на публічній сторінці маркетплейсу цифрових товарів.

Файл 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(). Это помогает ускорить загрузку страницы, так как статическая информация будет храниться в кеше и использоваться для последующих запросов.

 

Коментарі відсутні
Додавання коментарів доступне лише зареєстрованим користувачам
Обліковий запис