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,但往往每笔金额的计算我 ...
随机推荐
- maven项目对于maven远程仓库没有资源的解决办法
下载资源到本地 方法一:dependency scope 是system 类型 <dependency> <groupId>edu.ucar</groupId> & ...
- ElasticSearch常用结构化搜索
最近,需要用到ES的一些常用的结构化搜索命令,因此,看了一些官方的文档,学习了一下.结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的. 它们都有精确的格式,我们可以对这些数 ...
- JDK/Java SE官方文档汇总
JDK一般是指Java SE. 1.5:https://docs.oracle.com/javase/1.5.0/docs/ 6:https://docs.oracle.com/javase/6/do ...
- fastscripT实现权限控制
fastscripT权限控制 此处以FASTSCRIPT实现功能权限为例,用脚本实现数据权限也是很方便的. unit Unit1; interface uses Winapi.Windows, Win ...
- Generate C and C++ Header File
1. 2. 其中bootclasspath 后面的参数就是自己android.jar具体位置 location: ${system_path:javah} working Directoy: ${pr ...
- byte数组和文件的相互转换
/** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...
- 软考考点---CPU
软考考点---CPU 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Un ...
- Android组件系列----ContentProvider内容提供者【4】
(4)单元測试类: 这里须要涉及到另外一个知识:ContentResolver内容訪问者. 要想訪问ContentProvider.则必须使用ContentResolver. 能够通过ContentR ...
- MFC学习之对话框---对话框之间的domodle 数据传递
if(IDOK==data.DoModal()){tx->m_gao=data.m_he;tx->m_kuan=data.m_wi;tx->m_jiao=data.m_jiaoju; ...
- 嵌入式开发之cgic库---cgi库的使用
很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...