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)

  • 最新在前
  • 最佳在前