在进一步的讨论表单系统之前,先实现上一节忘记实现的问题。如何做新建功能?
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
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是不允许更改的,上面的代码并没有处理,大家也可以自己想办法处理一下

评论 (0)