本人新手小白,看下 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 方法写的还是好呢, 拿过来用下。

oneThink的ArticleController控制,详看的更多相关文章

  1. python模块之httplib(在py3中功能进一步强大,请详看文档)

    # -*- coding: utf-8 -*-#python 27#xiaodeng#python模块之httplib(在py3中功能进一步强大,请详看文档) import httplib#是较为底层 ...

  2. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  3. unity中camera摄像头控制详解

    目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...

  4. django后台使用MySQL情况下的事务控制详解

    写在前面: 默认情况下django会把autocommit设置为“1”也就是说所针对数据库的每一次操作都会被做成“单独”的一个事务:这样的处理好处就在于它方便, 在编程的时候可以少写一些代码,比如我们 ...

  5. Odoo权限控制详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826105.html 一:Odoo中的权限设置主要有以下5种 1)菜单.报表的访问权限 Odoo可以设置菜 ...

  6. js键盘事件全面控制详解

      js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件 ...

  7. PHP flush sleep 输出缓存控制详解

    1 2 3 4 5 6 ob_start,flush,ob_flush for($i=0;$i<</SPAN>10;$i++) { echo $i.''; flush(); slee ...

  8. js键盘事件全面控制详解【转】

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

  9. C 语言 printf格式控制详解

    闲来无事,整理了一下C语言printf() 的格式控制语句. PS:详细来源于网络. printf的格式控制的完整格式: %  -  0  m.n  l或h  格式字符 下面对组成格式说明的各项加以说 ...

随机推荐

  1. redis live 如何安装

    在 windows 环境下安装 redislive   这是一篇在 windows 环境下安装 redislive 的教程! 项目地址:https://github.com/nkrode/RedisL ...

  2. JavaScript 学习笔记之最终篇

      JavaScript 的学习算是最后一篇了...把JS基础已经核心的部分彻底的进行了学习... 唯一的缺陷就是自己在运用上并不是特别的熟练...今天是JS的最后一章内容了..也是JS 中最常用的内 ...

  3. 谷歌修复了 FFmpeg 中上千个 bug

    谷歌在科技业界中几乎每天都会创造出新闻素材,它的触手涉及到了生活中的多个领域.最近谷歌将其Google +社交网络与邮件服务Gmail相结合.然而今天谷歌宣布他们修复了FFmpeg的上千个bug.   ...

  4. MJRefresh原理分析

    MJRefresh是流行的下拉刷新控件.前段时间为了修复一个BUG.读了它的源代码.本文总结一下实现的原理 下拉刷新的基本原理 大部分的下拉刷新控件.都是用contentInset实现的.默认情况下. ...

  5. 用json在java和C#之间传递base64的问题。。。

    记录下..唉.... java代码: 导入这个 commons-codec-1.8.jar (下载链接: http://files.cnblogs.com/files/gaocong/jar%E5%8 ...

  6. php图片添加文字水印方法汇总

    方法一: <?php header("content-type:text/html;charset=utf-8"); //指定图片路径 $src = "img/a. ...

  7. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  8. NopCommerce的定时任务分析和应用

    NOP的定时任务也是群里听群友听说,我很少在WEB端做定时任务,所以尝鲜下,看看效果怎么样. 主要涉及到下面几个类和配置文件配置: web.config <configSections> ...

  9. COOKIE和SESSION关系和区别等

    一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...

  10. memcached 安装使用

    一.Memcached和Memcache的区别: 网上关于Memcached和Memcache的区别的理解众说纷纭,我个人的理解是: Memcached是一个内存缓存系统,而Memcache是php的 ...