contao-community-alliance / events-create-options
为 Contao 开源 CMS 提供的 options_callback 事件和辅助工具
1.0.1
2018-06-06 15:40 UTC
Requires
- php: ^5.6 || ^7.0
- contao-community-alliance/composer-plugin: ^2.0
- contao-community-alliance/event-dispatcher: ^1.0
- contao/core: ^3.5.5
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); } ), );