contao-community-alliance / events-create-options

为 Contao 开源 CMS 提供的 options_callback 事件和辅助工具

1.0.1 2018-06-06 15:40 UTC

This package is auto-updated.

Last update: 2024-09-06 08:50:43 UTC


README

提供通过事件传递 options_callback 的事件和辅助类。

在您的 DCA 中,使用工厂类 CreateOptionsEventCallbackFactory 定义 options_callback

use ContaoCommunityAlliance\Contao\Events\CreateOptions\CreateOptionsEventCallbackFactory;

$GLOBALS['TL_DCA']['tl_foo']['fields']['some_select'] = array(
	'inputType' => 'select',
	...
	'options_callback' => CreateOptionsEventCallbackFactory::createCallback('tl_foo.some_select.create-options'),
);

现在您可以通过监听名为 tl_foo.some_select.create-options 的事件来填充选项。

$GLOBALS['TL_EVENTS']['tl_foo.some_select.create-options'][] = function($event) {
	$options = $event->getOptions();

	$options['value1'] = 'label 1';
	$options['value2'] = 'label 2';
	$options['value3'] = 'label 3';
};

使用第二个事件监听器来操作选项相对简单。

$GLOBALS['TL_EVENTS']['tl_foo.some_select.create-options'][] = array(
	function($event) {
		$options = $event->getOptions();

		// remove a default value
		unset($options['value2']);

		// add a new value
		$options['value4'] = 'label 4';
	},
	-10 // we need a lower priority here, to make sure this listener is triggered after the default listener
);

有关如何监听事件的更多示例,请参阅事件调度器文档

自定义事件

默认情况下,使用类型为 ContaoCommunityAlliance\Contao\Events\CreateOptions\CreateOptionsEvent 的事件。如果您想使用自己的事件类型,可以将类或工厂方法作为第二个参数传递给 CreateOptionsEventCallbackFactory::createCallback()

首先,您需要编写自己的 create-options 事件类。

class MyCreateOptionsEvent extends \ContaoCommunityAlliance\Contao\Events\CreateOptions\CreateOptionsEvent
{
	protected $additionalData;

	function __construct($additionalData, \DataContainer $dataContainer, \ArrayObject $options = null)
	{
		parent::__construct($dataContainer, $options);
		$this->additionalData = $additionalData;
	}

	public function getAdditionalData()
	{
		return $this->additionalData;
	}
}

然后,您需要将您的工厂添加到 CreateOptionsEventCallbackFactory::createCallback()

use ContaoCommunityAlliance\Contao\Events\CreateOptions\CreateOptionsEventCallbackFactory;

$GLOBALS['TL_DCA']['tl_foo']['fields']['some_select'] = array(
	'inputType' => 'select',
	...
	'options_callback' => CreateOptionsEventCallbackFactory::createCallback(
		'tl_foo.some_select.create-options',
		function($dataContainer) {
			return new \MyCreateOptionsEvent(array('some' => 'value'), $dc);
		}
	),
);