Опции модуля

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

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.