Файл page.header.php в Cotonti

Он формирует массив уведомлений о новых страницах, ожидающих модерации, и черновиках, находящихся в работе.

Опубликовано в: Модуль Pages в Cotonti CMF

описание файла page.header.php в Cotonti CMF


 1. Основное назначение и место в системе Cotonti

Файл page.header.php отвечает за вывод уведомлений в заголовке сайта для пользователей, которые имеют права на управление страницами (администраторы и редакторы). Он формирует массив уведомлений о новых страницах, ожидающих модерации, и черновиках, находящихся в работе.

Расположение в системе Cotonti:
Обычно этот файл находится в директории:
/modules/page/page.header.php
Он является частью модуля "Pages" (страницы), который управляет публикацией и отображением контента на сайте.


2. Взаимодействие с другими частями системы

  • Хуки:
    Файл подключается через хук header.main, что позволяет выполнять его код при формировании заголовка страницы. Это значит, что уведомления будут видны на всех страницах сайта, где вызывается данный хук (например, в административной панели или личном кабинете пользователя).

  • База данных:
    Файл выполняет SQL-запросы к таблице pages для подсчета количества страниц, находящихся в очереди на модерацию или в черновиках.

  • Модули и функции Cotonti:
    Используется подключение стандартного модуля page для работы с контентом.

  • Глобальные переменные:
    Работает с глобальными объектами Cotonti (Cot::$usr, Cot::$db, Cot::$sys, Cot::$out), которые хранят информацию о текущем пользователе, системе и данных для вывода.


 3. Переменные, хуки, методы, функции и классы

 Хуки:

  • header.main — основной хук, который инициирует выполнение кода при рендеринге заголовка сайта.

 Классы и пространства имен:

  • Cot — глобальный статический класс Cotonti, через который осуществляется доступ к системным объектам:
    • Cot::$usr — данные текущего пользователя (ID, права и т.д.).
    • Cot::$db — объект базы данных для выполнения SQL-запросов.
    • Cot::$sys — системные переменные, используемые для хранения состояния и промежуточных данных.
    • Cot::$out — массив для формирования данных, которые будут выведены на странице.

Функции и методы:

  1. cot_auth($area, $option, $right)
    Проверяет, имеет ли пользователь права на выполнение определённых действий в указанной области (например, модуле страниц).

  2. cot_incfile($module, $type)
    Подключает файл модуля для использования его функциональности.

  3. cot_url($target, $params)
    Генерирует URL для перехода на нужные страницы сайта с заданными параметрами.

  4. cot_declension($number, $titles)
    Возвращает корректную форму слова в зависимости от числа (например, "1 черновик", "2 черновика", "5 черновиков").

  5. query() (метод объекта базы данных)
    Выполняет SQL-запрос.

  6. fetchColumn() (метод объекта базы данных)
    Извлекает одно значение из результата SQL-запроса (например, количество записей).

Переменные:

  • Cot::$usr['id'] — ID текущего пользователя. Проверяется для определения, авторизован ли пользователь.
  • Cot::$sys['pagesqueued'] — количество страниц в очереди на модерацию.
  • Cot::$sys['pagesindrafts'] — количество страниц в черновиках.
  • Cot::$out['notices_array'] — массив уведомлений, который будет выведен в интерфейсе пользователя.
  • $Ls — массив языковых строк для локализации уведомлений.

4. Суть кода: задачи, функции и условия

  • Проверка авторизации пользователя:
    Сначала проверяется, авторизован ли пользователь и есть ли у него права на управление страницами.

    • Если пользователь — администратор (A), он видит уведомления о всех страницах, ожидающих модерации и черновиках.
    • Если пользователь — редактор (W), он видит уведомления только о своих страницах.
  • Подключение модуля страниц:
    Для работы с базой данных подключается модуль page.

  • Получение данных из базы:
    Выполняются SQL-запросы для подсчета:

    • Страниц в очереди на модерацию (page_state = 1).
    • Страниц в черновиках (page_state = 2).
  • Формирование уведомлений:
    Если есть страницы, ожидающие проверки или сохранённые как черновики, добавляются уведомления с количеством и ссылками для перехода в соответствующие разделы.


5. Как использовать этот файл владельцу сайта

  • Для администраторов:
    Файл помогает отслеживать новые материалы, требующие модерации. Это упрощает управление контентом, так как уведомления видны сразу в панели управления.

  • Для редакторов:
    Позволяет быстро видеть статус своих материалов — сколько страниц ещё не опубликовано или сохранено как черновики.

  • Для кастомизации:
    Владелец сайта может изменить логику отображения уведомлений:

    • Добавить новые условия для уведомлений.
    • Изменить SQL-запросы для работы с другими типами контента.
    • Внести изменения в отображение уведомлений (например, добавить приоритеты или цвета для разных типов уведомлений).

6. Стиль написания PHP-кода и совместимость

  • Стиль кода:

    • Используется объектно-ориентированный подход (OOP) с глобальными статическими объектами (Cot::$usr, Cot::$db и т.д.).
    • Активно применяются строгие проверки авторизации и прав доступа.
    • Чистый и читаемый код с логическими блоками, разделёнными условиями if и elseif.
    • SQL-запросы выполняются с использованием встроенных методов для работы с БД.
  • Совместимость с PHP:

    • Код совместим с версиями PHP 5.4 и выше, так как использует стандартные функции Cotonti и базовые возможности PHP (например, пространство имён Cot::).
    • Рекомендуемая версия — PHP 7.4+ для лучшей производительности и безопасности.
    • Нет использования функций, специфичных для новых версий PHP 8.x, что делает код кросс-версией.

Заключение

Файл page.header.php — это важный элемент модуля "Pages" в Cotonti CMF, который отвечает за уведомления о статусе страниц для администраторов и редакторов. Он эффективно взаимодействует с системой авторизации, базой данных и пользовательским интерфейсом. Код написан с акцентом на безопасность и читаемость, что упрощает его модификацию для владельцев сайтов.

 

 

<?php
/* ====================
[BEGIN_COT_EXT] // Начало блока метаинформации расширения Cotonti.
Hooks=header.main // Указывает, что данный код подключается к хуку 'header.main', т.е. выполняется при формировании заголовка страницы.
[END_COT_EXT] // Конец блока метаинформации расширения.
==================== */

/**
 * Header notices for new pages
 *
 * @package Cotonti // Указывает, что данный файл относится к пакету Cotonti.
 * @copyright (c) Cotonti Team // Авторские права принадлежат команде Cotonti.
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt // Ссылка на лицензию проекта Cotonti.
 */

defined('COT_CODE') or die('Wrong URL'); // Проверка, определена ли константа COT_CODE. Если нет — скрипт завершает выполнение для защиты от прямого доступа.

if (
    Cot::$usr['id'] > 0 // Проверка, авторизован ли пользователь (ID больше 0).
    && (cot_auth('page', 'any', 'A') || cot_auth('page', 'any', 'W')) // Проверка, есть ли у пользователя права администратора (A) или права на запись (W) для модуля страниц.
) {
    require_once cot_incfile('page', 'module'); // Подключение основного файла модуля страниц для дальнейшего использования его функциональности.
}


