php的菜单目录分类
博客专区 > dzb3688 的博客 > 博客详情
php的菜单目录分类
dzb3688 发表于3年前
php的菜单目录分类
  • 发表于 3年前
  • 阅读 62
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

摘要: 实现无级分类

表结构如下:

CREATE TABLE `menu_category` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL COMMENT '标题名称',
  `uid` int(11) NOT NULL COMMENT 'shop_id',
  `level` tinyint(4) NOT NULL COMMENT '分类等级',
  `parentid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父编号  顶级为0',
  `image` varchar(100) NOT NULL,
  `description` mediumtext NOT NULL,
  `url` varchar(100) NOT NULL,
  `listorder` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ismenu` tinyint(1) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='菜单分类管理';

Yii Controller代码:

    /**
     * 菜单设置
     */
    public function actionMenu() {

        $menuModel = MenuCategory::model();
        $cri = new CDbCriteria();
        $cri->alias = 'a';
        $cri->select = 'a.*';
        $cri->addCondition(" a.uid =:uid");
        $cri->params[':uid'] = $this->user;
        $cri->order = ' a.level asc, a.parentid asc,a.id ASC';
        $data = $menuModel->findAll($cri);
        $data_sort = self::sortr($data);

        $this->display(array(
            'data' => $data_sort,
        ));
    }

    /**
     * 排序
     */
    static protected function sortr($data_sorta) {
        $data_sort = array();
        $ret = array();
        foreach ($data_sorta as $value) {
            $data_sort[$value['level']][$value['parentid']][$value['id']] = $value;
        }
        foreach ($data_sort as $sort_fid) {
            foreach ($sort_fid as $fid => $childs) {
                if ($fid == 0) {
                    $ret = $ret + $childs;
                } else {
                    $ret = self:: insert_after($ret, $fid, $childs);
                }
            }
        }

        return $ret;
    }

    /**
     *  在对应的key的数组元素后插入 数组元素
     */
    static protected function insert_after($arr, $key, $insert) {
        $position = array_search($key, array_keys($arr));
        if ($position === false) {
            $position = count($arr);
        } else {
            $position++;
        }
        $before = array_slice($arr, 0, $position, true);
        $after = array_slice($arr, $position, null, true); 
        return $before + $insert + $after;
    }

打印数组结构,排序如下:

Array
(
    [1] => Array
        (
            [name] => 关于我们
            [id] => 1
            [parentid] => 0
            [level] => 0
        )

    [2] => Array
        (
            [name] => 企业文化
            [id] => 2
            [parentid] => 1
            [level] => 1
        )

    [3] => Array
        (
            [name] => 新闻中心
            [id] => 3
            [parentid] => 0
            [level] => 0
        )

    [4] => Array
        (
            [name] => 公司新闻
            [id] => 4
            [parentid] => 3
            [level] => 1
        )

    [12] => Array
        (
            [name] => 公司内部新闻
            [id] => 12
            [parentid] => 4
            [level] => 2
        )

    [5] => Array
        (
            [name] => 行业新闻
            [id] => 5
            [parentid] => 3
            [level] => 1
        )

    [13] => Array
        (
            [name] => 2013行业新闻
            [id] => 13
            [parentid] => 5
            [level] => 2
        )

    [14] => Array
        (
            [name] => 2014行业新闻
            [id] => 14
            [parentid] => 5
            [level] => 2
        )

    [15] => Array
        (
            [name] => 最新动态
            [id] => 15
            [parentid] => 14
            [level] => 3
        )

)

Yii Views代码:

<table style="width:1002px; margin: 0 auto" border="0"  cellspacing="0">
     <thead>  
       <th align="center" bgcolor="#4e9ed6" style="color:#fff">id</th>
       <th align="center" bgcolor="#4e9ed6" style="color:#fff;"  >菜单 名称</th> 
       <th align="center" bgcolor="#4e9ed6" style="color:#fff">菜单深度等级</th>
       <th align="center" bgcolor="#4e9ed6" style="color:#fff">操作</th>
      </thead>                              
       <tbody> 
<?php
/**
 * 等级深度收缩
 */
function levell($level, $next_level = 0) {
    $str = '';
    if ($level != 0) {
        for ($i = 0; $i < $level; $i++) {
            if ($i + 1 == $level) {
                if ($next_level == $i || $next_level == 'end') {
                    $str.='  &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; └─';
                } else {
                    $str.=' &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ├─';
                }
            } else {
                $str.='  &nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; │';
            }
        }
        return $str;
    }
}
foreach ($data as $key => $value) {
    $datakey_sort[] = $value;
}
if (!empty($data)) {
    $i = 0;
    foreach ($data as $key => $value) {
?>
<tr id="tr_c_<?php echo $value['id'] ?>">  
    <td><?php echo $value['id']; ?> </td>           
    <td style="float: left;"><?php echo levell($value['level'], array_key_exists($i + 1, $datakey_sort) ? $datakey_sort[$i + 1]['level'] : 'end' ); ?><?php echo $value['name']; ?></td> 
    <td><?php echo $value['level']; ?> </td>
    <td><?php echo $value['level'] == 3 ? '' : '<a href="javascript:;" class="addsub">添加子菜单| </a>' ?>  <a href="<?php echo $this->createUrl('site/menuedit', array('id' => $value['id'])) ?>"> 修改| </a>   <a href="javascript:;" class="del">删除</a> </td> 
</tr>
<?php
$i++;
         }
     }
  ?> 
 </tbody>
</table>

显示结果:


共有 人打赏支持
粉丝 7
博文 40
码字总数 10255
×
dzb3688
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: