netzmacht/contao-form-helper

此包已被废弃,不再维护。作者建议使用netzmacht/contao-form-designer包。

支持自定义Contao表单渲染的库

安装次数: 8,434

依赖项: 1

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

类型:contao-bundle

1.0.8 2016-07-28 09:48 UTC

README

Build Status Version License Downloads Contao Community Alliance coding standard

此库为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();