Создание своего модуля для Coffee CMS

Расширение функционала CMS
Ответить
serg
Администратор
Сообщения: 19
Зарегистрирован: 24 мар 2022, 12:50

Создание своего модуля для Coffee CMS

Сообщение serg »

Первым делом создайте файл test.mod.php в папке .cms/mod со следующим содержимым:

1. Начало test.mod.php

Код: Выделить всё

<?php

$cms["modules"]["test.mod.php"] = array(
    "name" => __( "Test", "test.mod.php" ),
    "description" => __( "Test module", "test.mod.php" ),
    "version" => "22.04",
    "files" => array(
        ".cms/mod/test.mod.php",
    ),
    "sort" => 100,
);
Все модули загружаются на этапе запуска CMS и весь код в них выполняется. Поэтому вы можете выполнить любую инициализацию модуля просто написав нужный вам код.

В данном случае создается массив, который описывает модуль и это описание выводится в панели администратора.

Следующим шагом добавим возможность отключения модуля из панели администратора:

2. Продолжение test.mod.php

Код: Выделить всё

// Return if module disabled
if ( ! empty( $cms["config"]["test.mod.php"]["disabled"] ) ) {

    return;

}
Теперь добавим модулю функциональность, зарегистрировав функцию test_func() на событие шаблонизации:

3. Продолжение test.mod.php

Код: Выделить всё

cms_add_function( "template", "test_func" );

function test_func() {
    global $cms;
    $cms["output"] .= "<p>Добавляем текст в конец страницы</p>";
}
Теперь, когда наступил этап оборачивания содержимого страницы в шаблон, мы вмешиваемся в него и добавляем свой текст на страницу.

Можно сказать что наш модуль готов и выполняет хоть какое-то действие.

Для того, чтобы писать более осмысленные модули, а так же узнать как вывести настройки в панели администратора, необходимо понять как работает вся CMS.


Алгоритм работы Coffee CMS

Генерация страницы в Coffee CMS происходит в несколько этапов:

query — обработка запроса к сайту (извлечение текста страницы из базы данных);

template — шаблонизация страницы (оборачивание текста страницы в шаблон);

echo — отправка страницы браузеру;

write — запись страницы на диск (кеширование).

Когда завершается выполнение очередного этапа, то происходит переключение на следующий.

Кроме того существую служебные этапы выполнения:

admin — модули создают свои страницы настроек, после чего они отображаются в админке;

api — взаимодействие админки и модулей (сохранение текста страниц и т.п.);

cron — выполнение периодических задач по расписанию.

Служебные этапы запускаются путем посещения определенного адреса на сайте. Админка открывается при посещении /-admin, /cronXXXX запустит все функции модулей, которые зарегистрировались на этап 'cron' для выполнения периодических задач, а передача текста страницы, когда вы нажимаете кнопку «Сохранить» происходит на адрес /apiXXXX.

XXXX генерируется на каждом сайте свой и защищает админку.

Каждый модуль может зарегистрировать свои функции на перечисленные этапы. Делается это путем вызова функции cms_add_function().

Код: Выделить всё

cms_add_function( "stage", "func_name", $nice );
  
// Примеры:
  
// по умолчанию очередность вызова равна 10 и не указывается

    cms_add_function( "template", "test_func" );
  
// уменьшаем $nice и тем самым вызываем раньше
  
    cms_add_function( "template", "test_func", 5 );
  
// увеличиваем $nice и тем самым вызываем позже
  
    cms_add_function( "template", "test_func", 15 );

function test_func() {
  global $cms;
  //...
}
Где первым параметром передается имя этапа, а вторым параметром имя функции, которая будет вызвана на этом этапе. Порядок выполнения функций на указанном этапе в общем-то не определен. Если вам важно, чтобы ваша функция выполнилась раньше остальных, то указывайте число меньшее 10. Если же хотите чтобы функция выполнилась последней, то указывайте число большее 10. Перед вызовом функций они сортируются в зависимости от уступчивости ($nice).

Всё это вы можете увидеть в исходном коде Coffe CMS. Ядро представляет собой файл .cms/index.php и состоит из 92 строк кода. Функции ядра вынесены в отдельный файл .cms/index.fn.php и занимают 600 строк кода. Всё что делает ядро - это вызывает функции, зарегистрированные на определенные этапы и переключает этапы в цикле. Т.е. ядро задает определенный стандарт, который должны соблюдать модули, а уже весь функционал задают именно они.

Вы можете взять самый маленький по размеру модуль - base.mod.php, состоящий всего из 184 строк кода и посмотреть как создать страницу настроек в админке и как запоминать и использовать настройки.

Возможно в будущем мы доработаем эту статью и более подробно рассмотрим алгоритмы работы модулей, но, как говорится, только работа дает ответы на все вопросы. Вам необходимо иметь базовое понимание, как работают сайты, как работает код PHP, из каких элементов состоят страницы и конечно же самому пробовать делать модули. Без самостоятельной работы ничего не получится. В остальном же, мы постарались сделать максимально простую CMS, чтобы сайты были быстрыми и надежными.
Ответить