< 返回 10.1 实现新建功能 - E计划

在进一步的讨论表单系统之前,先实现上一节忘记实现的问题。如何做新建功能?

1,本节目标


实现新建(添加)功能

2,技术原理


新建功能和编辑功能非常的像,无论是操作还是页面都是一样的,唯一的不同就是新建是不需要加载默认数据的。因此,通过以上分析,只需要对编辑页面进行修改即可实现新建的功能。

3,具体实现


STEP 1:编辑控制器item.php文件,实现add方法。代码如下:

	public function add()
	{
		$editLink = "index.php?option=com_zmaxbook&view=item&id=0"; //id=0;就是新建
		$this->setRedirect($editLink);
		return true;
	}

 上面什么都没有做,只是简单的做了一个重定向到编辑页面,且传递的id=0

STEP 2:修改模型,增加对id=0的处理。修改模型item.php 的 getItem()方法,代码如下:

	public function getItem()
	{
		//STEP 1:获得需要编辑记录的ID
		$app = JFactory::getApplication();
		$id = $app->input->get("id",'0','INT');

		//STEP 2:查询数据库,得到编辑记录的详情
		$db = JFactory::getDBO();
		$query = $db->getQuery(true);
		$query->select("*")->from("#__zmaxbook_item")->where("id=".$db->quote($id));
		$db->setQuery($query);
		$item = $db->loadObject();
		if(!$item) //item不存在,创建一个空的对象,以避免视图中报错
		{
			$item = new stdclass(); //同时可以做一些默认值的设置
			$item->id =0;
			$item->title="";
			$item->author="";
			$item->price=0;
		}
		 return $item;
	}

 具体的代码解释,请看注释

STEP 3:修改编辑视图,增加一个关闭按钮

class zmaxbookViewItem extends JViewLegacy
{
	public function display($tpl = null)
	{
		$this->item = $this->get("Item"); //从模型获得数据
		if($this->item->id)
		{
			JToolbarHelper::title('书本管理 - 编辑书本', 'edit');	
		}
		else
		{
			JToolbarHelper::title('书本管理 - 添加书本', 'plus');
		}	
		
		
		JToolBarHelper::save('item.save');//保存按钮
		JToolBarHelper::cancel('item.cancel');//取消关闭按钮
		parent::display($tpl);
	}
} 

最终的新建界面的截图如下:

现在已经可以录入信息了。但点击保存后,是没有增加新的记录的,这是正常的。需要修改模型的save方法。

STEP 4:编辑item模型的,修改save方法。代码如下:

	//保存方法
	public function save($id,$title,$author,$price)
	{
		$db = JFactory::getDBO();
		$query = $db->getQuery(true);
		if($id) //有id说明是更新
		{
			$query->update("#__zmaxbook_item");			
			$query->where("id=".$db->quote($id));	
		}
		else
		{
			$query->insert("#__zmaxbook_item");
		}
		$query->set("title=".$db->quote($title));
		$query->set("author=".$db->quote($author));
		$query->set("price=".$db->quote($price));
		$db->setQuery($query);
		$result = $db->execute();
		return $result;
	}

 上面的代码通过id是否为0来判断当前需要执行的是插入或者更新的方法,逻辑很简单。

 至此,就实现了新建的功能。

4,一些小问题


  • 1,工具栏上的取消按钮非常的简单,我并没有实现。大家可以自己思考一下如何实现取消和关闭功能
  • 2,一般编辑或者新建的时候,主键ID是不允许更改的,上面的代码并没有处理,大家也可以自己想办法处理一下

5,V2.0.6版本


 [下载文件:]com_zmaxbookv2.0.6_2021-06-04_for_j3x.zip

E计划

第11章:支持多语言
第12章:前台展示组件
第13章:组件开发FAQ
第14章:高级功能
第15章:使用分类
第16章:让组件支持插件
  • 内容提要
  • 留言讨论 (0)
  • 视频教程
在进一步的讨论表单系统之前,先实现上一节忘记实现的问题。如何做新建功能?

评论 (0)

  • 最新在前
  • 最佳在前

内容待完善

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