Опции модуля

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

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