Система экстраполей - это вещь, которой не было в Seditio, она появилась только в Cotonti. Она позволяет очень гибко изменять структуру сайта
Система экстраполей позволяет задать для каждого объекта движка (страницы, юзеры, топики форума и т.п.) набор дополнительных свойств, а так же задавать для каждого из таких свойств способ отображения в HTML.
Что такое "объект движка"? Строго говоря, это mysql-таблица (sed_pages для страниц, sed_users для пользователей и т.д.). Конечно, не для каждого объекта нужно иметь экстраполя (например, sed_config или sed_core в этом не нуждаются), но теоретически такая возможность есть, возможно появление модулей, которые будут способны очень сильно поменять функционал движка.
Сейчас поддержка дополнительных полей добавлена для страниц (pages) и пользователея (users). Ссылки на добавление/редактирование полей смотрите в админке.
Допустим, вы делаете mp3-каталог. Если вы создаете экстраполе для страниц release_data, в котором будет содержаться, например, год выхода альбома, то можете использовать следующие тэги в езд файлах :
В page.*.tpl: {PAGE_RELEASE_DATA} - выводит содержимое поля
В page.add.*.tpl: {PAGEADD_FORM_RELEASE_DATA} - выводит input для добавления поля
В page.edit.*.tpl: {PAGEEDIT_FORM_RELEASE_DATA} - выводит input для редактирования поля
В list.*.tpl: {LIST_ROW_RELEASE_DATA} - выводит содержимое поля в ROW-зоне list, {LIST_TOP_RELEASE_DATA} - блок указания сортировки по полю release_data
Соответственно и для юзеров, если вы делаете поле jabber, то становятся доступными следующие тэги:
В users.profile.tpl: {USERS_PROFILE_JABBER}
В users.edit.tpl: {USERS_EDIT_JABBER}
В users.details.tpl: {USERS_DETAILS_JABBER}
По дефолту в базу дополнтельных полей добавлены существовавшие в Seditio экстраполя extra1 - extra5 для страниц и extra1 - extra9 для юзеров.
#1. API
Но самое интересное - это возможность добавлять экстраполя без участия юзера. Это позволяет писать довольно сложные плагины и модули, задающие свою контентную структуру и потом с ней работающие (например, магазин)
Итак, функции:
sed_extrafield_add($sql_table, $name, $type, $html, $variants="", $description="");
sed_extrafield_update($sql_table, $oldname, $name, $type, $html, $variants="", $description="");
sed_extrafield_remove($sql_table, $name);
функции возвращают true если операция закончилась успешно и false если нет.
$sql_table - это sql-таблица, над которой проводится операция, без префикса sed_
$name - название поля
$type - тип содержимого поля. Возможные значения:
- input - строка
- textarea - текст
- select - селектор выбора значений из списка предложенных
- checkbox - on|off чекбокс
$html - HTML-элемент, при помощи которого осуществляется редактирование поля. без параметра name= , он подставляется автоматом.
$variants - список предлагаемых вариантов для выбора, если $type=="select". Для других полей игнорируется.
$description - описание. только для админа, чтобы не забыть о назначении поля.
Пример добавления поля release_data для страниц:
$result = sed_extrafield_add('pages', 'release_data', 'input', '<input class="text" type="text" maxlength="255" size="56" />', '', 'this is data of album release');
Давайте посмотрим, что произойдет при вызове этой функции.
Сначала проверяются таблицы sed_extra_fields (там хранятся данные об экстраполях в системе) и sed_pages - не существует ли поля с таким же именем.
Затем в sed_extra_fields добавляется новая строка с нашими данными, а в sed_pages создается столбец с именем "page_$name" и типом, который подходит под хранение заданного типа данных.
В дальнейшем при выводе страницы в самом начале процесса идет одно обращение к sed_extra_fields, выборка по индексному полю и занесение полей в массив. В дальнейшем работа идет уже с этим массивом. Так что система экстраполей потенциально не оказывает значимой дополнительной нагрузки на движок.
Thanked: 2 times
откуда выборка по индексному полю и занесение каких полей в массив? Из sed_extra_fields? А зачем нам вообще обращаться в этой таблице при выводе страницы?