Extra fields - что это и как пользоваться Extra fields - что это и как пользоваться

Система экстраполей для объектов

Система экстраполей - это вещь, которой не было в 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, выборка по индексному полю и занесение полей в массив. В дальнейшем работа идет уже с этим массивом. Так что система экстраполей потенциально не оказывает значимой дополнительной нагрузки на движок.

1. psyvek  07.04.2009 07:35
А как в "порядке сортировки" сделать чтобы сортировалось по добавленному полю?
2. Boss  07.08.2009 12:46
$variants - список предлагаемых вариантов для выбора, если $type=="select". Для других полей игнорируется.
В каком виде? Лучше тоже пример.

В дальнейшем при выводе страницы в самом начале процесса идет одно обращение к sed_extra_fields, выборка по индексному полю и занесение полей в массив. В дальнейшем работа идет уже с этим массивом. Так что система экстраполей потенциально не оказывает значимой дополнительной нагрузки на движок.
откуда выборка по индексному полю и занесение каких полей в массив? Из sed_extra_fields? А зачем нам вообще обращаться в этой таблице при выводе страницы?
Додавання комментарів доступно лише зареєстрованим користувачам