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: ...
随机推荐
- 【Android 界面效果46】自定义view常处理的回调方法
onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, ...
- selenium grid 使用方法
代码和selenium driver相同 只是 启动环境方式不同.至少启动一个hub 一个 node .如需要多个,可以使用端口进行区分. java -jar selenium-server-stan ...
- powershell解决win10开始菜单和通知中心无法打开
然后通过 Ctrl + Shift + Esc 弹出任务管理器点击文件-->运行新任务 在打开的填写框里面输入 "powershell"同时勾选下方的"以管理员身份 ...
- 使用g++ 编译C++程序
在命令行下,编译C++程序 g++ main.cpp -o main.exe
- winform datagridview 如何设置datagridview隔行变色
如何设置隔行变色. 如图:
- Altium_Designer-各种布线总结
1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...
- Android(java)学习笔记73:Intent启动Activity
1. Intent启动Activity案例 (1)首先是main.xml和other.xml文件如下: main.xml文件: <?xml version="1.0" enc ...
- 快餐店之间插入仓库,路最短,DP,POJ(1485)
题目链接:http://poj.org/problem?id=1485 暂时我还没想出思路求路径.哈哈哈,先写一下中间步骤吧. #include <stdio.h> #include &l ...
- PHP APC安装与使用
先要解决一下httpd-devel依赖库问题 yum install cyrus-sasl-devel db4-devel openldap apr apr-util apr-util-devel p ...
- Next K Permutation
3457: Next K Permutation 时间限制: 1 Sec 内存限制: 128 MB提交: 4 解决: 4[提交] [状态] [讨论版] [命题人:admin] 题目描述 n 个数有 ...