ThinkPHP利用数据库字段做栏目的无限分类
一直以来对cms后台的栏目管理不太理解,尤其是子栏目顶级栏目这种关系,通过网上的搜索与自己的摸索,实现方法如下(原理是利用数据库的path字段):
1、建立简单的栏目表:
CREATE TABLE `self_cd`(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR( 255 ) NOT NULL,
`pid` INT UNSIGNED NOT NULL DEFAULT '',
`path` TEXT NOT NULL
) ENGINE = MYISAM ;
2、建立CdModel.class.php模型
class CdModel extends Model{
/*
* 数据验证
*/
protected $_validate = array(
array('name','require','栏目名称不能为空',1),
);
/*
* 自动提交
*/
protected $_auto = array(
array('path','getPath',3,'callback'),
);
function getPath(){
//获取父id
$pid = $_POST['pid'];
//
$pm = $this->field('id,path')->getById($pid);
$path = $pid !== 0 ? $pm['path'].'-'.$pm['id'] : 0;
return $path;
}
}
3、建CdAction.class.php控制器
class CdAction extends CommonAction{
function index(){
}
function add(){
$cd = new CdModel();
$list = $cd->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath,id')->select();
foreach($list as $key=>$val){
$list[$key]['margin'] = (strlen(str_replace('-','',$val['path']))-1)*5;
}
$this->assign('cdlist',$list);
$this->display();
}
function insert(){
$cd = new CdModel();
if($cd->create()){
if(false!==$cd->add()){
echo '栏目添加成功';
$this->redirect(__APP__.'/Cd/add');
}else{
echo '数据添加失败'.$cd->getDbError();
}
}else{
echo '数据验证失败'.$cd->getError();
}
}
}
4、模板实现:
add.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>创建栏目</title>
</head>
<body>
<form method="post" action="__URL__/insert">
栏目名称:<input type="text" name="name" />
父栏目名:<select name="pid">
<option value="0">添加顶级栏目</option>
<volist name='cdlist' id='data'>
<option style="margin-left:{$data['margin']}" value="{$data['id']}">|-{$data['name']}</option>
</volist>
</select>
<input type="submit" value="添加" />
</form>
</body>
</html>
5、显示效果如下

ThinkPHP利用数据库字段做栏目的无限分类的更多相关文章
- ThinkPHP增加数据库字段后插入数据为空的解决办法
今天用ThinkPHP做了一个简单的商品发布系统,数据库本来只有四个字段id,name,url,image.id是主键,name是商品名称,url是商品链接,image是商品图片,做的差不多了,发现还 ...
- 利用数据库链做DML操作时报ORA-02069: global_names parameter must be set to TRUE for this operation
按照 http://space.itpub.net/195110/viewspace-711110 的说法顺利解决问题. 通过DBLink更新远程数据的时候,如果使用到本地的sequence.函数.过 ...
- thinkphp 找数据库某个字段为空的数据,PHP 数据调取 空数据
$arr['dingwei'] = array('EXP','is null');
- 数据库字段值为null利用setInc方法无法直接写入
1.数据库字段值为null利用setInc方法无法直接写入,先判断是否为空,再写入. if($points->add($dataList)){ $user=M('cuser'); $null=$ ...
- 【EF】EntityFramework 更新数据库字段的三种方法
实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...
- thinkphp 对数据库的操作
查看ThinkPHP完全开发手册3.1 首先编辑配置文件 thinkphp这个数据库就不乱改了 昨天新建了一个 confluence(utf8)数据库 所以就用它学习一下吧,因为就只建立了一个数据库, ...
- 主流数据库字段类型转.Net类型的方法
最近在阅读一些开源的代码,发现其中有些方法总结的很全面,至少在我做同样的事情时候,需要抓破脑袋想活着google,现在看到了这个关于主流数据库字段类型转.Net类型的方法,故收藏之,也顺便分享给那些能 ...
- thinkphp从数据库里的html代码显示页面不解析
首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从 ...
- 关于金额,重量等浮点数的数据库字段设计(用Int,Long代替浮点数计算)
金额.重量.成绩等数据库字段推荐使用int或bigint类型. 通常我们数据库设计中金额,重量等涉及到小数位的字段会用float或decimal,mysql还可以用double,但往往每笔金额的计算我 ...
随机推荐
- Java爬虫系列三:使用Jsoup解析HTML
在上一篇随笔<Java爬虫系列二:使用HttpClient抓取页面HTML>中介绍了怎么使用HttpClient进行爬虫的第一步--抓取页面html,今天接着来看下爬虫的第二步--解析抓取 ...
- 朱子奇- 精算师,Tailorwoods创始人 | 到「在行」来约见我
朱子奇- 精算师,Tailorwoods创始人 | 到「在行」来约见我 Tailorwoods
- Jquery实现的图标抖动效果
原文:http://www.webdm.cn/webcode/75de64a9-3fb4-473d-bc2c-97a0a063be79.html <!DOCTYPE html PUBLIC &q ...
- curl如何发送json数据?如何发送form数据?python的restfull又该如何获取这些数据?
1.python使用flask+flask_restfull框架写的api接口,做为服务 2.curl 做为客户端发送数据 from flask import request curl发送json的方 ...
- install nfs and share file
介绍一下NFS的安装,以及共享文件 NFS(Net File System),通过使用NFS,可以像使用本地文件一样访问远程文件. 它主要解决了数据共享的问题,可以备份容灾. 安装配置 1.以linu ...
- Android自己定义实现循环滚轮控件WheelView
首先呈上效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- UVA - 10603 Fill(隐式图搜索)
题目大意:经典的倒水问题. 给你三个瓶子,体积为a,b,c. 刚開始a.b是空的,c是满的,如今要求你到出体积为d的水.倒水的规则为,要么倒水方为空,要么接水方满 问倒到容量为d时,倒水的最小体积是多 ...
- linux 设置ssh密钥登录
一.查看服务器上是否开启了sshd服务 要确认linux是不是安装了和开启了ssh服务可以输入 netstat -an|grep 22,查看22端口是否打开,如果找开,则证明SSH服务开启了. ps ...
- Markdown基础以及个人经验
前言 DFRobot论坛今日支持Markdown发帖了: [md] your content here [/md] 非常棒,再也不怕辛辛苦苦排个版,一夜回到解放前.这里介绍一下Markdown写博客发 ...
- nload 命令
网卡 流量监控命令 // 安装 yum intall nload nload 上下page 键 切换网卡查看