Опции модуля
Опции модуля сохраняются в конфигурационных файла, размещаемых в директории modules/путь_модуля/config/, базовый конфигурационный файл называется config.php
Список конфигурационных файлов и типовых значений в settings.php
В файле settings.php, размещаемом в директории модуля, могут быть указаны список конфигурационных файлов, опций и их значений. Опции, указанные в файле settings.php, доступны при редактировании модуля на вкладке "Настройки модуля".
Файл содержит массив, ключом которого является название конфигурационного файла без расширения, например, 'config', а значением массив ключей-значений, например:
<?php defined('HOSTCMS') || exit('HostCMS: access denied.'); return array( 'config' => array( 'skin' => 'default', 'dateFormat' => 'd.m.Y', 'dateTimeFormat' => 'd.m.Y H:i:s', 'session' => array( 'driver' => 'database', 'class' => 'Core_Session_Database', 'subdomain' => TRUE, ), 'headers' => array( 'X-Content-Type-Options' => 'nosniff', 'X-XSS-Protection' => '1;mode=block', ), 'backendSessionLifetime' => 14400, ), 'load' => array( 'type' => 'csv', 'maxValue' => 100 ), 'cache' => array( 'foo' => 'bar', 'baz' => 'foo' ), );
Название опции берется из языкового файла модуля по схеме option_{НазваниеОпции}, для примера выше это будет option_recursive_properties и option_add_list_items.
Собственные опции модуля
Альтернативным путем задания опций является указание свойства protected $_options у модуля.
Разработчик модуля может создавать собственные опции, для этого в файле 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). Часто разработчикам модуля требуется указание собственных настроек, разделенных по сайтам.
С версии 7.0.7
Представляем пример создания и сохранения двух свойств для каждого сайта с версии 7.0.7, добавлен метод getConfig(), возвращающий значения конфига для сайта, исключен метод getOptions(). Значения сохраняются в конфигурационном файле, где индексом является идентификатор сайта, а значения сохранены в массиве:
// с версии 7.0.7 class Xxx_Module extends Core_Module { // ... protected $_options = array( 'property1' => array( 'type' => 'input', 'default' => 'значение по умолчанию' ), 'property2' => array( 'type' => 'list', 'default' => 'cookie', 'options' => array( 'cookie' => 'Cookie', 'url' => 'Пути', 'site' => 'Поддомены' ) ), ); /** * Get Module config * @param string $configName Default 'config' * @return array|mixed */ public function getConfig($configName = 'config') { $aConfig = Core_Config::instance()->get($this->_moduleName . '_config', array()); $aConfig = Core_Array::get($aConfig, CURRENT_SITE, $aConfig); return $aConfig; } /** * Set Module Options * @param array $aNewConfig * @return self * @hostcms-event Core_Module.onBeforeSetOptions */ public function setOptions($aNewConfig) { Core_Event::notify(get_class($this) . '.onBeforeSetOptions', $this, array($this->_options)); $aConfig = Core_Config::instance()->get($this->_moduleName . '_config', array()); foreach ($this->_options as $option => $arr) { $aConfig[CURRENT_SITE][$option] = Core_Array::get($aNewConfig, /*'option_' .*/ $option); } Core_Config::instance()->set($this->_moduleName . '_config', $aConfig); return $this; } }
До версии 7.0.7
Представляем пример создания и сохранения двух свойств для каждого сайта до версии 7.0.7:
// До версии 7.0.7
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; } }