问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp怎么做无线级分类?

发布网友 发布时间:2022-04-07 06:27

我来回答

3个回答

懂视网 时间:2022-04-07 10:49

本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP常用功能之一,非常具有实用价值。现将完整实例分享给大家,供大家参考。

ThinkPHP无限分类的使用

具体实现步骤如下(本文采用TP框架的3.1.3版本):

(推荐教程:thinkphp教程)

第一步:表aoli_cate如下图所示

CREATE TABLE `fenlei` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
 `name` varchar(255) DEFAULT NULL COMMENT '父id',
 `pid` int(255) NOT NULL COMMENT '名字',
 `path` varchar(20) DEFAULT NULL,//path字段是给数据排序用
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
insert into fenlei(id,name,pid,path) values
(1,’新闻’,0,’0’),
(2,’中国新闻’,1,’0-1’),//path 最后一个数据是排序用的
(3,’美国新闻’,1,’0-1’),
(4,’北京新闻’,2,’0-1-2’),
(5,’华盛顿新闻’,3,’0-1-3’),
(6,’日本新闻’,1,’0-1’);

20151211141515025.png

第二步:action部分

aoli/Home/Lib/Action/CataAction.class.php文件如下:

<?php
class CateAction extends Action{
 function index(){
 //实例化cate
 $cate=M('cate');
 //获取数据
 //将path和id连接起来,组合成为bpath数组
 $list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();
 foreach($list as $key=>$value){
 //在查询获取的数组里面增加一个'count'数组;
 //统计bpath字段的字符串个数,并赋值给'count'数组。
 $list[$key]['count']=count(explode('-',$value['bpath']));
 }
 //展示数据
 $this->assign('alist',$list);
 $this->display(); 
 }
 //添加栏目
 function add(){
 //实例化CateModel类
 $cate=new CateModel();
 //如果从CateModel模型接受数据成功
 if($vo=$cate->create()){
 //执行添加
 if($cate->add()){
 $this->success('添加栏目成功'); 
 }else{
 $this->error('添加栏目失败'); 
 }
 //dump($vo); 
 }else{
 //返回错误信息
 $this->error($cate->getError()); 
 }
 }
}
?>

第三步:模型部分

aoli/Home/Lib/Model/CataModel.class.php文件如下:

<?php
class CateModel extends Model{//对应数据库中的表aoli_cate
 //在Model类定义 $_auto 属性,可以完成数据自动处理功能,用来处理默认值、数据过滤以及其他系统写入字段。$_auto属性是由多个填充因子组成的数组。
 protected $_auto=array(
 //示例 
 //对name字段在新增的时候回调getName方法
 //array('name','getName',1,'callback'),
 //'path'填充字段
 //'tclm'回调函数
 // 3 新增数据和更新数据的时候都处理
 // callback :回调方法 ,表示填充的内容是一个当前模型的方法
 array('path','tclm',3,'callback'), 
 ); 
 //回调函数
 function tclm(){
 //如果pid存在,就转成整形,不存在就赋值0,表示是根目录
 $pid=isset($_POST['pid'])?(int)$_POST['pid']:0;
 //可以查看pid
 //echo ($pid);
 //如果是根目录,就是在select表单没有选任何值提交的时候
 if($pid==0){
 //
 $data=0;
 }else{
 //如果id和pid相等
 $list=$this->where("id=$pid")->find();
 //把回调值$data赋值
 $data=$list['path'].'-'.$list['id'];//子类的path为父类的path加上父类的id
 }
 //回调值
 return $data; 
 }
}
?>

第四步:view视图部分

<!--提交到本类的add方法-->
<form action="__URL__/add" method="post">
//size="20"可以将select 框变大
 请选择父级栏目:<select name="pid" size="20">
  //value="0"表示为根目录
  <option value="0">根栏目</option>
  //展示数据
  <volist name="alist" id="vo">
  <option value="{$vo['id']}">
  <php>
  <!--以字段count统计出来的,path字段里面含的字符串来做总数-->
  for($i=0;$i<$vo['count'];$i++){
  //在值前面添加空格
  echo  '; 
  }
  </php>
  //输出值
  {$vo['name']}
  </option>
  </volist>
 </select><br />
 新的栏目名称:<input type="text" name="name" /><br />
 <input type="submit" value="添加栏目" />
</form>

热心网友 时间:2022-04-07 07:57

以3.1为例
function classadd(){

$FileArray = array(

'fileid' => 'id',
'filepid' => 'pid', //如果pid不传递的话,则自动读取所有数据,就不存在多级的操作
'filesort' => 'sort',
'filename' => 'text',
'tablename' => '表名',
'treeurl' => './classadd', //ajax的url地址
'checkbox' => 1, //是否开启复选框
'addnode' => 1, //是否开启新增下级
'operating' => 1, //操作
'sort' => 1, //排序
'name' => 1, //名称
'form' => 1, //form表单
'dbeditor' => 1, //双击编辑名称
);
/* 如果当前分类表不存在关联表的影响,关联表删除,键名:数据表名,键值:关联的字段名称 */
//$Linked = array('kjt_tests'=>'id');
$TreeObj = new TreeModel($FileArray, $Linked);
$dd = $TreeObj->GetTreeDataHtml();
$this->assign('staing', $dd); //变量放到 html页面上去就OK了
$this->display();

}

/************************/
模版为显示为
{staing}

热心网友 时间:2022-04-07 09:15

参照官方里边的例子和详细的操作说明,SO EASY.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 物业收费不合理可以向什么单位投诉 投诉乱收费到哪个部门 公交车收费不合理怎么投诉 开发商不合理收费如何投诉 牙科诊所收费不合理怎么投诉 物业收费不合理找哪个部门投诉 声优哄人入睡的app 房租不合理收费怎么投诉, 暗堡的演职人员 物业收费不合理找哪个部门投诉? 物业公司收费不合理去哪里投诉 乱收费怎么投诉 遇到乱收费需要向哪个部门投诉 瑞典lelo tiani蒂阿妮网上哪里有? tiani 24k和tiani 3区别 快手封面用什么图片长粉快 红木椅上的小桌子是什么用途? 芝麻油能擦红木椅子吗? 草花梨木的椅子和红木椅子的价格相差多少 15万以内的红木家具买啥木的好点,椅子加茶几? 镍的活动性比铁强吗 如何比较金属铬与镍的活动性 为什么铬很耐腐蚀? 一辆18码的手扶挠地车有多重 手扶201低牌多少斤 常优牌cyp121手扶拖拉机重量 如何使用金山卫士卸载不常用的软件 手扶拖拉机能拉多少吨? 东风12型手扶拖拉机底盘多少公斤 24马力农用小型拖拉机有多重? 我电脑上安有金山毒霸软件,请问我如何用它卸载需要卸载的软件? vivo手机百度输入法怎么设置回车键发消息? 12马力的拖拉机能拉多重? 请问拖拉机的载重量是多少 怎么删除金山在电脑里的各种插件 10匹手扶拖拉机能拉多少吨? vivo手机按回车键直接发送信息在哪关闭 自重1.6吨,手扶拖拉机能拉吗? vivoy33输入法回车键发送怎么弄 vivo手机回车键怎么设置为发短信