JForm类的设计意图是通过xml文件来产生表单,并且这个xml文件中可以指定字段的类型,支持自定义类型和系统类型,支持表单的校验功能。要知道,这对joomla开发者来说,真的能够省掉很多不必要的时间。这篇文章的目的是弄明白如何使用JFroms去定义表单,并且在前台显示出来。
JForm类中使用的相关概念
要理解JForm的使用,我们首先需要重点理解在JFrom中使用的3个元素。groups fieldsets ,fields.
groups(组)是最高级的。我们可以用groups将fields(字段)和fieldset(字段集)分成不同的组。
于2014-07-07改:以前对group的概念理解错了。group只是一个概念,并不会直接出现在xml的字段中,这点很重要。如果你要在xml中要表示一个group.那么你的代码如下<fields>组中的成员</fields>
Fieldset(字段集组)。Fieldset将共有的field(字段)进行分组,就像HTML的fieldset元素一样。
于2014-07-07改:以前为Fieldsets,现在改为Fieldset.
Fields Field(字段)。字段描述了每一个表单的字段。
当定义字段的时候,我们需要注意一个字段在一个组中的名称不能相同。他的另一个意思就是说,只要我们知道字段的组的名称和字段的名称,就可以在一个xml文件中唯一的确定一个字段的。这个在编程上是十分有意义的。
其实对这一句话,还是不理解。一个组的名称就是fields的name属性。一个字段的名称就是field的name属性。那么fieldset难道没有作用吗?很疑惑
<?xml version="1.0" encoding="UTF-8" ?> <form> <fields name="Group1"> <fieldset name="fieldset1"> <field type="text" name="field1_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field1_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> <fieldset name="fieldset2"> <field type="text" name="field2_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field2_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> </fields> </form>
最好的方式去理解上面的字段的意义就是标准的文章编辑页面的布局。依据分组和字段集的名称很容易定位每一个具体的字段。
第一个组是左手边的部分。并且这一部分包含了2个fieldset。当然在joomla中常常是只包含一个fieldset的,但理论上你可以包含多个fieldset.第二个分组是右上角的部分,并且这个部分只包含一个fieldset.通常在这一部分是一些编辑的附加参数。比喻说是谁创建的。第三个分组是右下角的部分。在这些部分中,每一个方块都是一个fieldset.如果将这个图用XML结构表示,那么大概的代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <form> <!-- main 这个分组开始 --> <fields name="main"> <fieldset name="primaryfieldset"> <field type="text" name="field1_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field1_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> <fieldset name="secondaryfieldset"> <field type="text" name="field1_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field1_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> </fields> <!-- main 这个分组结束 --> <!-- immutable 这个分组开始 --> <fields name="immutable"> <fieldset name="metadata"> <field type="text" name="field2_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field2_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> </fields> <!-- immutable 这个分组结束 --> <!-- extra 这个分组开始 --> <fields name="extra"> <fieldset name="publishing"> <field type="text" name="field2_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field2_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> <fieldset name="metadata"> <field type="text" name="field2_1" default="0" lable="COM_ZMAX_TEST_LABEL"/> <field type="text" name="field2_2" default="0" lable="COM_ZMAX_TEST_LABEL"/> </fieldset> </fields> <!-- extra 这个分组结束 --> </form>
注意,组的名称和他在页面上的位置,和他显示出现的方式是没有直接关系的。比喻说:为了让你显示的字段具有可以自动收放的效果(就是点一下就打开一个选项,再点一下就收起的效果),你将这个组的名称名为accordion(自动收放效果的英文名称),并不会产生这种效果的。你必须将他命名为extra才会有这种效果。之所以这样,是因为模版可以重载布局,然后改变显示效果。
所谓的accordion效果就是如下:

关于JForm的使用,这只是刚刚开始,未完待续。