我们编辑首先就要考虑将下拉框效果实现出来,然后再进行下一步操作:

我们用到了Model层的操作,在第8讲里面其实已经写好了catTree方法,控制器如下所示:

然后在列表页然他变量进行输出

然后开始通过接收post传过来的参数进行修改,但是有一点必须要考虑的,

水果 为顶级栏目, 苹果为 水果的下一级栏目,所以我们不能让水果变成苹果的下级栏目,我们居然考虑到这了,所以我们还是需要通过判断的,

让爸级栏目不能一下变成孙级栏目,不然发生全家族集体失终的“惨剧”哦。。。。

我们的解决方法是在显示的时候不显示自己和自己的子类,model代码如下所示:

        //getSubIds函数的作用是获取一个分类所有子分类的id
public function getSubIds($cate_id){
//找所有分类
$data = $this -> select();
//递归找出所有子分类的id
return $this -> _getSubIds($data,$cate_id);
}
//递归查找
private function _getSubIds($data,$cate_pid,$isclear=false){
static $ret;
//因为每次调用他静态变量他都会追加,所以我们让他格式化一下
if($isclear){
$ret = array();
}
foreach($data as $k=>$v){
if($v['cate_pid'] == $cate_pid){
$ret[] = $v['cate_id'];
//再找这条分类的子分类
$this -> _getSubIds($data,$v['cate_id']);
}
}
return $ret;
}

控制器代码如下所示:

public function edit(){
$id = I('cate_id');
$vo = M('Category')->find($id);
$this -> assign('vo',$vo);
//栏目列表的遍历 开始
$cat = D('Category')->catTree();
$this -> assign('cat',$cat);
//栏目列表的遍历 结束
//dump($cat); //主要作用是用来查取下级分类的 开始
$catemod = D('Category');
//取出当前分类所有子分类的id
$cates = $catemod->getSubIds($id);
//将当前分类和子分类放到一起
$cates[] = $id;
$this -> assign('cates',$cates);
//下级分类查取 结束 //dump($cates);
if(IS_POST){
$data['cate_id'] = I('cate_id');
$data['cate_name'] = I('cate_name');
$data['cate_ename'] = I('cate_ename');
$data['cate_keywords'] = I('cate_keywords');
$data['cate_desc'] = I('cate_desc');
$data['cate_type'] = I('cate_type');
$data['cate_pid'] = I('cate_pid');
$data['cate_content'] = I('cate_content');
if($_FILES['cate_pic']['tmp_name']!=''){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './'; //这个一定要加否则很容易中招
$upload->savePath = 'Public/Uploads/'; // 设置附件上传目录
$info = $upload->uploadOne($_FILES['cate_pic']);
if($info){
//删除原来的图片
$cp = M('Category')->find($id);
unlink($cp['cate_pic']);
// 上传成功 获取上传文件信息
//这里组装sql语句,让图片融入$data['pic']里面
$data['cate_pic'] = $info['savepath'].$info['savename'];
}else{
$this->error($upload->getError());
}
} $mod =D("Category");
if($mod-> create($data)){
if($mod->save()){
$this->success('修改栏目成功',U('Category/lists'));
}else{
$this ->error('修改栏目失败');
}
}else{
$this->error($brandModel->getError());
}
}
$this->display();
}

