Thinkphp无限极菜单只需4步

特别声明:下面采用的是3.1.3版本的如果3.2.3版本只需改Action名称和类的引用,希望对大家有帮助;谢谢!!

 

第一,把下面的类放入一个文件夹中,需要引入它

<?php
class
Category{
  
static publicfunction Recursion($cate, $html='--', $pid=0, $lever=0){
     
$arr=array();
      foreach
($cate as $v) {
        
if ($v['pid']==$pid) {
           
$v['lever']=$lever+1;
           
$v['html']=str_repeat($html, $lever);
           
$arr[]=$v;
           
$arr=array_merge($arr,self::Recursion($cate, $html, $v['id'], $lever+1)
               )
;
        
}
      }
      
return $arr;
  
}
  
//组合多维数组
  
static publicfunction Recursion_two($cate, $name="child", $pid=0){
     
$arr=array();
      foreach
($cate as $v) {
        
if ($v['pid']==$pid) {
           
$v[$name]=self::Recursion_two($cate, $name, $v['id']);
           
$arr[]=$v;
         
}
      }
     
return $arr;
  
}
  
//传递一个子分类ID返回的父级分类
  
static publicfunction Recursion_three($cate, $id){
     
$arr=array();
      foreach
($cate as $v) {
        
if ($v['id']==$id) {
           
$arr[]=$v;
           
$arr=array_merge(self::Recursion_three($cate, $v['pid']),$arr);         
        
}
      }
     
return $arr;
  
}
  
//传递一个父分类ID返回的子级分类ID
  
static publicfunction Recursion_four($cate,$pid){
     
$arr=array();
      foreach
($cate as $v) {
        
if ($v['pid']==$pid) {
            
$arr[]=$v['id'];
           
$arr=array_merge($arr, self::Recursion_four($cate, $v['id']));      
        
}
      }
     
return $arr;
  
}
  
static publicfunction Recursion_five($cate$pid){
     
$arr=array();
      foreach
($cate as $v) {
         
if ($v['pid']==$pid) {
           
$arr[]=$v;
           
$v[$name]=array_merge($arr, self::Recursion_five($cate, $v['id']));         
        
}
      }
     
return $arr;
  
}
}

 

第二步在控制器中建立控制器

代码如下

<?php
/*
 *
 * 无限极菜单分类
 *
 * */
class CategoryAction extends CommonAction {
    public function index(){
      import('Data.Category',APP_PATH);
        $cate=M('cate')->order('sort ASC')->select();
        $cate=Category::Recursion($cate);
        $this->cate=$cate;
        $this->display();
    }
    public function addCate(){
        //$this->pid=I('pid',0);
        $this->pid=isset($_GET['pid']) ? $_GET['pid'] : 0;
        $this->display();
    }
    public function runAddCate(){
        if(M('cate')->add($_POST)){
            $this->success('添加成功',U(GROUP_NAME.'/Category/index'));
        }else{
            $this->error('添加失败');
        }
    }
    //菜单排序
    public function sortCate(){
        $db=M('cate');
        foreach ($_POST as $id => $sort) {
            $db->where(array('id'=>$id))->setField('sort',$sort);
        }
        $this->redirect(GROUP_NAME.'/Category/index');
    }
    public function upd(){
        $pid=(int)$_GET['pid'];
        $cate=M('cate');
        $info=$cate->find($pid);
        $this->assign('info',$info);
        if(!empty($_POST)){
            $upd=$cate->save($_POST);
            if($upd){
                $this->success('修改成功',U(GROUP_NAME.'/Category/index'));
            }
        }else{
            $this->display();
        }
    }
    public function del(){
        $pid=$_GET['pid'];
        if($pid){
            $User = M("cate");
            $User->delete($pid);
            $this->success('删除成功',U(GROUP_NAME.'/Category/index'));
        }
    }
}

第三步,

需要在Tpl文件下建立三个文件

1、Index.html主要代码如下

