PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改
删除分类
删除一个分类的同时,其所有子分类都删除
在控制器CategoryCtroller.class.php中添加删除函数(delete)

在分类模型中添加钩子函数_before_delete()【注:此处要使用父类模型执行delete函数,防止进入死循环;父类模型要指定操作的数据表】

构造批量删除参数
思路:先观察批量删除时的传参结构,然后在钩子函数_befeore_delete()中构造出批量删除的id数组


构造批量删除【注:$option要按引用传参,否则函数内对局部变量的值的修改,不能影响函数外的变量】

添加分类【控制器-》页面】
1、在控制器CategoryController.class.php/add()中取出所有分类

public function getTree()
{
$data = $this->select();
return $this->_getTree($data);
}
/*****递归从数据中找子分类*****/
private function _getTree($data, $parent_id=0, $level=0)
{
static $_ret = array();
foreach ($data as $k => $v)
{
if($v['parent_id'] == $parent_id)
{
$v['level'] = $level; //用来标记这个分类是第几级
$_ret[] = $v;
//找子分类
$this->_getTree($data, $v['id'], $level+1);
}
}
return $_ret;
}
getTree()
【注:下拉框】
修改分类 【控制器->页面】{注:修改页面,要保留原分类信息}
1、在控制器CategoryController.class.php/edit()中取出所有分类且取出所以子分类
public function edit()
{
$id = I('get.id');
if(IS_POST)
{
$model = D('category');
if($model->create(I('post.'), 2))
{
if($model->save() !== FALSE)
{
$this->success('修改成功!', U('lst', array('p' => I('get.p', 1))));
exit;
}
}
$this->error($model->getError());
} $model = D('category');
$data = $model->find($id);
//取出所有的分类做下拉框
$catData = $model->getTree();
//取出当前分类的子分类
$children = $model->getChildren($id);
/* var_dump($children);
var_dump($data);
var_dump($catData);die(); */ $this->assign(array(
'children' => $children,
'data' => $data,
'catData' => $catData,
'_page_title' => '修改分类',
'_page_btn_name' => '分类列表',
'_page_btn_link' => U('lst'),
)); $this->display();
}
edit()

2、修改页面(eit.html)中构造表单
<layout name="layout" /> <div class="main-div">
<form name="main_form" method="POST" action="__SELF__" >
<input type="hidden" name="id" value="<?php echo $data['id']; ?>" />
<table cellspacing="1" cellpadding="3" width="100%">
<tr>
<td class="label">上级分类:</td>
<td>
<select name="parent_id">
<option value="0">顶级分类</option>
<?php foreach($catData as $k => $v):
//跳过当前分类和子分类
if($v['id'] == $data['id'] || in_array($v['id'], $children))
continue;
if($v['id'] == $data['parent_id'])
$select = 'selected="selected"';
else
$select = '';
?>
<option <?php echo $select; ?> value="<?php echo $v['id']; ?>"><?php echo str_repeat('-', 8*$v['level']) .$v['cat_name']; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<td class="label">分类名称:</td>
<td>
<input type="text" name="cat_name" value="<?php echo $data['cat_name'];?>" size='60' />
</td>
</tr>
<tr>
<td colspan="99" align="center">
<input type="submit" class="button" value=" 确定 " />
<input type="reset" class="button" value=" 重置 " />
</td>
</tr>
</table>
</form>
</div> <script>
</script>
edit.html
注:上级分类不能是当前分类也不能是当前分类的子分类,则下拉框中不显示

PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改的更多相关文章
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.26-TP框架商城应用实例-后台3-商品修改、删除
商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Mod ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
- PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析
RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...
- PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除
添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...
- PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)
商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...
随机推荐
- Elmah 数据库脚本
/* 错误管理工具 SQL代码 */ CREATE TABLE dbo.ELMAH_Error ( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVA ...
- SQLServer 连接和联合
一.内连接(inner join) 默认省略inner ,内连接是严格过滤,等同where限制,连接两端的表都数据都需要过滤. 二.左外连接(left outer join) 以左表为基准进行数据连接 ...
- 【QT】【OpenCv】初始配置以及测试功能
#include "mainwindow.h" #include "ui_mainwindow.h" #include<opencv2/core/core ...
- C#队列Queue,利用队列处理订单
一.什么是队列 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. 这是摘抄网上的.做了 ...
- Oracle11g 卸载教程图解
1:停掉所有Oracle相关的服务 1.1打开服务方式如下: 1.1.1:右击“计算机”–>管理–>服务和应用程序–>服务 1.1.2:开始–>输入“服务”后点击搜索–> ...
- Java获取Date类型-针对SQL语句
简便使用Date类型: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedState ...
- Java问题定位之如何借助线程堆栈进行问题分析
在大型的应用中,线程堆栈打印出来特别多,如何从众多的信息中找到真正有用,有价值的信息,我们需要一定的技巧.本文对此详细介绍. 我们可以从三个方面分析:堆栈的局部信息,一次堆栈的统计信息,多个堆栈的对比 ...
- 在windows bat脚本(batch)中延时
编写bat脚本时,有事我们希望在指令和指令之间,加入延时.例如当一条指令执行后,windows需要一定时间来响应的情况. 以下是一种实现方法,通过ping 指令来实现,5表示ping5次,就是延时5秒 ...
- 如何获得C4C里某个code字段对应的描述信息
通过我这篇文章介绍的方法使用C4C OData服务去取服务订单数据(Sales Order): 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据 https://www.jiansh ...
- Android 中间白色渐变到看不见的线的Drawable
用gradient <gradient android:startColor="#00ffffff" android:centerColor="#ffffff&qu ...