Пример файла 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/>' ;
}