Пример файла addon.xml (схема 2.0) c комментариями¶
Содержание
Совместим с CS-Cart: 2.x — ...
Схема модуля¶
Полная схема модуля с комментариями.
<?xml version="1.0"?>
<!--
Описание схемы аддона версии 2.0
Все параметры не отмеченные как необязательные должны быть определены в схеме.
@edition_type - Необязательный аттрибут доступный для любого элемента связанного с настройками. Определяет редакции в которых доступна та или иная настройка. Берётся либо значение текущего, либо от родителя, либо если вообще ничего нет, то будет определён как ROOT
-->
<addon scheme="2.0" edition_type="ROOT,ULT:VENDOR">
<!-- Идентификатор аддона, должен быть равен имени каталога, в котором лежит аддон -->
<id>sample_addon_2_0</id>
<!-- Версия аддона -->
<version>1.0</version>
<!-- Родной язык аддона (по умолчанию). Необязательный параметр, если не указан, то язык будет распознаваться как английский (EN). -->
<default_language>en</default_language>
<!-- Имя аддона на языке по умолчанию -->
<name>2.0 scheme addon sample</name>
<!-- Описание аддона на языке по умолчинию -->
<description>This is description of addon v2.0</description>
<!-- Приоритет аддона. Чем выше, тем тот позже подключается -->
<priority>100</priority>
<!-- Статус который будет высатвлен после установки аддона (active/disabled). По умолчанию disabled. -->
<status>active</status>
<!-- Определяет в каких редакциях аддон будет при установке автоматически отмечен в списке -->
<auto_install>MULTIVENDOR,ULTIMATE</auto_install>
<!-- Блок для описания совместимостей с другими аддонами -->
<compatibility>
<!-- Зависимости. Эти аддоны должны быть установлены, чтобы установить текущий аддон, в противном случае будет выведено сообщение об ошибке. -->
<dependencies>discussion,form_builder</dependencies>
<!-- Конфликты. Эти аддоны будут автоматически выключены перед установкой данного и будет выведено сообщение об этом -->
<conflicts>catalog_mode,reward_points</conflicts>
</compatibility>
<!-- Переводы на языки отличные от языка по умолчанию -->
<translations>
<!--
@for - указывает на свойство, которому предназначен перевод. Возможные варианты: name/description/tooltip. Необязательный. По умолчанию name.
@lang - код языка для которого этот перевод. Если языка с таким кодом в магазине нет, то перевод не установится.
-->
<item for="name" lang="ru">Пример аддона версии 2.0</item>
<item for="description" lang="ru">Описание для аддона версии 2.0</item>
</translations>
<!-- Блок настроек аддона. Необязательный.
@layout - Место где будет открываться страница с настройками (popup/separate). Необязательный аттрибут. По умолчанию popup.
-->
<settings layout="separate" edition_type="ROOT,ULT:VENDOR">
<!-- Список табов на странице настроек адона. -->
<sections>
<!-- Таб для настроек.
@id - текстовый итдентификатор. В дальнейшем к этой настройке можно будет обращаться через Registry::get('addons.[addon_id].[setting_id]')
@edition_type - список редакций в которых данный таб будет доступен. Необязательный.
-->
<section id="section1">
<!-- Имя таба на языке по умолчанию -->
<name>Generic settings</name>
<translations>
<item lang="ru">Общие настройки</item>
</translations>
<!-- Список настроек в табе -->
<items>
<!-- Настройки аддона
@id - идентификатор настройки.
@edition_type - список редакций в которых данная настройка будет доступна. Необязательный.
-->
<item id="header">
<!-- Тип элемента:
input, textarea, password, checkbox, selectbox, multiple select,
multiple checkboxes, countries list, states list,
file, info, header, template
-->
<type>header</type>
<!-- Имя настройки на языке по умолчанию -->
<name>Header</name>
<!-- Переводы настройки -->
<translations>
<item lang="ru">Заголовок</item>
</translations>
<variants/>
</item>
<item id="input">
<type>input</type>
<name>Input</name>
<!-- Всплывающая подсказка -->
<tooltip>Tooltip</tooltip>
<translations>
<item lang="ru">Полее для ввода</item>
<!-- Для подсказок тоже возможно задание переводов -->
<item lang="ru" for="tooltip">Подсказка</item>
</translations>
<variants/>
</item>
<item id="password">
<type>password</type>
<name>Password input</name>
<translations>
<item lang="ru">Поле для ввода пароля</item>
</translations>
<variants/>
</item>
<item id="checkbox">
<type>checkbox</type>
<name>Checkbox</name>
<translations>
<item lang="ru">Флажок</item>
</translations>
<variants/>
</item>
<item id="textarea">
<type>textarea</type>
<name>Textarea</name>
<!-- Значение по умолчанию, для списков должен быть равен id варианта -->
<default_value>Sample textarea text</default_value>
<translations>
<item lang="ru">Текстовое поле</item>
</translations>
<variants/>
</item>
<item id="radiogroup">
<type>radiogroup</type>
<name>Radio group box</name>
<tooltip>Tooltip</tooltip>
<default_value>radio_2</default_value>
<!-- Варианты - для типов selectbox, multiple select,
multiple checkboxes, combo select -->
<variants>
<!-- @id - идентификатор варианта-->
<item id="radio_1">
<!-- Имя варианта-->
<name>Radio button 1</name>
<!-- Переводы варианта, то же самое что и для названия аддона,
только параметр for не используется -->
<translations>
<item lang="ru">Радио кнопка 1</item>
</translations>
</item>
<item id="radio_2">
<name>Radio button 2</name>
<translations>
<item lang="ru">Радио кнопка 2</item>
</translations>
</item>
</variants>
<translations>
<item lang="ru">Секция с радиокнопками</item>
<item lang="ru" for="tooltip">Подсказка</item>
</translations>
</item>
<item id="file">
<type>file</type>
<name>File select</name>
<translations>
<item lang="ru">Выбор файла</item>
</translations>
<variants/>
</item>
</items>
</section>
<section id="section2">
<name>Selects</name>
<translations>
<item lang="ru">Списки</item>
</translations>
<items>
<item id="selectbox">
<type>selectbox</type>
<name>Selectbox</name>
<variants>
<item id="select_box_1">
<name>Select box item 1</name>
<translations>
<item lang="ru">Элемент выпадающего списка 1</item>
</translations>
</item>
<item id="select_box_2">
<name>Select box item 2</name>
<translations>
<item lang="ru">Элемент выпадающего списка 2</item>
</translations>
</item>
</variants>
<translations>
<item lang="ru">Выпадающий список</item>
</translations>
</item>
<item id="countries_list">
<type>countries list</type>
<name>Countries list</name>
<translations>
<item lang="ru">Список стран</item>
</translations>
<variants/>
</item>
<item id="states_list">
<type>states list</type>
<name>States list</name>
<translations>
<item lang="ru">Список штатов</item>
</translations>
<variants/>
</item>
<item id="multiple_select">
<type>multiple select</type>
<name>Multiple select</name>
<translations>
<item lang="ru">Множественный выбор</item>
</translations>
<variants>
<item id="select_box_1">
<name>Select box item 1</name>
<translations>
<item lang="ru">Элемент выпадающего списка 1</item>
</translations>
</item>
<item id="select_box_2">
<name>Select box item 2</name>
<translations>
<item lang="ru">Элемент выпадающего списка 2</item>
</translations>
</item>
<item id="select_box_3">
<name>Select box item 3</name>
<translations>
<item lang="ru">Элемент выпадающего списка 3</item>
</translations>
</item>
</variants>
</item>
<item id="multiple_checkboxes">
<type>multiple checkboxes</type>
<name>Multiple select check boxes</name>
<translations>
<item lang="ru">Множественный выбор флажков</item>
</translations>
<variants>
<item id="select_box_1">
<name>Select box item 1</name>
<translations>
<item lang="ru">Элемент выпадающего списка 1</item>
</translations>
</item>
<item id="select_box_2">
<name>Select box item 2</name>
<translations>
<item lang="ru">Элемент выпадающего списка 2</item>
</translations>
</item>
<item id="select_box_3">
<name>Select box item 3</name>
<translations>
<item lang="ru">Элемент выпадающего списка 3</item>
</translations>
</item>
</variants>
<default_value>select_box_2</default_value>
</item>
</items>
</section>
<section id="section3">
<name>Additional settings</name>
<translations>
<item lang="ru">Особые настройки</item>
</translations>
<items>
<item id="selectable_box">
<name>Selectable box</name>
<!-- Варианты данной настроки будут браться из функции fn_settings_variants_[addon_id]_[setting_id]-->
<type>selectable_box</type>
<default_value><![CDATA[#M#product_code=Y&product=Y&amount=Y&price=Y]]></default_value>
<translations>
<item lang="ru">Секция с вариантами</item>
</translations>
<variants/>
</item>
<!-- В данном случае будет выводиться информация возвращаемая функцией handler -->
<item id="info">
<name>Info url</name>
<type>info</type>
<handler>fn_sample_addon_2_0_info</handler>
<variants/>
<translations>
<item lang="ru">Информационный url</item>
</translations>
</item>
<!-- Вид настройки типа шаблон. В данном случае подключается пользовательский шаблон из папки themes/THEME_NAME/addons/ADDON_NAME/setings/TEMPLATE_NAME
Имя шаблона храниться в default_value-->
<item id="template">
<type>template</type>
<default_value>sample.tpl</default_value>
<variants/>
<translations>
<item lang="ru">Info url</item>
</translations>
</item>
<!-- Скрытая настройка. Существует в базе данных и в Registry, но не выводится пользователю. -->
<item id="hidden">
<type>hidden</type>
<default_value>Some hidden setting value</default_value>
</item>
</items>
</section>
</sections>
</settings>
<!-- Добавляет языковые перменные -->
<language_variables>
<!--
@id - имя языковаой переменной,
@lang - язык для которого она будет добавлена-->
<item lang="en" id="test_xml_2.0_1">First language variable</item>
<item lang="en" id="test_xml_2.0_2">Second language variable</item>
<item lang="en" id="sample_addon_handler">Sample addon handler</item>
<item lang="ru" id="test_xml_2.0_1">Первая языковая переменная</item>
<item lang="ru" id="test_xml_2.0_2">Вторая языковая переменная</item>
<item lang="ru" id="sample_addon_handler">Пример обработчика модуля</item>
</language_variables>
<!-- Дополнительные запросы к базе данных-->
<queries>
<!-- Если параметр for="install" или его вообще нет - запрос выполняется во время установки аддона-->
<item for="install">
CREATE TABLE `?:addon_test_123456789` (
`queue_id` mediumint NOT NULL auto_increment,
PRIMARY KEY (`queue_id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8
</item>
<!-- Если задан атрибут editions, то запрос будет выполнен только для тех редакций которые указаны в нём через запятую -->
<item for="install" editions="ULTIMATE,MULTIVENDOR">
ALTER TABLE `?:addon_test_123456789` ADD company_id INT NOT NULL DEFAULT 0;
</item>
<!-- Если параметр for="uninstall", запрос выполняется во время удаления аддона-->
<item for="uninstall">DROP TABLE IF EXISTS `?:addon_test_123456789`</item>
</queries>
<!-- Пользовательские функции вызывающиеся при наступлении определённых событий
before_install - перед установкой аддона.
install - после установки аддона, его шаблонов, настроек, лангвар, но перед его активацией и очисткой кеша
uninstall - перед деинсталяцией
-->
<functions>
<item for="install">fn_google_export_add_features</item>
<item for="install">fn_google_export_add_feed</item>
<item for="uninstall">fn_google_export_remove_features</item>
<item for="uninstall">fn_google_export_remove_feed</item>
</functions>
</addon>
Функции для настроек¶
Вы можете использовать функции, чтобы получить варианты настроек, если это необходимо.
<?php
if (!defined('BOOTSTRAP')) { die('Access denied'); }
// Функция получит варианты для настройки <item id="selectable_box">
function fn_settings_variants_addons_sample_addon_2_0_selectable_box()
{
$schema = array(
'fields' => array(
'product_id' => array('title' => __('product_id'), 'sort_by' => ''),
'product' => array('title' => __('product_name'), 'sort_by' => 'product'),
'min_qty' => array('title' => __('min_order_qty'), 'sort_by' => ''),
'max_qty' => array('title' => __('max_order_qty'), 'sort_by' => ''),
'product_code' => array('title' => __('sku'), 'sort_by' => 'code'),
'amount' => array('title' => __('quantity'), 'sort_by' => 'amount'),
'price' => array('title' => __('price'), 'sort_by' => 'price'),
'weight' => array('title' => __('weight'), 'sort_by' => 'weight'),
'image' => array('title' => __('image'), 'sort_by' => ''),
),
);
$result = array();
if (!empty($schema['fields'])) {
foreach ($schema['fields'] as $field_id => $field) {
$result[$field_id] = $field['title'];
}
}
return $result;
}
// Функция для настройки <item id="info">
function fn_sample_addon_2_0_info()
{
$text = __('sample_addon_handler') . '<hr/>' . __('test_xml_2.0_1') . '<br />' . __('test_xml_2.0_2');
return $text . '<hr/>' ;
}