Схемы и их устройство¶
Что такое схема¶
Схема — это структура данных, основываясь на которой некая абстрактная сущность выполняет набор действий, заданных этой схемой. Например, exim (экспорт-импорт) не привязан к какой-либо сущности (продукты, страницы и т.п.) — все данные, которые он может экспортировать/импортировать описаны с помощью схемы.
Типы схем¶
Существует 3 типа схем. Типы нельзя смешивать между собой (например описывать данные и в этом же скрипте — функции)
Массив данных — схема возвращает массив. Например:
app/schemas/permissions/admin.php ---- <?php return array(...) ?>
XML-структура — схема является обычным текстовым файлом, содержимое которого считывается через
fn_get_contents
:app/schemas/menu/menu.xml ---- <menu> <items> .... </items> </menu>
Набор функций — в схеме описаны функции.
В большинстве случаев схема с функциями является дополнением схемы с массивом данных. Тогда такую схему нужно подключать через
include_once
в начале файла с данными, и отдельно вызывать ее не надо.В случае же, если такая схема является самостоятельной (например
actions
иvariants
уsettings
), то такую схему подключаем как обычно, напримерfn_get_schema("settings", "actions.functions")
:app/schemas/exim/products.functions.php ---- <?php function fn_exim_products() { ... } ?>
Расширение схем¶
C помощью модулей¶
Чтобы расширить схему с помощью модуля, нужно создать в каталоге модуля ту же структуру каталогов и файлов схемы, добавив к имени файла суффикс ”.post”. Например:
Основной файл
-------------
app/schemas/permissions/admin.php
Файл расширения
---------------
app/addons/seo/schemas/permissions/admin.post.php
При подключении схемы расширения в нее передается переменная $schema
, которая содержит данные, расширяемой схемой. Работать нужно с этой переменной и в конце скрипта вернуть ее. Например:
<?php
// в $schema уже есть данные, которые вернула родительская схема
$schema['news'] = array(
'modes' => array(
'manage' => array(
'permissions' => 'manage_news'
)
)
);
return $schema;
C помощью тегов редакции¶
Теги редакции нужны, чтобы сформировать нужные данные в схеме в зависимости от редакции (ULTIMATE
, MULTIVENDOR
). Чтобы расширить схему с помощью тега редакции, нужно создать в каталоге со схемой файл вида schema_[PRODUCT_EDITION]
. Например:
Основной файл
-------------
app/schemas/permissions/admin.php
Файл тега редакции
---------------
app/schemas/permissions/admin_ultimate.php
Сюда также передается переменная $schema
, которая содержит данные, расширяемой схемой. Работать нужно с этой переменной и в конце скрипта вернуть ее.
Получение схемы¶
Данные схемы получаются (или подключаются функции) с помощью функции fn_get_schema
:
function fn_get_schema($schema_dir, $name, $type = 'php', $force_addon_init = false)
- $schema_dir — подкаталог со схемой относительно каталога schemas, например
permissions
,settings
. - $name — имя файла со схемой, без расширения, например
admin
,schema
. Если тип схемы — функция, то имя пишется в таком виде:actions.functions
,variants.functions
. - $type — тип схемы (по сути расширение файла) — php или xml.
- $force_addon_init — указывает, что при подключении схемы нужно подключить так же отключенные аддоны и их файлы func.php.
На текущий момент кеширование реализовано для списка подключаемых файлов.