Engine.Lite CMF

Engine.Lite CMF

Портфолио

Engine.Lite, — XML-based Content Management Framework, — представляет собой некий механизм, позволяющий создавать простые сайты (в том числе и многоязычные, количество языков не ограничено) с небольшим количеством динамики. В принципе, возможности можно наращивать посредством написания собственных модулей, но это потребует довольно больших трудозатрат. Растпростроняется по лицензии GPL.

Принцип работы

Все страницы оформленны в виде XML, если на странице используется какой-то модуль (например страница новостей), то файл модуля может делать все, что угодно (например доставать новости из базы данных), главное, чтобы он возвращал валидный XML. Итоговый XML-файл преобразуется XSL-шаблоном, установленным для всего сайта или для текущей страницы в частности.

В Lite-версии все настройки сайта и страниц храняться в двух INI-файлах, структура сайта в CFG-файле. База данных не используется.

На прототипе системы построены сайты:

  1. Творческая группа «Оранжево!»
  2. Валина.ру. Сайт поэтессы.
  3. Творческая группа «Высокий штиль»
  4. Сибирский музей игральных карт. Музей-магазин.
  5. СибСтройСервис. Стоительство, проектирование, обследование.
  6. Fashion Shop. Одна из крупнейших текстильных компаний.
  7. Лазерный тир. Призовой тир для бизнеса и развлечений.
  8. Интерактивный тир. Современный стрелковый аттрацион.

Todo-лист:

  1. Добавить возможность наращивания навигации посредством модулей. Нужно в случае, если раздел динамический и не имеет дочерних разделов, но при этом имеет свою навигацию (например, группировка новостей по дате и ее отражение в «хлебных крошках»)
  2. Присылайте свои идеи и предложения :-)

Подключение и использование

Для подключения Engine.Lite необходимо инициализировать объект подключенного класса и распечатать его, например так:

^use[/Engine/Engine.p]
$oSite[^Engine::init[]]
^oSite.print[]

В качестве входных параметров при инициализации могут быть переданы два параметра (без завершающего слэша):

  1. Путь к папке с данными (классы, модули, страницы), по-умолчанию «/../data».
  2. Путь к папке с конфигурационными файлами (config.ini, navigation.cfg, page.ini), по-умолчанию это вложенная папка «config» в папке с данными.
$oSite[^Engine::init[/../data;/../data/config]]

Доступны дополнительные параметры вывода страницы, включаемые переменной $form:mode:

Значение переменной $form:mode
force Принудительно игнорировать кэширование для страницы

Используется только внешне в примере

xml Пропустить XSL-трансформацию, вывести полученный XML документа

Конфигурационные файлы

config.ini

Основной конфигурационный файл.

iMultiLanguage Флаг, указывающий многоязычный ли сайт (1 — многоязычный, 0 — нет)
sDefaultLanguage Язык, используемый по-умолчанию
sTemplate Шаблон страницы (если не указан — используется «default»)
sDescription Стандартное описание для страниц
sKeywords Стандартные ключевые слова для страниц, разделенные запятыми
_Head

Дополнительные теги для <head />, например:

<link rel="shortcut icon" href="/favicon.ico" />
_Style

Путь к дополнительному файлу стилей для всех страниц. Если существует файл в папке с используемым шаблоном «s/default.css», то он будет загружен автоматически.

Если путь указан от корня, то он будет использован как есть, в противном случае будет файл будет браться из вложенной папки «/s/» в папке с используемым шаблоном.

_Script Путь к подключаемым скриптам по аналогии с предыдущим параметром.
_Module * Путь к подключаемому модулю и параметры в формате: Module.p?param1=value1&param2=value2

Если имя поля начинается с символа подчеркивания «_», значит можно указать несколько одноименных полей.

* В выходном XML-е страницы результат выполнения модуля будет представлен в виде XML-блока с именем файла без расширения (<Module>…</Module>), если указан параметр sBlockName, то эта строка будет использована в качестве имени тега, обрамляющего блок. Например: _Module = Module.p?sBlockName=Block — <Block />. Так же может быть передан параметр bEmptyBlock=true, в таком случае блок не будет отображен в выходном XML-е.

navigation.cfg

Файл представляет собой tab-разделенную таблицу с колонками:

id Уникальный ID раздела
parent_id ID родительского раздела (у корневых разделов — 0)
level Уровень вложенности (у корневых разделов — 1)
is_show_in_menu Учитывать ли при построении навигации
dir Папка (путь) раздела
title Заголовок (используется в навигации, для задания заголовков в теге <title /> используется page.ini)
is_fake Пустой раздел, фактически не существующий. Используется для группировки нескольких разделов в навигации (по-умолчанию — 0)

page.ini

Каждая секция — адрес страницы, например «/path/to/page/», при обработке строка запроса удаляется, таким образом нельзя назначить разные параметры для адресов: «/page/?param=1» и «/page/?param=2».

Параметры, доступные внутри каждой секции:
sTitle Заголовок страницы
sTemplate Шаблон страницы (если не указан — берется из основного конфига)
sDescription Описание страницы, (если не указано — берется из основного конфига)
sKeywords Ключевые слова, разделенные запятыми (если не указаны — берутся из основного конфига)
_Module Путь к подключаемому модулю и параметры в формате: «Module.p?param1=value1&param2=value2»
_Head Дополнительные теги для <head /> (см. config.ini)
_Style

Путь к дополнительному файлу стилей для страницы. Если существует файл в папке с используемым шаблоном «/s/default.css», то он будет загружен автоматически.

Если путь указан от корня, то он будет использован как есть, в противном случае будет файл будет браться из вложенной папки «/s/» в папке с используемым шаблоном.

_Script

Путь к подключаемым скриптам по аналогии с предыдущим параметром.

iCacheTime

Время кэширования в секундах

Используется только внешне в примере

Если имя поля начинается с символа подчеркивания «_», значит можно указать несколько одноименных полей.

Файловая система

Модули

Все модули должны быть в папке «/папка с данными/modules/» (путь к папке с данными указывается при инициализации системы).

В модуле должен быть объявлен метод @create, принимащий в качестве параметров обязательно хэш, например:

@create[hParams]
$hParams[^hash::create[$hParams]]

Если этот метод не определен, то весь модуль считается его определением, по аналогии с @main.

Если сайт многоязычный, то при выполнении модуля будет передан еще один дополнительный параметр — $hParams.sLanguage, содержащий в себе двухбуквенную аббревиатуру текущего языка сайта в нижнем регистре.

Системные требования