if (Cot::$usr['id'] > 0 && cot_auth('page', 'any', 'A')) { // Проверка: авторизован ли пользователь и имеет ли он права администратора на модуль страниц.
    Cot::$sys['pagesqueued'] = (int) Cot::$db->query('SELECT COUNT(*) FROM ' . Cot::$db->pages .
        ' WHERE page_state = 1')->fetchColumn(); // Подсчет количества страниц в очереди на модерацию (page_state = 1).

	if (Cot::$sys['pagesqueued'] > 0) { // Если есть хотя бы одна страница в очереди на модерацию.
        Cot::$out['notices_array'][] = array( // Добавление уведомления в массив уведомлений для отображения в интерфейсе.
            cot_url('admin', 'm=page'), // Ссылка на административную панель модуля страниц.
            cot_declension(Cot::$sys['pagesqueued'], $Ls['unvalidated_pages']) // Формирование текста уведомления с правильным склонением в зависимости от количества страниц.
        );
	}

    Cot::$sys['pagesindrafts'] = (int) Cot::$db->query('SELECT COUNT(*) FROM ' . Cot::$db->pages
        ." WHERE page_state = 2")->fetchColumn(); // Подсчет количества страниц в черновиках (page_state = 2).

    if (Cot::$sys['pagesindrafts'] > 0) { // Если есть хотя бы одна страница в черновиках.
        Cot::$out['notices_array'][] = array( // Добавление уведомления о черновиках в массив уведомлений.
            cot_url('admin', 'm=page&filter=drafts'), // Ссылка на административную панель с фильтром для отображения черновиков.
            cot_declension(Cot::$sys['pagesindrafts'], $Ls['pages_in_drafts']) // Формирование текста уведомления с учетом правильного склонения.
        );
    }


} elseif (Cot::$usr['id'] > 0 && cot_auth('page', 'any', 'W')) { // Альтернативная проверка: если пользователь авторизован и имеет права на запись (но не администратор).
    Cot::$sys['pagesqueued'] = (int) Cot::$db->query('SELECT COUNT(*) FROM ' . Cot::$db->pages .
        ' WHERE page_state=1 AND page_ownerid = ' . Cot::$usr['id'])->fetchColumn(); // Подсчет количества страниц в очереди на модерацию, принадлежащих текущему пользователю.

	if (Cot::$sys['pagesqueued'] > 0) { // Если у пользователя есть страницы, ожидающие модерации.
        Cot::$out['notices_array'][] = array( // Добавление уведомления в интерфейс пользователя.
            cot_url('page', 'c=unvalidated'), // Ссылка на список необработанных страниц для данного пользователя.
            cot_declension(Cot::$sys['pagesqueued'], $Ls['unvalidated_pages']) // Формирование текста уведомления с правильным склонением.
        );
	}

    Cot::$sys['pagesindrafts'] = (int) Cot::$db->query('SELECT COUNT(*) FROM ' . Cot::$db->pages .
        " WHERE page_state=2 AND page_ownerid = " . Cot::$usr['id'])->fetchColumn(); // Подсчет количества черновиков, принадлежащих текущему пользователю.

    if (Cot::$sys['pagesindrafts'] > 0) { // Если у пользователя есть черновики.
        Cot::$out['notices_array'][] = array( // Добавление уведомления о черновиках.
            cot_url('page', 'c=saved_drafts'), // Ссылка на список черновиков для текущего пользователя.
            cot_declension(Cot::$sys['pagesindrafts'], $Ls['pages_in_drafts'])); // Формирование текста уведомления с правильным склонением.
    }
}

 

6 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Онлайн

Sodium Carbonate

Последняя авторизация: 19.07.2026 00:02

  • Страница размещена: 02.02.2025 18:28
  • Последнее обновление: 02.02.2025 18:28

Похожие страницы

Файл "page.admin.home.php" модуль "Page" в Cotonti
1 Описание файла "page.admin.home.php" в Cotonti CMF Файл "page.admin.home.php" является частью
Файл page.php в Cotonti
2 описание файла page.php в Cotonti CMF Основное назначение и место в системе Cotonti Файл page.php — это главный
Файл page.setup.php в Cotonti
3 Основное назначение файла и его место в системе Cotonti Файл page.setup.php является конфигурационным файлом модуля
Файл "page.extrafields.php" в Cotonti CMF
4 Файл "page.extrafields.php" в системе Cotonti CMF является частью модуля "page", и он отвечает за
Файл page.structure.php в Cotonti
5 файл page.structure.php является частью модуля "page" в системе Cotonti CMF, который взаимодействует с