< 返回 8.1 实现删除功能 - E计划

在上一章节中我们已经知道通过使用复选框可以确定当前需要操作的记录。在这一章节中,我们将使用子控制器,实现工具栏的删除功能

1,本节目标


了解如何使用控制器实现删除功能

2,组件的v2.0.3版本


com_zmaxbookv2.0.3_2020-12-31_for_j3x.zip

3,实现的效果


在未安装v2.0.3版本时,如果你点击工具栏上的删除按钮,那么系统会出错,截图如下:

组件找不到控制器.png   

上面的提示信息明确指出,出错的原因是找不到items控制器。

在安装最新的v2.0.3版本后,我们实现了items控制器,再次点击删除就看到如下的截图:组件安装成功.png控制器删除成功.png

4,如何实现


总体的思路:获得复选框中的值,然后写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"). 

5,一些疑问


可能大家会有一点疑问,为什么复选框都选择的记录会设置到cid这个变量中呢,而不是其他的呢?关于这个,你可以在列表页面,审查复选框元素,查看其名称如下:joomla复选框的名称.png

在上图中,我们可以清晰看到复选框默认的名称就是cid,且其类型为数组。

E计划

第11章:支持多语言
第12章:前台展示组件
第13章:组件开发FAQ
第14章:高级功能
第15章:使用分类
第16章:让组件支持插件
  • 内容提要
  • 留言讨论 (0)
  • 视频教程
在上一章节中我们已经知道通过使用复选框可以确定当前需要操作的记录。在这一章节中,我们将使用子控制器,实现工具栏的删除功能

评论 (0)

  • 最新在前
  • 最佳在前

内容待完善

该课程提供视频版,可以观看完整的视频教程