Файл page.header.php в Cotonti
Он формирует массив уведомлений о новых страницах, ожидающих модерации, и черновиках, находящихся в работе.
описание файла 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— массив для формирования данных, которые будут выведены на странице.
Функции и методы:
-
cot_auth($area, $option, $right)
Проверяет, имеет ли пользователь права на выполнение определённых действий в указанной области (например, модуле страниц). -
cot_incfile($module, $type)
Подключает файл модуля для использования его функциональности. -
cot_url($target, $params)
Генерирует URL для перехода на нужные страницы сайта с заданными параметрами. -
cot_declension($number, $titles)
Возвращает корректную форму слова в зависимости от числа (например, "1 черновик", "2 черновика", "5 черновиков"). -
query()(метод объекта базы данных)
Выполняет SQL-запрос. -
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-запросы выполняются с использованием встроенных методов для работы с БД.
- Используется объектно-ориентированный подход (OOP) с глобальными статическими объектами (
-
Совместимость с PHP:
- Код совместим с версиями PHP 5.4 и выше, так как использует стандартные функции Cotonti и базовые возможности PHP (например, пространство имён
Cot::). - Рекомендуемая версия — PHP 7.4+ для лучшей производительности и безопасности.
- Нет использования функций, специфичных для новых версий PHP 8.x, что делает код кросс-версией.
- Код совместим с версиями PHP 5.4 и выше, так как использует стандартные функции Cotonti и базовые возможности PHP (например, пространство имён
Заключение
Файл 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'])); // Формирование текста уведомления с правильным склонением.
}
}
Комментарии (0)
Автор контента
Онлайн
Sodium Carbonate
Последняя авторизация: 19.07.2026 00:02
- Страница размещена: 02.02.2025 18:28
- Последнее обновление: 02.02.2025 18:28