<form action="{:U(GROUP_NAME.'/Category/sortCate')}" method="post">
    <table class="table"  border="1">
        <thead>
        <tr>
            <td>ID</td>
            <td>名称</td>
            <td>级别</td>
            <td>排序</td>
            <td>操作</td>
        </tr>
        <foreach name='cate' item='v'>
            <tr>
                <td>{$v.id}</td>
                <td>{$v.html}{$v.name}</td>
                <td>{$v.lever}</td>
                <td>
                    <input type="text" name="{$v.id}" value='{$v.sort}'>
                </td>
                <td>
                    [<a href="{:U(GROUP_NAME.'/Category/addCate',array('pid'=>$v['id']))}">添加子分类</a>]
                    [<a href="{:U(GROUP_NAME.'/Category/upd',array('pid'=>$v['id']))}">修改</a>]
                    [<a href="{:U(GROUP_NAME.'/Category/del',array('pid'=>$v['id']))}">删除</a>]
                </td>
            </tr>
        </foreach>
        <tr>
            <td colspan="5" align="center">
                <input type="submit" value="排序">
            </td>
        </tr>
        </thead>
    </table>
</form>

2、建立文件addCate.html主要代码如下:

<div class="xs">
    <h3>添加分类</h3>
    <div class="well1 white">
        <form action="{:U(GROUP_NAME.'/Category/runAddCate')}"  method="post" class="form-floating ng-pristine ng-invalid ng-invalid-required ng-valid-email ng-valid-url ng-valid-pattern" novalidate="novalidate" ng-submit="submit()">
            <fieldset>
                <div class="form-group">
                    <label class="control-label">分类栏目名称:</label>
                    <input type="text"name="name" class="form-control1 ng-invalid ng-invalid-required ng-touched" ng-model="model.name" required="">
                </div>
                <div class="form-group">
                    <label class="control-label">排序:</label>
                    <input type="text" name="sort"  class="form-control1 ng-invalid ng-invalid-required ng-touched" ng-model="model.name" required="">
                </div>
                <div class="form-group">
                    <input type="hidden" name="pid" value='{$pid}' />
                    <button type="submit" class="btn btn-primary">保存添加</button>
                </div>
            </fieldset>
        </form>
    </div>

3、upd.html主要代码如下

<form action="{:U(GROUP_NAME.'/Category/upd')}"  method="post" class="form-floating ng-pristine ng-invalid ng-invalid-required ng-valid-email ng-valid-url ng-valid-pattern" novalidate="novalidate" ng-submit="submit()">
    <fieldset>

        <div class="form-group">
            <label class="control-label">ID:</label>
            <input type="text" value="{$info.id}" name="id"  class="form-control1 ng-invalid ng-invalid-required ng-touched" ng-model="model.name" required="">
        </div>
        <div class="form-group">
            <label class="control-label">分类栏目名称:</label>
            <input type="text" value="{$info.name}" name="name" class="form-control1 ng-invalid ng-invalid-required ng-touched" ng-model="model.name" required="">
        </div>
        <div class="form-group">
            <label class="control-label">排序:</label>
            <input type="text" value="{$info.sort}" name="sort"  class="form-control1 ng-invalid ng-invalid-required ng-touched" ng-model="model.name" required="">
        </div>
        <div class="form-group">
            <input type="hidden" name="pid" value='{$info.pid}' />
            <button type="submit" class="btn btn-primary">保存修改</button>
        </div>
    </fieldset>
</form>

 

第四步、剩下就是建立数据表了

代码如下

CREATE TABLE `cate` (

`id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,

`name`  char(15) CHARACTER SET utf8 COLLATEutf8_general_ci NOT NULL ,

`pid`  int(10) UNSIGNED NOT NULL ,

`sort`  smallint(6) NOT NULL ,

PRIMARY KEY (`id`),

INDEX `pid` (`pid`) USINGBTREE ,

INDEX `id` (`id`, `name`,`pid`, `sort`) USING BTREE

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=utf8COLLATE=utf8_general_ci

AUTO_INCREMENT=30

ROW_FORMAT=COMPACT

;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值