资源描述:
《CakePHP 实例教程 Categories Acts as Tree》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Tree是CakePHP1.2的核心Behaviors之一,可以用来轻易的实现无限极分类,并呈现树状列表。图片来源:Treetraversa,WIKIPEDIA基础实例建立数据表CREATETABLE`categories`(`id`INT(11)NOTNULLAUTO_INCREMENT,`name`VARCHAR(255)NOTNULL,`slug`VARCHAR(255)NOTNULL,`parent_id`INT(11)DEFAULTNULL,`lft`INT(11)DEFAULTNULL,`rg
2、ht`INT(11)DEFAULTNULL,`link_count`INT(11)NOTNULLDEFAULT'0',PRIMARYKEY(`id`))DEFAULTCHARSET=utf8;字段说明:parent_id,lft,rght均为必要字段,parent_id是很常用的表层级关系的做法。但在这里,lft和rght才是重点。它们表示的是一个分类的左右边界。原理如下图所示图片来源:ManagingHierarchicalDatainMySQL,dev.mysql.com建立Model使用bakesh
3、ell$cdapp$cakebakeCategoryModel:classCategoryextendsAppModel{var$name='Category';var$actsAs=array('Tree');}CategoriesController:classCategoriesControllerextendsAppController{var$name='Categories';}AddActionfunctionadd(){if(!empty($this->data)){$this->Cate
4、gory->create();if($this->Category->save($this->data)){$this->Session->setFlash(__('TheCategoryhasbeensaved',true));$this->redirect(array('action'=>'index'));}else{$this->Session->setFlash(__('TheCategorycouldnotbesaved.Please,tryagain.',true));}}$this->se
5、t('categories',$this->Category->generatetreelist(null,null,null,'--'));}add.ctpcreate('Category');?>
end('Submit');?>更进一步取得层级分类classCategoryextendsAppModel{var$name='Category';var$actsAs=array('Tree');functiongetThreadCategories(){$this->recursive=-1;return$this->findAllThreaded(null,null,'lftasc');}}
7、取得下属条目当给分类下添加条目,比如Links时,基本的做法是classCategoryextendsAppModel{var$name='Category';var$hasMany=array('Links'=>array('className'=>'Link','foreignKey'=>'category_id',));}这样就通过Link.category_id连接了Link和对应的Category。包含下级分类所属条目但很多时候我们需要一个分类下的条目时,是需要包含下级分类所属条目的,此时需要添
8、加finderQuery,并去除foreignkey:classCategoryextendsAppModel{var$name='Category';var$actsAs=array('Tree');var$hasMany=array('Links'=>array('className'=>'Link','foreignKey'=>'','finderQuery'=>'SELECT`Links`.*FROM`links`AS