上一节中实现了的删除功能,现在我们就来实现编辑功能。
了解如何使用控制器实现编辑功能
要实现编辑功能,首先我们需要有一个编辑的按钮。这个已经通过工具栏按钮添加了。代码如下:
JToolBarHelper::editList('item.edit'); //编辑
下一步,就是需要确定当前编辑的具体是那一条项目,这个我们也使用复选框实现了。代码如下:
<td><?php echo JHTML::_('grid.id',$i,$item->id);?></td>
当不勾选任何的记录时,点击编辑,系统会弹窗提醒,需要选择一个项目。如图:
勾选一条记录后,我们再次点击删除,系统会提示错误,截图如下:
这个错误在实现删除之前也遇到过,大概的意思就是说item控制器不存在。仿照上一节的解决方案,现在我们要做的就是创建一个新的控制器,这个控制器的名称为item.请一定要注意是否有后缀s.啰嗦一下,为什么提示是item控制器不存在,这是因为我们在创建编辑按钮的时候设置的第一个参数是item.edit.
添加新的控制器的方法步骤如下:
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的架构实现了控制器,为什么是重新加载页面,这个我们以后再详谈,在此不展开。
点击编辑,实际上系统是将表单的task变量设置为item.eidt,然后提交. 依据之前所学到的知识,点击编辑的时候,系统会执行item控制器中的edit方法。
是不是这样?可以写一段代码来验证一下。在item控制器中定义一个edit方法。代码如下:
class zmaxbookControllerItem extends JControllerLegacy { public function edit() { echo "I am edit function"; } }
再次点击编辑,可以看到输出如下内容,截图如下:
说明代码的确是按照我们的逻辑在走的
现在已经知道系统会执行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视图(也就是编辑页面)。如图:
下一节将继续解决这个问题。
评论 (0)