进入专题模式查看 >>

上一节中实现了的删除功能,现在我们就来实现编辑功能。

1,本节目标


了解如何使用控制器实现编辑功能

2,现在的效果


要实现编辑功能,首先我们需要有一个编辑的按钮。这个已经通过工具栏按钮添加了。代码如下:

JToolBarHelper::editList('item.edit'); //编辑

 下一步,就是需要确定当前编辑的具体是那一条项目,这个我们也使用复选框实现了。代码如下:

<td><?php echo JHTML::_('grid.id',$i,$item->id);?></td>

 当不勾选任何的记录时,点击编辑,系统会弹窗提醒,需要选择一个项目。如图:

joomla编辑提醒.png

勾选一条记录后,我们再次点击删除,系统会提示错误,截图如下:

joomla控制器不合法.png   

这个错误在实现删除之前也遇到过,大概的意思就是说item控制器不存在。仿照上一节的解决方案,现在我们要做的就是创建一个新的控制器,这个控制器的名称为item.请一定要注意是否有后缀s.啰嗦一下,为什么提示是item控制器不存在,这是因为我们在创建编辑按钮的时候设置的第一个参数是item.edit.

3,添加item控制器


添加新的控制器的方法步骤如下:

STEP 1 :在controllers文件夹下新建一个文件,这个文件的名称为你的控制器的名称

因为我们的控制器是item控制器,所以新建的文件为item.php

STEP 2:编辑item.php这个文件,定义我们的控制器类。

按照约定,控制器的类格式应该如下:

class zmaxbookControllerItem extends JControllerLegacy

整个控制器文件的代码如下:

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

defined('_JEXEC') or die;

class zmaxbookControllerItem extends JControllerLegacy
{
	
}	
?>

做完了这些,item控制器就定义好了。

现在再次点击编辑,系统就不会出错了,而是直接刷新,重新加载页面了。 之所以没有出错,是因为我们已经按照MVC的架构实现了控制器,为什么是重新加载页面,这个我们以后再详谈,在此不展开。

4,实现编辑方法


 点击编辑,实际上系统是将表单的task变量设置为item.eidt,然后提交. 依据之前所学到的知识,点击编辑的时候,系统会执行item控制器中的edit方法。

是不是这样?可以写一段代码来验证一下。在item控制器中定义一个edit方法。代码如下:

class zmaxbookControllerItem extends JControllerLegacy
{
	public function edit()
	{
		echo "I am edit function";
	}
}	

再次点击编辑,可以看到输出如下内容,截图如下:

joomla组件执行流程.png

说明代码的确是按照我们的逻辑在走的

5,控制器的职责


现在已经知道系统会执行edit方法,剩下的内容就是如何来写edit的代码实现一个编辑页面。

一个标准的编辑页面应该至少包含一个表单,并且将当前的选择的项目的数据都设置到对应的表单字段中去。很明显,我们不可能将这些代码都写在item控制器的edit方法中,也没有必要这么做。

在实际的实现中,控制器中只需要进行功能的控制,而不去实际生产出页面。在edit方法中,需要做的就是检测当前用户是否有权限编辑这个项目,如果有的话,那么将它重定向到编辑页面,如果没有给出错误提示。

实现代码如下:

class zmaxbookControllerItem extends JControllerLegacy
{
	public function edit()
	{
		//STEP 1:获得当前选中的项目的ID
		$app = JFactory::getApplication();
		$cids    = $app->input->get("cid",'','ARRAY');
		
		//STEP 2:检查有效性
		if(empty($cids))
		{
			$this->setRedirect("index.php?option=com_zmaxbook&view=items","当前没有选择任何的项目,请选择需要编辑的项目","warning");
			return true;
		}
		
		//STEP 3:重定向到编辑页面
		$id = $cids[0];//如果选择多个,默认编辑第一个
		$editLink = "index.php?option=com_zmaxbook&view=item&id=".$id;
		$this->setRedirect($editLink);
		return true;
	}
}	

在上面的代码中,首先获得一个$app对象

$app = JFactory::getApplication();

在这个$app对象中包含了很多的子对象,$app->input 是一个负责处理请求数据的对象,通过这个对象,可以获得页面提交的请求参数的值。关于Jinput类的详情说明可以参考文档:http://www.joomlachina.cn/shouce/doc/1916?article_id=1892

 然后我们获得当前用户选择的ID:

$cids    = $app->input->get("cid",'','ARRAY');

 Jinput对象的get方法有三个参数,第一个是需要获得的变量的名称,第二个参数是默认值,第三个参数是类型。这样就拿到了当前需要编辑的记录。

当检查用户的权限没有问题的时候(上面的代码没有检查权限的部分,实际上应该在控制器里面检查权限),我们就可以将其重定向到编辑页面。在这里使用了控制器的setRedirect方法。

$this->setRedirect("index.php?option=com_zmaxbook&view=items","当前没有选择任何的项目,请选择需要编辑的项目","warning");

 setRedirect方法有三个参数,第一个是需要重定向的地址,第二个是携带的消息,第三个是消息的类型:如("message","info","error").

当控制器设置了重定向链接后,joomla就会开始执行一个新的请求过程。这样控制器的任务就完成了。

如果再此点击编辑,这个时候需要系统会提示找不到item视图(也就是编辑页面)。如图:

joomla找不到视图.png

下一节将继续解决这个问题。

 

评论 (0)

  • 最新在前
  • 最佳在前