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 方法写的还是好呢, 拿过来用下。

 

posted @ 2017-08-25 00:29  帅到要去报警  阅读(382)  评论(0编辑  收藏  举报