`
石小阳
  • 浏览: 1558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

php无限分类列表页

 
阅读更多

接上php无限分类

先写index方法因为直接赋值刚才那个过来即可

public function index(){
            $cats = D('category')->catTree();
            $this -> assign('cats',$cats);
            $this -> display();
        }

 然后在view下的index.html模版里进行遍历

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SHOP 管理中心 - 商品分类 </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" />
<link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>

<h1>
<span class="action-span"><a href="__MODULE__/category/add">添加分类</a></span>
<span class="action-span1"><a href="index.php?p=admin&c=index&a=index">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 商品分类 </span>
<div style="clear:both"></div>
</h1>

<form method="post" action="" name="listForm">
<!-- start ad position list -->
    <div class="list-div" id="listDiv">
        <table width="100%" cellspacing="1" cellpadding="2" id="list-table">
            <tbody>
                <tr>
                    <th>分类名称</th>
                    <th>商品数量</th>
                    <th>数量单位</th>
                    <th>导航栏</th>
                    <th>是否显示</th>
                    <th>价格分级</th>
                    <th>排序</th>
                    <th>操作</th>
                </tr>
        <volist name="cats" id="vo">
                <tr align="center" class="0" id="0_1">
          <td align="left" class="first-cell">
          {$vo['level']|str_repeat="&nbsp;&nbsp;&nbsp;&nbsp;",###}
                        <img src="__ADMIN__/images/menu_minus.gif" id="icon_0_1" width="9" height="9" border="0" style="margin-left:0em" onclick="rowClicked(this)">
                        <span><a href="goods.php?act=list&amp;cat_id=1">{$vo['cat_name']}</a></span>
                     </td>
                    
          <td width="10%">0</td>
                    
          <td width="10%"><span onclick="listTable.edit(this, 'edit_measure_unit', 1)" title="点击修改内容" style="">{$vo['unit']}</span></td>
                    
          <td width="10%"><img src="__ADMIN__/images/no.gif" onclick="listTable.toggle(this, 'toggle_show_in_nav', 1)"></td>
                    
          <td width="10%"><img src="
            <if condition="$vo['is_show'] eq 1">
            __ADMIN__/images/yes.gif"
            <else />
            __ADMIN__/images/no.gif"
            </if>
             onclick="listTable.toggle(this, 'toggle_is_show', 1)"></td>
                    
          <td><span onclick="listTable.edit(this, 'edit_grade', 1)" title="点击修改内容" style="">5</span></td>
                    
          <td width="10%" align="right"><span onclick="listTable.edit(this, 'edit_sort_order', 1)" title="点击修改内容" style="">{$vo['sort_order']}</span></td>
                    <td width="24%" align="center">
                        <a href="category.php?act=move&amp;cat_id=1">转移商品</a> |
                        <a href="__CONTROLLER__/edit/id/{$vo['cat_id']}">编辑</a> |
                        <a href="__CONTROLLER__/del/id/{$vo['cat_id']}" onclick="return confirm('您是否真的删除这个品牌呢?')" title="移除">移除</a>
                    </td>
                </tr>
        </volist>
    </tbody>
  </table>
</div>
</form>

  </table>
</div>
</form>


<div id="footer">
    版权所有 &copy; 2014-2016 夺命雷公狗 - 技术总结 - </div>
</div>
 <script>
    /**
 * 折叠分类列表
 */
var imgPlus = new Image();
imgPlus.src = "application/views/admin/images/menu_plus.gif";

function rowClicked(obj)
{
  // 当前图像
  img = obj;
  // 取得上二级tr>td>img对象
  obj = obj.parentNode.parentNode;
  // 整个分类列表表格
  var tbl = document.getElementById("list-table");
  // 当前分类级别
  var lvl = parseInt(obj.className);
  // 是否找到元素
  var fnd = false;
  var sub_display = img.src.indexOf('menu_minus.gif') > 0 ? 'none' : 'table-row' ;
  // 遍历所有的分类
  for (i = 0; i < tbl.rows.length; i++)
  {
      var row = tbl.rows[i];
      if (row == obj)
      {
          // 找到当前行
          fnd = true;
          //document.getElementById('result').innerHTML += 'Find row at ' + i +"<br/>";
      }
      else
      {
          if (fnd == true)
          {
              var cur = parseInt(row.className);
              var icon = 'icon_' + row.id;
              if (cur > lvl)
              {
                  row.style.display = sub_display;
                  if (sub_display != 'none')
                  {
                      var iconimg = document.getElementById(icon);
                      iconimg.src = iconimg.src.replace('plus.gif', 'minus.gif');
                  }
              }
              else
              {
                  fnd = false;
                  break;
              }
          }
      }
  }

  for (i = 0; i < obj.cells[0].childNodes.length; i++)
  {
      var imgObj = obj.cells[0].childNodes[i];
      if (imgObj.tagName == "IMG" && imgObj.src != 'application/views/admin/images/menu_arrow.gif')
      {
          imgObj.src = (imgObj.src == imgPlus.src) ? 'application/views/admin/images/menu_minus.gif' : imgPlus.src;
      }
  }
}
</script>
</body>
</html>

 效果如下图所示:



 
显示列表也有了,那么下一步就开始写更新页了

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SHOP 管理中心 - 添加分类 </title>
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" />
<link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>

<h1>
<span class="action-span"><a href="index.php?p=admin&c=category&a=index">商品分类</a></span>
<span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加分类 </span>
<div style="clear:both"></div>
</h1>
<!-- start add new category form -->
<div class="main-div">
  <form action="category.php" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">
     <table width="100%" id="general-table">
        <tbody>
            <tr>
                <td class="label">分类名称:</td>
                <td><input type="text" name="cat_name" maxlength="20" value="{$cat['cat_name']}" size="27"> <font color="red">*</font></td>
            </tr>
            <tr>
                <td class="label">上级分类:</td>
                <td>
                    <select name="parent_id">
                        <option value="0">顶级分类</option>
                        <volist name="cats" id='vo'>
                            <option value="{$vo['cat_id']}"
                            <if condition="$vo['cat_id'] eq $cat['parent_id']" >selected="selected"</if>
                            >{$vo['level']|str_repeat="&nbsp;&nbsp;&nbsp;",###}{$vo['cat_name']}</option>
                        </volist>     
                    </select>
                </td>
            </tr>

            <tr id="measure_unit">
                <td class="label">数量单位:</td>
                <td><input type="text" name="unit" value="{$cat['unit']}" size="12"></td>
            </tr>
            <tr>
                <td class="label">排序:</td>
                <td><input type="text" name="sort_order" value="{$cat['sort_order']}" size="15"></td>
            </tr>

            <tr>
                <td class="label">是否显示:</td>
                <td><input type="radio" name="is_show" value="1" checked="true"
                <if condition="$cat['is_show'] eq 1">checked="checked"</if>
                > 是<input type="radio" name="is_show" value="0"
                <if condition="$cat['is_show'] eq 0">checked="checked"</if>
                > 否  </td>
            </tr>
            <tr>
                <td class="label">是否显示在导航栏:</td>
                <td><input type="radio" name="show_in_nav" value="1"> 是  <input type="radio" name="show_in_nav" value="0" checked="true"> 否    </td>
            </tr>
            <tr>
                <td class="label">设置为首页推荐:</td>
                <td>
                    <input type="checkbox" name="cat_recommend[]" value="1"> 精品          
                    <input type="checkbox" name="cat_recommend[]" value="2"> 最新          
                    <input type="checkbox" name="cat_recommend[]" value="3"> 热门       
                </td>
            </tr>
      <tr>
        <td class="label">分类描述:</td>
        <td>
          <textarea name="cat_desc" rows="6" cols="48">{$cat['cat_desc']}</textarea>
        </td>
      </tr>
      </tbody></table>
      <div class="button-div">
        <input type="submit" value=" 确定 ">
        <input type="reset" value=" 重置 ">
      </div>
      <input type="hidden" name="cat_id" value="{$cat['cat_id']}" />
  </form>
</div>



<div id="footer">
    版权所有 &copy; 2014-2016 夺命雷公狗 - 技术总结 - 
</div>

</div>

</body>
</html>

 要注意,在编辑的表单中一定要传cat_id,否则更新会失败

<input type="hidden" name="cat_id" value="{$cat['cat_id']}" />

 注意:在更新的时候,如果把当前分类或则其子分类作为上级分类,就会出现逻辑错误..

所以我们要先到model里面定义一个方法,让他不能随便让他的当前分类或者子分类作为上级分类,否则就会出现逻辑上的错误。。

在CategoryModel.class.php里面定义一个方法,代码如下所示:

/给定一个分类,找其后代分类的cat_id,包括他自己
        public function getSubIds($cat_id){
            $cats = $this -> select();
            $list = $this -> tree($cats,$cat_id);
            $res = array();
            foreach($list as $v){
                $res[] = $v['cat_id'];
            }
            //把cat_id追加到数组
            $res[] = $cat_id;
            return $res;
        }

 让后会控制器下定义edit方法,代码如下所示:

//修改分类
        public function edit(){
            $cat_id = I('id');
            if(IS_POST){
                //更新分类
                $data['cat_name'] = I('cat_name');
                $data['parent_id'] = I('parent_id',0,'int');//parent_id通常是整型,所以做个小处理
                $data['cat_desc'] = I('cat_desc');
                $data['unit'] = I('unit');//数量
                $data['is_show'] = I('is_show');
                $data['sort_order'] = I('sort_order');
                $data['cat_id'] = I('cat_id');
                $categoryModel = D('category');

                $ids = $categoryModel->getSubIds($data['cat_id']);
                if(in_array($data['parent_id'],$ids)){
                    $this -> error('抱歉,不能把当前分类及其子分类作为其上级分类');
                }

                if($categoryModel->create($data)){
                    //验证通过
                    if($categoryModel->save()){
                        //插入成功
                        $this -> success('分类信息修改成功',U('index'),1);
                    }else{
                        //插入失败
                        $this -> error('分类信息修改失败');
                    }
                }else{
                    //验证失败
                    $this -> error($categoryModel->getError());
                }
                return;
            }
            $cat = M('category')->find($cat_id);
            $cats = D('category')->catTree();
            $this -> assign('cats',$cats);
            $this -> assign('cat',$cat);
            $this -> display();
        }

 

修改也好了,那么就差最后一步了,还差删除分类的了,代码如下所示:

//删除分类
        public function del(){
            $cat_id = I('id',0,'int');
            $categoryModel = D('category');
            $ids = $categoryModel->getSubIds($cat_id);//这里的目的就是查下有没有子类
            if(count($ids)>1){
                $this ->error("该分类下面还存在子分类,请处理好了再来");
            }
            if(M('category')->delete($cat_id)){
                $this -> success('删除成功',U('index'),1);
            }else{
                $this ->error('删除失败');
            }
        }

 

  • 大小: 71.6 KB
分享到:
评论

相关推荐

    php无限级分类 无限级分类

    无限级分类允许我们创建一个可以无限深度扩展的分类系统,无需预先设定最大层级。下面我们将深入探讨PHP实现无限级分类的方法、常见算法以及如何结合SQL数据库进行操作。 首先,无限级分类的核心在于每个分类都有一...

    php实现无限分类php实现无限分类

    在PHP编程中,无限分类是一种常见的需求,尤其在处理如商品分类、文章分类等具有层级关系的数据时。无限分类允许我们构建任意深度的分类结构,而不限制父类与子类的数量。以下将详细介绍如何使用PHP实现无限分类,并...

    ajax+php+无限级分类

    这些数据可以用于前端动态渲染分类列表,用户可以点击展开或折叠各个层级的分类。 `sql.txt`文件则可能包含了初始化数据库表结构的SQL语句,比如创建一个名为`categories`的表,包含`id`(主键)、`name`(分类名称...

    ajax php mysql 无限级分类

    本项目结合了Ajax、PHP和MySQL技术来实现这一功能,下面将详细介绍这三个技术在无限级分类中的应用。 首先,让我们了解一下**Ajax**。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况...

    PHP无限分类的原理.

    在PHP编程中,无限分类是一种常见的数据组织方式,特别是在处理如商品分类、文章分类等具有层级关系的数据时。本文将详细解析PHP实现无限分类的原理,并通过递归的应用来阐述其实现过程。 首先,理解无限分类的核心...

    php无限级别分类

    php无限级别分类

    php无限分类管理与级联选单

    下面将详细介绍如何实现PHP无限分类管理和级联下拉选单。 首先,我们需要一个基础的数据表来存储分类信息。通常,这个表会包含`id`(主键)、`name`(分类名称)、`parent_id`(父分类ID)和`level`(分类级别)等...

    php 无限级分类 带分类路径

    PHP作为一门广泛使用的服务器端脚本语言,提供了处理无限级分类的能力,使得我们可以构建出灵活且易于管理的分类系统。下面将详细介绍如何在PHP中实现无限级分类并携带分类路径。 无限级分类通常涉及到树形结构的...

    php无限分类树类方法

    `php无限分类树类方法`可能是实现上述功能的PHP源代码文件。 通过以上方法,我们可以有效地在PHP中管理和操作无限分类树,提高应用的可维护性和效率。理解并熟练运用这些技术对于PHP开发者来说是至关重要的,特别是...

    php+jquery无限级分类

    1. **无限级分类的概念**:无限级分类允许类别拥有无限数量的子类,这在大型网站中非常有用,因为它可以灵活地组织大量内容,且易于扩展。例如,在电商网站中,商品可以被归类到品牌 -&gt; 类别 -&gt; 子类别 -&gt; 更细分的...

    php无限分类例子,源码。

    以下是对这个PHP无限分类源码的详细解析。 1. **无限分类原理** 无限分类通常基于自引用关联或层级标识符(如“路径”或“深度”)来实现。在这个例子中,可能使用了后者,即通过在数据库中为每个分类添加一个表示...

    php递归实现无限级分类库

    这个数组可以直接用于模板渲染,展示出层次分明的分类列表。 在`cate-master`文件中,可能包含了实现这个功能的代码和示例数据。你可以解压并查看源码,理解其具体实现。通常,这个库会包含一个模型类,用于与...

    php的无限级分类代码

    采用php语言编写的无限级分类程序,使用递归实现的无限极分类!

    快速无限分类PHP

    快递处理无限分类,可按指定父ID获取所有子类,且可以获取指定层数的子类

    php无限分类代码

    php无限分类代码php无限分类代码php无限分类代码php无限分类代码php无限分类代码

    php无限级分类菜单类.zip

    而这些关联的数据并不复杂,其实一个优秀的后台设计,应该是无限的分类,这样,在进行二次开发时,不用再单独进行编程了,只要是功能一样,后台添加一个分类就可以了,这样就达到了功能共享了。

    PHP无限分类

    实现PHP无限分类,主要涉及到以下几个关键技术点: 1. **递归函数**:这是最常见的实现方式,通过递归调用来遍历并生成层级关系。递归函数会在每个分类下检查是否有子分类,并递归地处理它们。例如,可以创建一个名...

    无限级分类(数组方法)

    4. **遍历无限分类**:遍历无限分类数组通常有两种方式:深度优先搜索(DFS)和广度优先搜索(BFS)。DFS常使用递归,先访问子节点再访问父节点;BFS则使用队列,先访问父节点再访问子节点。根据应用场景选择合适的...

    PHP无限分类[增强版].zip

    "PHP无限分类[增强版]"是一个专门解决这类问题的PHP类库,它能够帮助开发者高效地管理和构建无限级别的分类结构。 这个增强版的PHP无限分类库包含了以下关键功能: 1. **生成树型结构的2维数组**:在数据库中存储...

Global site tag (gtag.js) - Google Analytics