Опции модуля
Опции модуля сохраняются в конфигурационный файл, размещаемый в директории modules/путь_модуля/config/config.php
Разработчик модуля может создавать собственные опции, для этого в файле modules/путь_модуля/module.php указывается массив с опциями, например:
protected $_options = array( 'recursive_properties' => array( 'type' => 'checkbox', 'default' => TRUE ), 'add_list_items' => array( 'type' => 'checkbox', 'default' => TRUE ) );
Название опции берется из языкового файла модуля по схеме option_{НазваниеОпции}, для примера выше это будет option_recursive_properties и option_add_list_items, при динамическом создании опции название опции можно передавать в элементе 'caption'.
Значение свойства автоматически извлекается из соответствующего значения в конфигурационном файле, для динамически создаваемых свойств значение передается в элементе 'value'.
Доступные типы опций: int(integer), string, input, password, textarea, float, checkbox, list, separator, code, color
Динамическое формирование опций
Опции модуля загружаются методом getOptions() и устанавливаются методом setOptions($data). Часто разработчикам модуля требуется указание собственных настроек, разделенных по сайтам. Представляем пример создания и сохранения двух свойств для каждого сайта:
class Xxx_Module extends Core_Module { // ... /** * Get Module Options * @return array * @hostcms-event Module_Xxx.onBeforeGetOptions */ public function getOptions() { Core_Event::notify(get_class($this) . '.onBeforeGetOptions', $this, array($this->_options)); $aConfig = Core_Config::instance()->get($this->_moduleName . '_config', array()); $aSites = Core_Entity::factory('Site')->findAll(); foreach ($aSites as $oSite) { $this->_options['site' . $oSite->id . '_property1'] = array( 'type' => 'input', 'caption' => 'Поле1 сайта ' . $oSite->name, 'value' => isset($aConfig[$oSite->id]) ? Core_Array::get($aConfig[$oSite->id], 'property1') : NULL ); $this->_options['site' . $oSite->id . '_property2'] = array( 'type' => 'checkbox', 'default' => FALSE, 'caption' => 'Поле2 сайта ' . $oSite->name, 'value' => isset($aConfig[$oSite->id]) ? Core_Array::get($aConfig[$oSite->id], 'property2') : NULL ); } return $this->_options; } /** * Set Module Options * @return array * @hostcms-event Module_Xxx.onBeforeSetOptions */ public function setOptions($data) { Core_Event::notify(get_class($this) . '.onBeforeSetOptions', $this, array($this->_options)); //$aModule_Options = $this->getOptions(); $aConfig = Core_Config::instance()->get($this->_moduleName . '_config', array()); $aSites = Core_Entity::factory('Site')->findAll(); // Внимание, имена полей имеют префикс 'option_' foreach ($aSites as $oSite) { // Текстовое поле $aConfig[$oSite->id]['property1'] = Core_Array::get($data, 'option_' . 'site' . $oSite->id . '_property1'); // Checkbox $aConfig[$oSite->id]['property2'] = Core_Array::get($data, 'option_' . 'site' . $oSite->id . '_property2') == 1; } Core_Config::instance()->set($this->_moduleName . '_config', $aConfig); return $this; } }