在上一节,我们使用JControllerForm类改进了item控制器,在这一节我们将介绍使用JControllerAdmin类改进items控制器(注意这里是items控制器)。
了解JControllerAdmin类的使用
上一节已经初步的介绍了Joomla能够提供的控制器基类有3个。其中JControllerLegacy是另外两个的基类。因此,实际上我们就是在决定如何从JControllerForm 和 JControllerAdmin中做选择。
一般情况下,当在编辑页面,针对一个表单的时候。此时应该使用的控制器应该是JControllerForm。因为此时它已经帮我们自动的实现了保存,编辑,新建等通用功能。
当在对数据列表进行操作,需要对一些系列的数据进行管理的时候,此时应该使用JControlerAdmin控制器,因为它实现了删除,发布,排序,签入等通用功能。
请注意,JContollerAdmin控制器并没有继承自JControllerForm类,因此,JControllerAdmin类并没有实现针对单个记录的自动数据管理操作。
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控制器也修改完成。再次执行删除,功能和以前完全一样。
在执行删除的时候,提示删除成功的时候大家会看到一串字符,如图:
上面是一串提示成功的信息。由于我们没有准备中文语言包,所以直接以原样输出。在后期介绍如何为组件制作了中文语言包时将详细说明。在此先不展开
[下载文件:]com_zmaxbookv2.0.9_2021-09-15_for_j3x.zip
评论 (0)