JModelAdmin类派生自JModelForm类,这个类具备操作JForm的方法。在2.5中joomla引人了新JForm类,这个类主要负责管理通过XML文件来产生表单。
通过让我们的类继承自JModelForm,在视图中我们可以获得一个JForm对象,这个对象包含了产生表单的方法。使得在视图中产生表单非常的简单。
由于JModelAdmin中有一个虚函数,所以必须在我们的子类中进行实现。一般的代码如下:
<?php defined('_JEXEC') or die(); jimport('joomla.application.component.modeladmin'); class DownLoadModelItem extends JModelAdmin { public function getForm( $data = array() , $loadData = true) { //Get the form $form = $this->loadForm('com_download.item' ,'item' ,array('control' =>' jform' ,'load_data' => $loadData )); if(!$form) { return false; } return $form; } public function loadFormData() { //Load form data $data = $this->getItem(); return $data; } }
在getForm中指明我们要加载的表单,一般就是一个XML文件。在上面的例子就是说要加载models/forms /item.xml这个文件。jForm类将利用这个XML文件来产生一个表单对象。非常神奇的一点时,系统会依据任务自动判断是否加载数据。就是说系统 可以自动新建和编辑这两个任务的不同。(新建则无需加载数据,编辑则需要加载数据。)
当由XML文件产生表单对象的时候,XML文件的格式非常重要,什么时候用fileds标签,什么时候用field标签,什么时候用fieldset标签都是十分关键的。否则容易出现表单不加载数据的情况(本人曾经在这个问题上化了很多冤枉时间)
另外,为了让JForm对象能够自动加载数据,我们需要确保XML中field字段的name属性必须和数据库表字段的名称一样,否则出错。
在XML中还必须加一个隐藏的自段,这个字段用来提交id的值(数据表的主键)形如下面:
<field type="hidden" name="id" />
否则将不能处理修改。因为在form中找不到id,那么系统就会自动将这个记录插入到数据表中,而不会修改原来的记录。
还有一个比较容易出错的地方就是tables文件中文件的命名和类的命令,默认情况下是和视图的类的名称是一样。具体怎样设置这个表的名称,现在还没有弄清楚。
评论 (0)