Описание API

Как работает движок.

  1. Инициализируется класс настроек (при последующих обращениях берется из кэша)
  2. Разбирается URL для определения основной его части и параметров.
  3. Инициализируется класс LabCMS, который инициализирует класс User (отвечающий за данные пользователя) и, при необходимости, класс Db (отвечающий за работу с БД).
  4. Класс LabCMS определяет список подключаемых модулей и начинает их подключать в определенном порядке.
  5. Каждый модуль выполняется в глобальной области видимости, что позволяет легко делать модули на основании существующих скриптов.
  6. На основании данных предоставленных модулем, выбирается и обрабатывается шаблон для отображения результата работы модуля.
  7. После выполнения всех модулей (или раньше, если есть такая необходимость), результат обработки шаблонов модулей собирается в общий "сборочный" шаблон и отдается клиенту.

Классы LabCMS, User, Db, Tpl выполнени на основе паттерна singletone, что позволяет не заботиться об области их видимости и не создавать их экземлпяры в тех случаях, когда они не нужны.

Для обращения к свойствам или методам классов использующих паттерн singltone используется следующий код:

PHP

ClassName::instanse()->methodName();

или более короткий вариант

PHP

ClassName::i()->methodName();

В этом случае происходит обращение к экземпляру класса в том случае если он уже создан, или его создание в случае если он пока создан не был.

Автолоад

Общие для системы классы хранятся в каталоге /kernel/classes. Для именования классов используются соглашения по именования PEAR. Где символ подчеркивания показывает иерархию подкаталогов внутри каталога с классами. То есть файл класса My_Class_Name будет находиться в файле /kernel/classes/My/Class/Name.php

Для сторонних классов не придерживающихся этих соглашений, по возможности, пишутся обертки.

что передается модулям

Непосредственно перед вызовом модуля определяются массивы $config и LabConfig::$mcfg, в которых содержатся настройки текущего модуля. Массив $config является устаревшим и оставлен для обратной совместимости.

что получается от модулей

Для корректного отображения данных, модуль должен передать в класс шаблонизатора набор данных дле рендеринга и указать название используемого шаблона. Сделать это можно либо определив значения переменной $mod_template (устаревший вариант), или воспользовавшись методом setModuleTemplate('templateName.tpl') класса LabCMS.

Как прервать выполнение

Иногда бывает необходимо отменить исполнение всех модулей следующих за текущим (например, в случае аякс запросов). Для этого предназначен ключ LabVars::$break. Если его значение установить в true, то все модули следующие после того, в котором этот ключ установлен, исполняться не будут. В принципе, ничего не мешает сделать просто exit();, но в этом случае не сработает кэширование и не будет инициализирован шаблонизатор (собственно, в случае аякс запросов это не всегда и нужно).

пример config.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<module>
  <name>название</name>
  <describe>описание</describe>
  <version>версия</version>
  <component>1</component>    <!-- модуль является компонентом -->
  <static>1</static>        <!-- модуль является статичным -->
  <system>1</system>        <!-- модуль является системным -->
  <depends>зависимость</depends> <!-- тут указывается название модуля, от наличия которого
зависит данный модуль. Например, модуль "топ новостей" зависит от наличия модуля "новости" -->

  <access>            <!-- права -->
    <permis>
      <name>право</name>
      <type>boolean</type>  <!-- для настройки прав, тип всегда boolean -->
      <title>заголовок</title>
      <describe>Описание</describe>
    </permis>
    <!-- повторить блок permis необходимое количество раз -->
  </access>
  <configs>      <!-- настройки -->
    <config>
      <name>имя</name>
      <type>string/integer/boolean/select/select_multiple</type>  <!-- должен быть указан
один из вариантов -->

      <title>заголовок</title>
      <describe>Описание</describe>
      <default>значение по умолчанию</default>
      <callback>функциия обратного вызова</callback>
      <values>
        <value>список</value>
        <value>возможных</value>
        <value>значений</value>
      </values>
    </config>
  </configs>
</module>
 
 

Неиспользуемые элементы могут быть опущены.

Что представляет собой модуль

Каждый модуль представляет собой отдельный подкаталог в каталоге kernel/modules.
Минимально модуль состоит из двух файлов:
index.php - является главным исполняемым файлом модуля. Именно он подключается при вызове модуля движком.
config.xml - в этом файле собраны данные о модуле: название, описание, тип, зависимости, а так же возможные настройки и права.

Если для работы модуля необходимо создать в БД какие-то таблицы, то создаются еще два файла:
install.sql - sql дамп, который исполняется при установке модуля.
uninstall.sql - соответственно, sql дамп, который исполняется при удалении модуля.
При переустановке модуля последовательно выполняются сначала uninstall.sql, затем install.sql

Так же модуль может содержать дополнительные файлы, вызываемые другими модулями. Они именуются следующим образом: mod_modulename.inc, где modulename - имя вызывающего модуля. Сейчас такую возможность используют два модуля - модуль поиска (search) и модуль построения карты сайта (sitemap).

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

Шаблоны модуля указываются с расширением и без путей. Текущим каталогом для подключения шаблона считается /skins/current_skin/module_name, где current_skin - название текущего скина, а module_name - название каталога текущего модуля. В случае если в данном каталоге шаблон обнаружен не будет, то будет произведена попытка подключить указанный шаблон по адресу /skins/default/module_name. Если же он отсутствует и там - будет вызвано исключение.

Шаблоны пишутся с использованием синтаксиса Smarty

Описание классов

 

Всего комментариев: 0

Имя*:

Email: