商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在修改页面edit.html中显示对应扩展分类foreach,类似添加页面 注:考虑当没有扩展分类时的显示,使用if($gcData) 3.在模型类GoodsModel.class.php/_before_update()中处理扩展分类,先删除原数据,再插入新数据[多对多时,通常的用法] <?php…
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,=>增加一个父控制器验证Session 让所有后台的控制器[除了Login控制器之外的]都继承自这个控制器 5.在管理员访问后台的任何一个页面之前先到数据库中查看当前管理员所在的角色是否有权限访问这个页面 在权限模型中增加此检查方法,在父类登录控制器中调用 6.后台左侧只显示当前管理员有权限访问的按钮…
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字段:ALTE TABLE p39_goods ADD brand_id mediumint unsigned not null default '0' comment '品牌id'; 注:因为需求[有可能根据品牌搜商品],所以在商品表加上品牌id索引 添加索引: ALTER TABLE p39_go…
RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员! 每个权限对应控制器中的一个方法[顶级权限除外] 3.角色列表  添加角色时要给角色分配权限[用js实现选择上级权限,下级权限自动勾选] 4.管理员列表 注: 1.系统中要默认有一个超级管理员并且不能被删除[无法分配权限,拥有所有的权限] 2.只有登录了,才能进入后台 3.后台左侧只显示当前管理员…
角色和管理员的关系 角色功能 管理员功能 角色与管理的关联要通过管理-角色表进行{多对多} /********* 管理-角色表 *********/ drop if exists p39_admin_role; create table p39_admin_role ( admin_id mediumint unsigned not null comment '管理Id', role_id mediumint unsigned not null comment '角色Id', key admin…
权限和角色的关系 权限功能 角色功能 权限与角色的关联要通过权限-角色表进行{多对多} /********* 角色-权限表 *********/ drop if exists p39_role_pri; create table p39_role_pri ( pri_id mediumint unsigned not null comment '权限Id', role_id mediumint unsigned not null comment '角色Id', key pri_id (pri_i…
权限管理 三张主表{p39_privilege(权限).p39_role(角色).p39_admin(管理)} 两张中间表{p39_role_pri(角色-权限).p39_admin_role(管理-角色)} 注:权限表与角色表为多对多关系,管理与角色表为多对多关系 1.建表语句 /********* 权限表 *********/ drop if exists p39_privilege; create table p39_privilege ( id mediumint unsigned no…
商品分类的修改 1.改表单Goods/edit.html,加下拉框 2.因为商品属性修改涉及商品属性表goods_attr{id,attr_value,attr_id,goods_id}与属性表attribute{id,attr_name,attr_option_values,type_id},而且考虑到当一个类型新增一个属性时,修改表也应该将其显示出来,所以应根据属性表连接商品属性表取出相关数据{同一类型所有属性,该商品已存属性值} 连表查询数据输出如下: 3.用PHP在表单edit.html…
商品扩展分类 需求:一件商品能有多个扩展分类,搜索任何一个分类都能搜出该商品 建表[扩展分类表] drop table if exists p39_goods_cat; create table p39_goods_cat ( cat_id mediumint unsigned not null comment '分类Id', goods_id mediumint unsigned not null comment '商品Id', key goods_id(goods_id), key cat_…
需求:一个商品必须有一个主分类,一个主分类可以有多个商品 [一对多] 修改表p39_goods,增加外键约束,增加索引 主分类添加[控制器->页面] 1.在控制器GoodsController.class.php/add()中取出所有分类信息 2.在模型类GoodsModel.class.php中增加接收的字段和验证规则 3.add.html页面 主分类修改 1.控制器GoodsController.class.php/edit()中,取出分类 2.模型类中连表查询出category中对应的ca…
 添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性表p39_goods_attr{id,attr_value,attr_id,goods_id} /********商品属性表[多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品]*******/ drop if exists p39_goods_attr; create…
商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Model::MODEL_UPDATE(或者2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成Model::MODEL_UPDATE操作. save():用于更新数据库信息:如果失败返回false,如果成功返回受影响条数 1.控制器GoodsController.c…
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就…
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字段必须有中文名,则Gii在生成代码时才能识别某字段的中文名是什么: 2.某字段验证规则不能为空:设置该建表字段为not null:一般所有字段都为not null,若不希望生成验证规则,则加上默认值default(默认值可为空): 3.生成上传图片代码:字段名中需包含logo|image|pic|f…
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_number,goods_str_id[商品属性id]} drop if exists p39_goods_number; create table p39_goods_number ( goods_id mediumint unsigned not null comment '商品Id', goods…
商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete:删除前的操作 protected function _before_delete($option) { $id = $option['where']['id']; //要删除的商品的ID /***********删除商品相片********/ //先查询出原商品相册的路径 $gpModel = M(…
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> <div id="tabbar-div"> <p> <span class="tab-front" >通用信息</span> <span class="tab-back" >商品描述<…
商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现翻页.搜索.排序 * */ public function search($perPage = 5) //$perPage控制显示条数 { /***********翻页***********/ //取出总的记录数 $count = $this->count(); //生成翻页类的对象 $pageOb…
思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L……;颜色:白色,黑色……}唯一属性:材质 首先把类型与属性关联起来 1.建表 类型表{p39_type} drop table if exists p39_type; create table p39_type ( id mediumint unsigned not null auto_increment comment 'Id', type…
删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[注:此处要使用父类模型执行delete函数,防止进入死循环:父类模型要指定操作的数据表] 构造批量删除参数 思路:先观察批量删除时的传参结构,然后在钩子函数_befeore_delete()中构造出批量删除的id数组 构造批量删除[注:$option要按引用传参,否则函数内对局部变量的值的修改,不能…
商品管理需求分析 1.实现商品无限级分类管理[类似京东三级分类] 2.添加商品时要指定商品属于一个主分类和多个扩展分类[扩展分类可以是其他主分类] 3.商品列表中可以根据分类搜索商品 a) 搜索一个分类小的商品时,这个分类所有子分类下的商品也应该被搜索出来 b) 搜索时要考虑商品的主分类和扩展分类 无限级的商品分类 思路:递归打印树形结构:递归查找分类所有子分类[以便删除时使用] 1.建表 drop table if exists p39_category; create table p39_c…
商品相册[是商品的其他相片] 添加相册需求: 每张图片生成三张缩略图{50*50.350*350.650*650} 1.建表p39_goods_pic{id,pic,sm_pic,mid_pic,big_pic,goods_id drop table if exists p39_goods_pic; create table p39_goods_pic( id mediumint unsigned not null auto_increment comment 'Id', pic varchar…
商品会员价格删除 需求:当删除一件商品时,这件商品对应的会员价格也应该从会员价格表{price,level_id,goods_id}中删除掉. 有两种删除方法 1.在钩子函数_before_delete()中删除会员价格[不需修改表结构] 根据商品id(goods_id)进行更改 2.可以使用MYSQL中自带外键约束来实现{级联删除}[前提:只有InnoDB引擎支持] 数据库外键详解 外键约束和级联操作[级联操作(on delete|on action|on update):当主表更改时,从表(…
首先把需求分析搞清楚 主要实现两个功能 1.会员管理,设置成为会员的要求 2.添加商品时,可设置会员优惠价格 具体实现 1.建表[会员级别限定表p39_member_level{Id,级别名称,积分下限,积分上限}.会员价格表p39_member_price{会员价格,积分Id,商品Id}] drop table if exists p39_member_level; create table p39_member_level ( id mediumint unsigned not null a…
楼层推荐 效果图 1.增加表字段 商品表   分类表 2.修改商品模型和分类模型接收字段is_floor 3.修改商品和分类相关的表单 4.后台制作推荐方法 4.1在分类模型中增加获取前台楼层数据的方法 /****** 获取前台首页楼层中的数据 ***********/ public function floorData() { $floorData = S('floorData'); if($floorData) return $floorData; else { // 先取出推荐到楼层的顶级…
ecshop 后台商品列表默认只显示分类下的商品,而不显示扩展分类中的商品,以下是我个人给出的解决方法: 打开admin/includes/lib_goods.php 第839行左右的位置 可以看到如下代码: $where = $filter['cat_id'] > 0 ? " AND " . get_children($filter['cat_id']) : ''; 把以上这行代码的内容换成如下内容即可: if($filter['cat_id']>0){ $cid = g…
公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} ==> include为tp中自带的标签 <include file="nav.html"> 3.帮助信息{help.html} <include file="help.html"> 扩展:模型文件的存放位置,三种方法: 1. 所有的模型都放…
面包屑导航  思路:根据商品的主分类向上取出所有上级分类即可 1.在分类模型中增加取出所有上级分类的方法 /********** [面包屑导航]取出一个分类所有上级分类 **********/ public function parentPath($catId) { static $ret = array(); $info = $this->field('id, cat_name,parent_id')->find($catId); $ret[] = $info; // 递归取上级信息 if(…
商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到  注意:在增加datetime类型字段时,要添加默认值{datetime范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59}:并且关闭MySQL严格模式,因为promote_price(decimal(10,2))无法插入空值:但建议开发阶段开启 2.表单与时间插件 3.修改商品模型允许接收字段 4.前台取出推荐的商品 //…
//注册 public function register(){ if(IS_POST){ //接收数据 $data = I('post.'); $model = D('User'); $data['username'] = $data['email'] ? $data['email'] : $data['phone']; //使用模型的create方法自动创建数据集,会自动实现自动验证等功能 if(!$model -> create($data)){ //检测失败 $error = $mode…