自定义字段概述
您可以定义自己的字段类型(例如“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如何处理字段非常有用。。
如图表所示,基本上字段的工作是
- 将XML文件中的
<field>
属性作为输入,并且 - 生成与字段相关的HTML作为输出,以便将其包含在整个网页中。
为此,Form
代码调用2个函数
setup
- 此函数将与<field>
相关的XML元素以及字段的值和字段组(当它位于<fields>
元素内时)作为参数传递。通常,此函数的代码会将相关属性从XML元素提取到本地数据中。renderField
- 此函数预计将返回字段的HTML。
字段HTML包含3个部分
- 字段的标签
- 字段的输入元素
- 一个包含以上两者的
<div>
元素
为了获得这些部分,renderField
调用
- getLabel() - 获取标签的HTML,以及
- getInput() - 获取输入元素的HTML
然后使用布局作为包含的<div>
元素。从getLabel
和getInput
返回的HTML字符串作为变量传递到布局中,以便它们与最终的HTML一起适当地包含。
许多Joomla标准表单字段也使用布局作为HTML标签和输入元素,因此存储在setup()
函数中的本地数据作为$displayData
传递到布局,并且通过这种方式,HTML属性(如class
、description
等)会根据表单XML文件中的原始属性正确放置。