在上一章节中我们已经知道通过使用复选框可以确定当前需要操作的记录。在这一章节中,我们将使用子控制器,实现工具栏的删除功能
了解如何使用控制器实现删除功能
com_zmaxbookv2.0.3_2020-12-31_for_j3x.zip
在未安装v2.0.3版本时,如果你点击工具栏上的删除按钮,那么系统会出错,截图如下:
上面的提示信息明确指出,出错的原因是找不到items控制器。
在安装最新的v2.0.3版本后,我们实现了items控制器,再次点击删除就看到如下的截图:
总体的思路:获得复选框中的值,然后写SQL语句删除。删除成功后,重定向到当前页面。
具体的代码实现:
点击工具栏上的删除按钮,实际上joomla做的就是将task变量设置为items.delete,然后提交表单。在前面的章节中我们已经了解到,当task变量不为空的时候,系统首先会将task 变量按照点分进行拆分,前面的部分(items)就是需要执行的子控制器,后面部分就是需要执行(delete)的方法。
所以,下一步,我们需要在组建的目录下面创建一个controllers目录,在这个controllers目录下面创建一个items.php的文件。具体代码如下:
defined('_JEXEC') or die; class zmaxbookControllerItems extends JControllerLegacy { /** * 删除功能的实现 * * @return void */ public function delete() { //STEP 1:得到提交的ID $app = JFactory::getApplication(); $cid = $app->input->get('cid','','ARRAY'); //STEP 2:执行SQL语句进行删除 $db = JFactory::getDBO(); $query ='DELETE FROM #__zmaxbook_item WHERE id IN('.implode(',',$cid).')'; $db->setQuery($query); $db->execute(); //STEP 3:提示用户删除成功,并且完成重定向 $this->setRedirect("index.php?option=com_zmaxbook&view=items","操作成功"); return true; } }
首先,按照约定优于设计原则,当系统发现task=items.deletes时,会自动在controllers目录下检查是否存在items.php文件。并且检查是否存在 zmaxbookControllerItems 类。如果不存在就会提供找不到控制器的错误。在上面我们就成功的实现了子控制器
在上面的代码中,首先获得一个$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方法有三个参数,第一个是需要获得的变量的名称,第二个参数是默认值,第三个参数是类型。这样就拿到了当前需要编辑的记录。
最后获得数据库对象,构造sql语句并且执行删除:
$db = JFactory::getDBO(); $query ='DELETE FROM #__zmaxbook_item WHERE id IN('.implode(',',$cid).')'; $db->setQuery($query); $db->execute();
关于数据库的详细操作,可以查看文档 http://www.joomlachina.cn/shouce/doc/1916?article_id=1783
删除成功后,使用setRedirect方法进行重定向当当前页面,并且提示成功信息。
$this->setRedirect("index.php?option=com_zmaxbook&view=items","操作成功");
setRedirect方法有三个参数,第一个是需要重定向的地址,第二个是携带的消息,第三个是消息的类型:如("message","info","error").
可能大家会有一点疑问,为什么复选框都选择的记录会设置到cid这个变量中呢,而不是其他的呢?关于这个,你可以在列表页面,审查复选框元素,查看其名称如下:
在上图中,我们可以清晰看到复选框默认的名称就是cid,且其类型为数组。
评论 (0)