Конфигурирование компонента (config)
При разработке компонента желательно все конфигурационные настройки хранить в одном месте. Для этого в файловой структуре компонента существует папка /config/. В стандартной реализации CMS.Component (от которого и наследуется компонент) есть метод config($name)
для считывания конфигурации компонента, с помощью которого можно организовать доступ к списку конфигурационных настроек в любом месте кода.
Что желательно выносить в конфиги:
- настройки, которые не требуется выносить в CMS.Vars;
- набор стандартных конфигов компонента fields, schema, table, tabs;
- настройки администратора сайта;
- любые другие настройки компонента.
Файл настройки представляет собой обычный php-файл, в котором необходимо вернуть ассоциативный массив.
/components/News/config/component.php return array( 'orm' => array( 'news' => 'Component.News.DB', ), 'admin_menu' => array( 'caption' => 'Компонент Новости', 'path' => '/admin/news/', ), );
Стандартные настройки необходимо размещать в специальных зарезервированных файлах:
- component.php
- services.php
- tabs.php
- fields.php
- schema.php
- table.php
Кроме стандартных настроек в файлах можно описывать любые необходимые настройки компонента.
component.php - отвечает за общие настройки компонента. Стандартные настройки:
- admin_menu - настройка вывода в админке (добавление пунктов меню). Кроме заголовка, ссылки, можно установить иконку напротив пункта меню (
icon
). Список подпунктов необходимо описывать в массиве свойстваitems
.
// components/Nodus/config.php return array( 'admin_menu' => array( 'caption' => 'Содержимое сайта', 'path' => CMS::admin_path('nodus/structure'), 'icon' => 'blogs.png', 'items' => array( 'Структура' => CMS::admin_path('nodus/structure'), 'Материалы' => CMS::admin_path('nodus/items'), 'Словари' => CMS::admin_path('nodus/taxonomy'), ), ), );
- commands - регистрация дополнительных методов, которые будут отрабатываться в определенный момент, и должны выполнять какие-то действия над объектом.
// components/Nodus/component.php return array( 'commands' => array( 'indexer' => array( 'name' => 'reindex', 'callback' => array('Component_Nodus', 'reindex'), ), 'sitemap' => array( 'name' => 'add_urls', 'callback' => array('Component_Nodus', 'add_urls_to_sitemap'), 'args' => array('nodus') ), ), );
- field_types - настройки для регистрации новых типов полей, если набор стандартных по каким-то причинам не удовлетворяет текущего спроса. Если новых типов больше одного, они перечисляются в массиве:
имя типа данных => имя класса
, описывающего новый тип данных.
// components/Nodus/config.php return array( 'field_types' => array( 'nodus_link_to_item' => 'Component.Nodus.Fields.ItemLink', 'nodus_taxonomy_tags' => 'Component.Nodus.Fields.TaxonomyTags.Type', ), );
- insertions - регистрация механизмов вставок.
// components/Nodus/config.php return array( 'insertions' => array( array( 'class' => 'Component.Nodus.App.Insertions', 'names' => array('TAXONOMY', 'CLOUD', 'ITEMLINK', 'ITEMURL', 'ITEMTITLE'), ), ), );
- templates - регистрация хелперов.
// components/Nodus/config.php return array( 'templates' => array( 'helpers' => array( 'nodus' => 'Component.Nodus.App.Helper', ), ), );
- events - регистрация событий.
// components/Nodus/config.php return array( 'events' => array( 'cms.run' => 'Component.Nodus::datatypes', ), // перехват админского метода нодуса on_row($row) для замены своим 'nodus.admin.items.on_row' => array( Component_Nodus::datatype('mydatatype'), 'on_row' ), );
- orm - регистрация orm-мапперов.
// components/Nodus/config.php return array( 'orm' => array( 'nodus_items' => 'Component.Nodus.App.DB.Items', 'nodus_structure' => 'Component.Nodus.App.DB.Structure', 'nodus_taxonomy' => 'Component.Nodus.App.DB.Taxonomy', ), );
- services - отвечает за регистрацию сервисов компонента.
// components/Nodus/service.php return array( 'datatype' => 'Component.Nodus.App.Services.Datatype', 'templates' => 'Component.Nodus.App.Services.Templates', 'selector' => 'Component.Nodus.App.Services.Selector', 'taxonomy' => 'Component.Nodus.App.Services.Taxonomy', 'urls' => 'Component.Nodus.App.Services.Urls', );
schema.php - содержит непосредственно описание схемы таблиц БД.
// components/Delivery/config/schema.php return array( 'subscribers' => array( 'mysql_engine' => 'MyISAM', 'columns' => array( 'id' => array('type' => 'serial'), 'email' => array('type' => 'varchar', 'length' => 255, 'default' => '', 'not null' => true), 'idate_off' => array('type' => 'int', 'default' => '0', 'not null' => true), ), 'indexes' => array( array('type' => 'primary key', 'columns' => array('id')), array('name' => 'idx_idate_confirm_off', 'columns' => array('idate_confirm', 'idate_off')), ), ), );
fields.php - файл, отвечающий за описание полей таблицы БД.
// components/Rates/config/fields.php return array( 'rates' => array( 'id' => array ( 'caption' => 'ID', 'type' => 'hidden', 'sqltype' => 'serial' ), 'code' => array( 'caption' => 'Код', 'sqltype' => 'VARCHAR(3)', ), 'value' => array( 'caption' => 'Значение', 'sqltype' => 'VARCHAR(50)', ), ), );
tabs.php - файл, отвечающий за описание вкладок на страницах редактирования в админке.
// components/NodusDicts/config/tabs.php return array( 'nodus_dicts' => array( 'main' => 'Параметры словаря', 'fields' => 'Поля', 'misc' => 'Прочее', ), );
table.php - в файл можно вынести список свойств админского контроллера Admin.php (orm_name, title_list, title_edit, title_add, norows, др.).
// components/Notes/config/table.php return array( 'notes' => array( 'title_list' => 'Тестовые записи', ), );