oneThink的ArticleController控制,详看
本人新手小白,看下 onethink 的 ArticleController , 它里面写的方法,和一些自己以后改进的方向:
<?php namespace Home\Controller; class DangqunController extends HomeController { //频道页 public function index(){ //获取栏目的ID $cid = I('get.cid','','intval'); //测试 $cid = 41; //根据cid得到当前CID栏目信息,获取到这整个栏目的信息,返回的是一维数组 //也就是通过cid拿到当前栏目所有信息,category //可传递cid 或者 分类表示 $category = $this->category($cid); //$category = $this->category('Dangqun'); /* 模板赋值并渲染模板 */ $this->assign('category', $category); $this->display($category['template_index']); } //列表页面 public function lists($p = 1){ $cid = I('get.cid','','intval'); // 测试 $cid = 42; //测试结果,如果当前栏目有文档自会显示,但是拿不到当前栏目的子栏目文章列表,而且既然是列表,文章列表的缩略图没有拿到 //改善思路:修改文章控制器和视图,将文章缩略图,文章多图,文章描述等信息存到文章表,或者从新建立模型,通过模型,一次性拿到文章的一些基本信息 // 拿到当前cid栏目信息 $category = $this->category($cid); /* 获取当前分类列表 */ $Document = D('Document'); $list = $Document->page($p, $category['list_row'])->lists($category['id']); if(false === $list){ $this->error('获取列表数据失败!'); } //p($list); /* 模板赋值并渲染模板 */ $this->assign('category', $category); $this->assign('list', $list); $this->display($category['template_lists']); } // 详细页 public function detail($id = 0, $p = 1){ $id = I('get.aid','','intval'); // 测试 $id = 20; //测试结果:还是不错呢!通过一个文章id(aid) ,能够获取当前文章的栏目信息和当前文章的所有信息 /* 标识正确性检测 */ if(!($id && is_numeric($id))){ $this->error('文档ID错误!'); } /* 页码检测 */ $p = intval($p); $p = empty($p) ? 1 : $p; /* 获取详细信息 */ $Document = D('Document'); $info = $Document->detail($id); if(!$info){ $this->error($Document->getError()); } /* 分类信息 */ $category = $this->category($info['category_id']); /* 获取模板 */ if(!empty($info['template'])){//已定制模板 $tmpl = $info['template']; } elseif (!empty($category['template_detail'])){ //分类已定制模板 $tmpl = $category['template_detail']; } else { //使用默认模板 $tmpl = 'Article/'. get_document_model($info['model_id'],'name') .'/detail'; } /* 更新浏览数 */ $map = array('id' => $id); $Document->where($map)->setInc('view'); p($category); p($info); /* 模板赋值并渲染模板 */ $this->assign('category', $category); $this->assign('info', $info); $this->assign('page', $p); //页码 $this->display($tmpl); } // 分类检测 // 这个方法还是比较好的,可以考虑封装为公共函数来使用 private function category($id = 0){ // 标识正确性检测 $id = $id ? $id : I('get.category', 0); if(empty($id)){ $this->error('没有指定文档分类!'); } // 获取分类信息 $category = D('Category')->info($id); if($category && 1 == $category['status']){ switch ($category['display']) { case 0: $this->error('该分类禁止显示!'); break; //TODO: 更多分类显示状态判断 default: return $category; } } else { $this->error('分类不存在或被禁用!'); } } }
看了看:上面的 category 方法可以拿过来用下,感觉还是比较好用的;
还有 detail 方法写的还是好呢, 拿过来用下。