netzmacht / contao-form-helper
1.0.8
2016-07-28 09:48 UTC
Requires
- php: >=5.3
- contao-community-alliance/dependency-container: ~1.0
- contao-community-alliance/event-dispatcher: ~1.0
- contao/core: >=3.1,<3.6-dev
- netzmacht/html: ~1.0
Requires (Dev)
This package is auto-updated.
Last update: 2020-04-06 10:38:14 UTC
README
此库为Contao前端表单组件提供扩展表单小部件渲染。默认情况下,由于行内HTML渲染,Contao表单小部件的渲染不太可定制,调整输出可能相当困难。
Contao Form Helper提供了一种完全向下兼容的事件驱动表单渲染。这意味着它支持Contao通常提供的HTML输出。此外,从扩展中提供的每个小部件都将无需任何自定义即可工作。
Contao Form Helper以两步渲染表单。首先,它创建代表HTML元素的对象,然后在传递给模板之前。使用事件驱动接口,可以简单地更改属性、提供额外功能等。
安装
要安装此扩展,只需使用Composer存储库安装netzmacht/contao-form-helper
。
变更日志
0.x版本和1.x版本之间的更改
- 将
Netzmacht\FormHelper
的命名空间更改为Netzmacht\Contao\FormHelper
- 使用创建的视图对象而不是返回元素数组
- 简化事件(不再有选择消息事件)
- 引入一个属性对象
- 放弃支持表单消息处理
工作原理
默认情况下,此扩展为与Contao一起提供的每个表单小部件启用扩展表单渲染。它们由定制的表单模板激活。
辅助程序为每个小部件创建一个视图对象。视图包含
- 用于包装
<div>
的属性 - 表单标签
- 包括元素和默认的额外提交按钮的容器
- 错误消息
- 使用用于渲染的布局
<?php // form_widget.html5 // shortcut Netzmacht\Contao\FormHelper\Helper::generate($this); // what actually happens $helper = Netzmacht\Contao\FormHelper\Helper::getInstance(); /** @var Netzmacht\Contao\FromHelper\View */ $view = $helper->createView($view); echo $view->render();
事件
事件由(Contao事件调度器)[https://github.com/contao-community-alliance/event-dispatcher]分发。每个事件名称都存储在Netzmacht\Contao\FormHelper\Event\Events
Events::CREATE_VIEW
首先触发以创建视图实例。此时元素不可用- 当创建给定小部件的HTML元素时,将触发
Events::CREATE_ELEMENT
- 在创建元素后,将触发
Events::PRE_GENERATE_VIEW
- 触发
Events::GENERATE_VIEW
以生成
自定义小部件
有两种方法可以操作输出。建议的方法是编写您自己的自定义事件
<?php // config.php $GLOBALS['TL_EVENTS'][Netzmacht\Contao\FormHelper\Event\Events::GENERATE_VIEW][] = function(Netzmacht\Contao\FormHelper\Event\ViewEvent $event) { // access Contao widget and form $form = $event->getFormModel(); $widget = $event->getWidget(); // adjust element $container = $event->getContainer(); $element = $container->getElement(); // adjust rows if($form->id == 9 && $widget->type == 'textarea') { $element->setAttribute('rows', 50); } }
您还可以使用模板调整渲染
<?php // form_widget.html5 $helper = Netzmacht\Contao\FormHelper\Helper::getInstance(); /** @var Netzmacht\Contao\FromHelper\View */ $view = $helper->createView($view); $errors = $view->getErrors(); // display all errors which belongs to an element $errors->setTemplateName('formhelper_error_all'); // wrapping element can be a string with %s placeholder or an Netzmacht\Html\Node object $wrapper = '<div class="form-element">%s</div>'; $container = $view->getContainer(); $container->add('wrapper', $wrapper, $container::POSITION_WRAPPER); echo $view->render();