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 方法写的还是好呢, 拿过来用下。
oneThink的ArticleController控制,详看的更多相关文章
- python模块之httplib(在py3中功能进一步强大,请详看文档)
# -*- coding: utf-8 -*-#python 27#xiaodeng#python模块之httplib(在py3中功能进一步强大,请详看文档) import httplib#是较为底层 ...
- 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解
本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
- django后台使用MySQL情况下的事务控制详解
写在前面: 默认情况下django会把autocommit设置为“1”也就是说所针对数据库的每一次操作都会被做成“单独”的一个事务:这样的处理好处就在于它方便, 在编程的时候可以少写一些代码,比如我们 ...
- Odoo权限控制详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826105.html 一:Odoo中的权限设置主要有以下5种 1)菜单.报表的访问权限 Odoo可以设置菜 ...
- js键盘事件全面控制详解
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件 ...
- 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 ...
- js键盘事件全面控制详解【转】
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...
- C 语言 printf格式控制详解
闲来无事,整理了一下C语言printf() 的格式控制语句. PS:详细来源于网络. printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说 ...
随机推荐
- Translating between qplot and base graphics
Translating between qplot and base graphics Description There are two types of graphics functions in ...
- Qt信号槽的一些事
注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...
- 关于Cocos2d-x中实例伸缩后的位置设置
在有的时候觉得图片太大,会进行缩放,但是在设置位置的时候,用fire->getContentSize(),用的是它原来的大小,就会产生不能准确设置节点的现象 1.在设置伸缩比例的时候,记住比例值 ...
- 【C#】获取电脑DPI
public static class DPIGeter { /// <summary> /// 获取DPI /// </summary> /// <param name ...
- repo manifest.xml 分析
repo是用于管理android的git仓库的工具. 之前想将android的代码放在github上面,并通过repo进行管理.但一直不知道怎么添加进去,那么多的git仓库,难道都要手动建立吗? 直到 ...
- 不可在 for 循环体内修改循环变量,防止 for 循环失去控制
不可在 for 循环体内修改循环变量,防止 for 循环失去控制. #include <iostream> /* run this program using the console pa ...
- mysql命令行远程登录命令
mysql -u root -psalon365365 -h 192.168.1.103 -P 3 306 -D empirecms
- motion的移植和使用
说明: motion主页:http://www.lavrsen.dk/foswiki/bin/view/Motion motion下载地址:http://sourceforge.net/project ...
- linux -- 注销,关机,重启
注销:logout Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]#logout Red Hat ...
- perl readlink 函数-返回软链接指向的文件
readlink 函数专门用于处理链接,可以返回该链接指向的文件的路径 代码示例: print readlink($prog) if (-f $prog && -l $prog):