然后在前端进行输出即可:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>后台管理</title>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/Admin/css/common.css"/>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/Admin/css/main.css"/>
<script type="text/javascript" src="__PUBLIC__/Admin/js/libs/modernizr.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/Admin/js/jq18m.js"></script>
<script type="text/javascript" src="__PUBLIC__/Admin/js/hileft.js"></script> <script type="text/javascript" charset="utf-8" src="__PUBLIC__/Ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="__PUBLIC__/Ueditor/ueditor.all.min.js"></script>
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/Ueditor/lang/zh-cn/zh-cn.js"></script> </head>
<body> <include file="Public/header" /> <div class="container clearfix">
<include file="Public/left" />
<!--/sidebar-->
<div class="main-wrap"> <div class="crumb-wrap">
<div class="crumb-list"><i class="icon-font"></i><a href="/jscss/admin/design/">首页</a><span class="crumb-step">&gt;</span><a class="crumb-name" href="/jscss/admin/design/">作品管理</a><span class="crumb-step">&gt;</span><span>新增作品</span></div>
</div>
<div class="result-wrap">
<div class="result-content">
<form action="" method="post" id="myform" name="myform" enctype="multipart/form-data">
<table class="insert-tab" width="100%">
<tbody>
<tr> <th width="120"><i class="require-red">*</i>上级分类:</th>
<td>
<select name="cate_pid" id="catid" class="required"> <option value="0">顶级分类</option>
<?php foreach($cat as $v){
if(in_array($v['cate_id'],$cates))
continue;
?>
<option value="<?php echo $v['cate_id']; ?>">
<?php echo str_repeat('-',$v['level'] *8) . $v['cate_name']; ?>
</option>
<?php } ?> </select>
</td>
</tr> <tr>
<th><i class="require-red">*</i>栏目中文名:</th>
<td>
<input class="common-text required" id="title" name="cate_name" size="50" value="{$vo['cate_name']}" type="text">
</td>
</tr> <tr>
<th><i class="require-red">*</i>栏目英文名:</th>
<td><input class="common-text" name="cate_ename" size="50" value="{$vo['cate_ename']}" type="text"></td>
</tr> <tr>
<th>栏目关键词:</th>
<td><input class="common-text" name="cate_keywords" size="50" value="{$vo['cate_keywords']}" type="text"></td>
</tr> <tr>
<th>栏目图片:</th>
<td>
<if condition="$vo['cate_pic'] eq ''">
<div style="color:red;">抱歉目前没有图片数据</div>
<else/>
<img src="/{$vo['cate_pic']}" width="100" height="60">
</if>
<input name="cate_pic" id="" type="file"><!--<input type="submit" onclick="submitForm('/jscss/admin/design/upload')" value="上传图片"/>--></td>
</tr> <tr>
<th>栏目描述:</th>
<td>
<textarea name="cate_desc" style="margin: 0px; width: 609px; height: 157px;">{$vo['cate_desc']}</textarea>
</td>
</tr> <tr>
<th>栏目类型:</th>
<if condition="$vo['cate_type'] eq 0">
<td>
封面栏目:<input type="checkbox" checked name="cate_type" value="0"> <br />
列表栏目:<input type="checkbox" name="cate_type" value="1"> <br />
产品栏目:<input type="checkbox" name="cate_type" value="2">
</td>
<elseif condition="$vo['cate_type'] eq 1" />
<td>
封面栏目:<input type="checkbox" name="cate_type" value="0"> <br />
列表栏目:<input type="checkbox" checked name="cate_type" value="1"> <br />
产品栏目:<input type="checkbox" name="cate_type" value="2">
</td>
<elseif condition="$vo['cate_type'] eq 2" />
<td>
封面栏目:<input type="checkbox" name="cate_type" value="0"> <br />
列表栏目:<input type="checkbox" name="cate_type" value="1"> <br />
产品栏目:<input type="checkbox" checked name="cate_type" value="2">
</td>
</if>
</tr> <tr>
<th>栏目内容:</th>
<td>
<textarea id="content" name="cate_content">{$vo['cate_content']}</textarea>
</td>
</tr>
<input type="hidden" name="cate_id" value="{$vo['cate_id']}" />
<tr>
<th></th>
<td>
<input class="btn btn-primary btn6 mr10" value="提交" type="submit">
<input class="btn btn6" onclick="history.go(-1)" value="返回" type="button">
</td>
</tr>
</tbody></table>
</form>
</div>
</div> </div>
<!--/main-->
</div>
<script type="text/javascript">
UE.getEditor('content',{initialFrameWidth:890,initialFrameHeight:550});
//initialFrameWidth: null 这样就是他自动设置大小
</script>
<style type="text/css">
#edui2 div{
height:25px;
}
</style>
</body>
</html>

