一级分类 ->二级分类 ->三级分类...........
1级下面有多个2级.
2级下面有多个3级.
........
数据库的设计:
表名:table_categories
字段:
cid [主键]
name 分类名
parentid:上一级cid.如果是一级分类.该字段数据等于0
最主要的是要掌握无限极分类的逻辑,那么写起来就很容易的多了
首先看数据库表:xp_cate
控制器: CateAction.class.php
<?php
class CateAction extends Action{
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=new CateModel()if($vo=$cate->create()){
if($cate->add()){
$this->success('添加栏目成功')
}else{
$this->error('添加栏目失败')
}
}else{
$this->error($cate->getError())
}
}}
?>
模型:CateModel.class.php
<?php
class CateModel extends Model{//对应数据库中的表xp_cate
protected $_auto=array(
array('path','tclm',3,'callback'),
)function tclm(){
$pid=isset($_POST['pid'])?(int)$_POST['pid']:0
echo ($pid)
if($pid==0){
$data=0
}else{
$list=$this->where("id=$pid")->find()
$data=$list['path'].'-'.$list['id']//子类的path为父类的path加上父类的id
}
return $data
}
}
?>
模板:index.html
<form action="!-URL-!/add" method="post">
请选择父级栏目:<select name="pid" size="20">
<option value="0">根栏目</option>
<volist name="alist" id="vo">
<option value="{$vo['id']}">
<for start="0" end="$vo['count']">
</for>
{$vo['name']}
</option>
</volist>
</select><br />
新的栏目名称:<input type="text" name="name" /><br />
<input type="submit" value="添加栏目" />
</form>
这问题很有趣哦!很多公司面试经常提到!有三种办法:1.父类子类都各自建表(不推荐)
2.子类父类同在一张表(推介)
3.还有一种做法记不清了。
下面说说第二种做法吧!
你可以在数据库中建一张表都拥有以上的字段,然后在hibernate配置文件里配置一对多的关系,自己类对自己类做一对多的关联,具体配置你可以在一些论坛网站上搜到的。然后查询时你只要按id=父类的那个id去查一遍就全出来了.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)