创建数据库表:tb_cate:id,name,pid,path
action
<?php /** * ThinkPHP中的 * 自动完成(无限极分类) * 用户输入的字段并不是用户手动填写的 * */ class AutoCateAction extends Action{ public function index(){ $cate=M('Cate'); $list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order("bpath")->select(); foreach ($list as $key=>$value){ $list[$key]['count']=count(explode('-', $value['bpath'])); } $this->assign('alist',$list); $this->display(); } function add(){ //经过自定义模型 $cate=D('Cate'); if ($vo=$cate->create()) { dump($vo); if ($cate->add()){ $this->success("注册成功"); }else{ $this->error($cate->getError()); } }else{ $this->error($cate->getError()); } } } ?>
html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <form action="__URL__/add" method="post"> 父级栏目:<select name="pid"> <option value="0">根</option> <volist name="alist" id="vo"> <option value="<!--{$vo['id']}-->"> <php> for($i=0;$i<$vo['count'];$i++){ echo '-'; } </php> <!--{$vo['name']}--> </option> </volist> </select> 新栏目名:<input type="text" name="name"><br/> <input type="submit" value="添加栏目"><br/> </form> </body> </html>
cateModel
<?php class CateModel extends Model{ protected $_auto=array( array('path','filldata',3,'callback'), ); function filldata(){ //因为在model当中,所以不用new,直接用this就可以了 $pid=isset($_POST['pid'])?(int)$_POST['pid']:0; if ($pid==0)return 0; $pcate=$this->where('id='.$pid)->find(); $path=$pcate['path'].'-'.$pcate['id']; return $path; } } ?>