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

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

  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 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-05 09:19

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2025-02-02 18:28
  • Last update: 2025-02-02 18:28

Similar pages

Файл "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, который взаимодействует с