夺命雷公狗ThinkPHP项目之----企业网站10之栏目的编辑完善(无限极分类的完成)的更多相关文章

  1. 夺命雷公狗ThinkPHP项目之----企业网站9之栏目的列表完善(无限极分类的完成)

    我们刚才已经写好model了,那么这里直接来调用下他即可: public function lists(){ $mod = D('Category')->catTree(); $this -&g ...

  2. 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)

    我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改: 我们先将add方法里面的数据查出来再说: 然后在模板页进行遍历: 展示效果如下所示: 虽然是 ...

  3. 夺命雷公狗ThinkPHP项目之----企业网站11之栏目的删除完成

    我们删除要在分类模型中添加一个_before_delete的钩子函数,而且在删除一个分类时候,如果这个分类有子分类就不允许删除 model层代码如下所示: <?php namespace Adm ...

  4. 夺命雷公狗ThinkPHP项目之----企业网站7之栏目的修改(主要用模型来验证字段)

    我们照老,在控制器里面先查出我们所需要用到的数据: 然后直接遍历到模版上即可: 然后再开始写提交过来的数据处理问题(注意一定要接收修改页面通过隐藏域)而且我们刚才已经写好我们的model层了,所以直接 ...

  5. 夺命雷公狗ThinkPHP项目之----企业网站6之栏目的添加(主要用模型来验证字段)

    我们刚才的控制器已经写好了,那么我们现在就来完成我们的模型, 首先我们在Model目录下创建一个CategoryModel.class.php 代码如下: <?php namespace Adm ...

  6. 夺命雷公狗ThinkPHP项目之----企业网站5之栏目的添加(主要是图片上传)

    我们照老,先老搞定控CategoryController.class.php制器,代码如下所示: <?php namespace Admin\Controller; use Think\Cont ...

  7. 夺命雷公狗ThinkPHP项目之----企业网站1之快速搭建后台

    我们还是老规矩照老方法,将框架里面多余的东西都干掉,然后在index.php里面将框架搭建起来 <?php //定义项目目录 define('APP_PATH','./WEB/'); //开启调 ...

  8. 夺命雷公狗ThinkPHP项目之----企业网站28之网站前台左侧导航的实现

    我们基于刚才在model层的找顶级分类的代码在进行修改即可: <?php namespace Home\Controller; use Think\Controller; class Commo ...

  9. 夺命雷公狗ThinkPHP项目之----企业网站27之网站前台单页的完成(从百度编辑器里面取出文章数据)

    我们的单页面里主要是为了可以取出文章分类表的栏目内容,废话先不说, 我们的实现要点: 1...获取get过来的栏目cate_id 2...然后用条件查询栏目表 <?php namespace H ...

随机推荐

  1. 1006 最长公共子序列Lcs

    1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdks ...

  2. 实验一补充内容 Java开发环境的熟悉-刘蔚然

    本次实验 PSP时间统计 步骤 耗时百分比 需求分析 5% 设计 10% 代码实现 67% 测试 15% 分析总结 3%

  3. [LeetCode]题解(python):050-Pow(x, n)

    题目来源 https://leetcode.com/problems/powx-n/ Implement pow(x, n). 题意分析 Input: x,n Output:pow(x,n) Cond ...

  4. Ubuntu 14.04安装OpenCV 3.1

    从OpenCV官网上下载OpenCV官网上下载OpenCV的未编译源代码: 点击这里 国内很多网络打开OpenCV官网速度缓慢,可以点击如下地址直接从GitHub上下载OpenCV 3.1的源代码 下 ...

  5. JS之tagNaem和nodeName

    nodeName是节点的属性,tagName是元素的属性.元素是节点的子集.不是任何节点都有tagName的,比如文本节点,仅有nodeName属性. 这个和css中的倾斜和斜体的关系是一样的.不是所 ...

  6. 查看CentOS上Apache位置,版本,停止,启动

    查看Apache是否被安装: [root@asg11 ~]# find / -name 'httpd'/etc/sysconfig/httpd/etc/httpd/etc/logrotate.d/ht ...

  7. iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)

    由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中.自动 ...

  8. 面试&笔试常见题,你了解多少?

    HTML:1.  什么是语义化的HTML?有何意义?为什么要做到语义化?(高频率考题)2.  行内元素和块元素分别有哪些?(高频率)3.  严格模式与混杂模式的区分?如何触发这两种模式?(高频率)4. ...

  9. 打印出1,11,21,31,41。。。。。。的shell脚本

    打印出1,11,21,31,41......的shell脚本 方法一:#!/bin/bash ;i<;i=i+));do echo $i #cat -n /etc/services | sed ...

  10. error LNK2005 int __cdecl 解决方案【转】

    error LNK2005: "int __cdecl isPtInPolygon(class std::vector<struct double2,class std::alloca ...