进入专题模式查看 >>

在上一节,我们使用JControllerForm类改进了item控制器,在这一节我们将介绍使用JControllerAdmin类改进items控制器(注意这里是items控制器)。

1,本节目标


了解JControllerAdmin类的使用

2,如何选择合适的控制器基类


上一节已经初步的介绍了Joomla能够提供的控制器基类有3个。其中JControllerLegacy是另外两个的基类。因此,实际上我们就是在决定如何从JControllerForm 和 JControllerAdmin中做选择。

一般情况下,当在编辑页面,针对一个表单的时候。此时应该使用的控制器应该是JControllerForm。因为此时它已经帮我们自动的实现了保存,编辑,新建等通用功能。

当在对数据列表进行操作,需要对一些系列的数据进行管理的时候,此时应该使用JControlerAdmin控制器,因为它实现了删除,发布,排序,签入等通用功能。

请注意,JContollerAdmin控制器并没有继承自JControllerForm类,因此,JControllerAdmin类并没有实现针对单个记录的自动数据管理操作。

3,改进items控制器


items控制器主要是对一系列的数据进行操作的,因此,我们可以将其基类继承自JControllerAdmin类。这样,就可以使用父类提供的删除,发布,排序,签入得方法了。

修改items.php文件。具体的代码如下: 

<?php
/**
 *	description:ZMAXBOOK组件 Items控制器文件
 *  author:min.zhang
 *	Url:http://www.zmax99.com
 *  copyright:南宁市程序人软件科技有限责任公司保留所有权利
 *  date:2021-06-08
 *  version:v2.0.8
 *  @license GNU General Public License version 3, or later
 */

defined('_JEXEC') or die;

class zmaxbookControllerItems extends JControllerAdmin
{
	//重新定义控制器关联的模型
	public function getModel($name="item",$prefix="zmaxbookModel",$config=array())
	{
		return parent::getModel($name,$prefix,$config);
	}
}	
?>

在上面,我们做了3个改进

将原来extends JControllerLegacy 修改为  extends JControllerAdmin

由于JControllerAdmin类中已经实现了delete方法,因此,将原先我们自己实现的delete方法给删除了

在控制器中重写了父类的getModel方法

重点关注一下getModel方法

public function getModel($name="item",$prefix="zmaxbookModel",$config=array())

这个方法的意义是让控制知道需要关联哪一个模型。虽然父类也实现了getModel方法,但个人感觉这个方法实现得比较差,不够智能。

如果我们走父类的getModel方法,最终父类默认会关联ZmaxbookModelzmaxbook这个模型类,明显不是我们需要关联的类。为此,我们重写了父类的方法,手动指定$name="item",$prefix="zmaxbookModel".最终需要加载的类为zmaxbookModelItem。

至此,我们的items控制器也修改完成。再次执行删除,功能和以前完全一样。

4,说明


在执行删除的时候,提示删除成功的时候大家会看到一串字符,如图:

joomla多语言机制.png

上面是一串提示成功的信息。由于我们没有准备中文语言包,所以直接以原样输出。在后期介绍如何为组件制作了中文语言包时将详细说明。在此先不展开

5,v2.0.8版本


 com_zmaxbookv2.0.8_2021-06-08_for_j3x.zip

评论 (0)

  • 最新在前
  • 最佳在前