Опции модуля
Опции модуля сохраняются в конфигурационных файла, размещаемых в директории 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, xsl
Динамическое формирование опций
Опции модуля загружаются методом 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; } }