跳至主要内容
版本:5.1

自定义字段概述

您可以定义自己的字段类型(例如“mycustom”),然后可以在表单定义XML文件中引用它。

<field type="mycustom"  />

为此,您应该扩展\Joomla\CMS\Form\FormField,它位于libraries/src/Form/Formfield.php中,或者您可以扩展一个标准表单字段类型,它扩展了FormField

当您定义自定义表单时,您还需要在表单XML文件中包含一个addfieldprefix属性,以告诉Joomla在哪里查找字段定义。例如,如果您有

namespace Mycompany\Component\Example\Administrator\Field;
class MycustomField extends FormField {
protected $type = 'Mycustom';
// including the above is still common practice, but not now necessary with namespaced classes

那么您应该有

<field addfieldprefix ="Mycompany\Component\Example\Administrator\Field" type="mycustom"  />

您可以在<field>级别或包含<field>标签的标签内包含addfieldprefix属性。

Joomla字段设计概述

在深入探讨如何编写自定义字段类的细节之前,了解Joomla如何处理字段非常有用。Joomla表单字段

如图表所示,基本上字段的工作是

  • 将XML文件中的<field>属性作为输入,并且
  • 生成与字段相关的HTML作为输出,以便将其包含在整个网页中。

为此,Form代码调用2个函数

  • setup - 此函数将与<field>相关的XML元素以及字段的值和字段组(当它位于<fields>元素内时)作为参数传递。通常,此函数的代码会将相关属性从XML元素提取到本地数据中。
  • renderField - 此函数预计将返回字段的HTML。

字段HTML包含3个部分

  1. 字段的标签
  2. 字段的输入元素
  3. 一个包含以上两者的<div>元素

为了获得这些部分,renderField调用

  • getLabel() - 获取标签的HTML,以及
  • getInput() - 获取输入元素的HTML

然后使用布局作为包含的<div>元素。从getLabelgetInput返回的HTML字符串作为变量传递到布局中,以便它们与最终的HTML一起适当地包含。

许多Joomla标准表单字段也使用布局作为HTML标签和输入元素,因此存储在setup()函数中的本地数据作为$displayData传递到布局,并且通过这种方式,HTML属性(如classdescription等)会根据表单XML文件中的原始属性正确放置。