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: ...
随机推荐
- Java笔记 —— 方法重载和方法重写
Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...
- Android studio 安装与配置【Android学习入门】
终于下定决心认真学习Android开发了. 之前在很多平台看到很多大牛们学习Android的经验和心得,纸上得来终觉浅. 这里推荐stormzhang老师总结的Android学习之路. 为了防止电脑卡 ...
- ScrollView镶嵌listview显示不全的原因
当ScrollView镶嵌listview会显示不全,通过查看ScrollView测量高度的源码,会发现ScrollView重写了父类viewGroup的measureChildWithMargins ...
- SharePoint 和 Windows Phone 7 开发人员培训资源
该工具包包括单位数目: Windows Phone 7 发展简介 在本单元中,您将了解真实的消费信息存储在 SharePoint 中与你用 Visual Studio 写 Windows Phone ...
- 搭建Web开发环境JavaEE_Eclipse
1. 下载和安装1.1 下载JDK在Java官方网站下载最新版本的 Java SE: http://www.oracle.com/technetwork/java/javase/downloads/ ...
- COGS 678. 双重回文数
★ 输入文件:dualpal.in 输出文件:dualpal.out 简单对比时间限制:1 s 内存限制:128 MB Dual Palindromes 双重回文数 描述 [USACO ...
- Spring MVC框架下提交Date数据无法在controller直接接收
主要有两步,controller中添加initBinder方法,再创建一个时间类型数据转换类就OK了. 1.在Controller中创建方法: // 相关包 import java.text.Date ...
- Python OOP 面向对象
1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...
- Ubuntu 18.04 一键安装深度截图工具 Deepin Screenshot
一直在寻找Linux下的截图软件,终于发现了Deepin ScreenShot,其功能齐全,界面美观,唯一的缺点需要自己配置快捷键(后面会讲). 安装 直接在Ubuntu商店搜索“深度截图”,点击“安 ...
- 2018.7.23 oracle中的CLOB数据类型
Oarcle中的LOB类型 1.在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这 ...