yii框架无限极分类的实现方法


Posted in PHP onApril 08, 2017

用yii框架做了一个无限极分类,主要的数组转换都是粘贴的别人的代码,但还是不要脸的写出来,方便以后自己看

用的是递归,不是path路径

控制器:

protected function subtree($arr,$id=0,$lev=1){
    $subs = array(); // 子孙数组
    foreach($arr as $v) {
      if($v['parent_id'] == $id) {
        $v['lev'] = $lev;
        $subs[] = $v; // 举例说找到array('id'=>1,'name'=>'安徽','parent'=>0),
        $subs = array_merge($subs,$this->subtree($arr,$v['cat_id'],$lev+1));
      }
    }
    return $subs;
  }

public function actionCreate()
  {
    $model = new EcsCategory();
    $query = new \yii\db\Query();
    $query->select('*')
      ->from('ecs_category');
    $command = $query->createCommand();
    $res=$command->queryAll();
    $tree = $this->subtree($res,0,1);
    foreach($tree as $k=> $v) {
      $tree[$k]['new_cat_name']=str_repeat('--',$v['lev']).$v['cat_name'].str_repeat('--',$v['lev']); //str_repeat — 重复一个字符串
    }
    $arr=array(
      'new_cat_name'=>'顶级分类',
      'cat_id'=>0
    );
    array_unshift($tree,$arr);
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
      return $this->redirect(['view', 'id' => $model->cat_id]);
    } else {
      return $this->render('create', [
        'model' => $model,
        'data'=>$tree,
      ]);
    }
  }

视图:

use \yii\helpers\ArrayHelper;

<?= $form->field($model, 'parent_id')->dropDownList(ArrayHelper::map($data,'cat_id','new_cat_name') ,['prompt' => '请选择父级分类']) ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
set_include_path在win和linux下的区别
Jan 10 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
基于php iconv函数的使用详解
Jun 09 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
PHP下载远程图片的几种方法总结
Apr 07 #PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 #PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 #PHP
php 根据自增id创建唯一编号类
Apr 06 #PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 #PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 #PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 #PHP
You might like
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
javascript基础知识
2016/06/07 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
python操作MongoDB基础知识
2013/11/01 Python
Python 抓取动态网页内容方案详解
2014/12/25 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
AJAX的全称是什么
2012/11/06 面试题
秋季运动会广播稿
2014/02/22 职场文书
岗位竞聘书范文
2014/03/31 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
财产保全担保书
2015/01/20 职场文书
小学国庆节活动总结
2015/03/23 职场文书
面试通知短信
2015/04/20 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python