Li Yuan Bo
啥都会点……-李元波
Sort_Controller控制器用于查看分类文章。
只有一个方法display($params):$params为Dispatcher传出来的正则表达式$matches
function display($params) {
// 建立日志模型
$Log_Model = new Log_Model();
// 建立缓存
$CACHE = Cache::getInstance();
// 获取配置缓存
$options_cache = Option::getAll();
// 将配置缓存里每个键名转换成变量,键值为相应的变量值
extract($options_cache);
// 若查询包含页面,则获取页码,默认为第一页
$page = isset($params[4]) && $params[4] == 'page' ? abs(intval($params[5])) : 1;
// 定义分类ID变量
$sortid = '';
// 访问分类页面时,$params[1]='sort'
// 没有别名时$params[2]为分类ID,有别名且开启别名时$params[2]为别名字符串
if (!empty($params[2])) {
if (is_numeric($params[2])) { // 参数为数字时,直接获取分类ID
$sortid = intval($params[2]);
} else { // 参数为别名字符串时
// 获取分类缓存
$sort_cache = $CACHE->readCache('sort');
/**$sort_cache的结构为:
* array( $sid0 => // 分类ID
* array(
* 'lognum' => 分类包含的日志数量,
* 'sortname' => 分类名,
* 'description' => 分类描述,
* 'alias' => 分类别名,
* 'sid' => 分类ID,
* 'taxis' => 分类排列序号,
* 'pid' => 父分类ID,
* 'template' => 分类页面模板,
* 'children' => 子分类ID,没有则为空数组
* ),
* $sid1 =>
* array(...),
* ...
* );
**/
foreach ($sort_cache as $key => $value) {
$alias = addslashes(urldecode(trim($params[2])));
if (array_search($alias, $value, true)){ // 搜索数组,获取分类ID
$sortid = $key;
break;
}
}
}
}
// 定义访问地址
$pageurl = '';
// 获取分类缓存
$sort_cache = $CACHE->readCache('sort');
// 分类缓存不存在此分类ID,输出404页面
if (!isset($sort_cache[$sortid])) {
show_404_page();
}
// 分类缓存存在此分类ID,获取分类信息数组
$sort = $sort_cache[$sortid];
// 获取分类名
$sortName = $sort['sortname'];
// 设置分类页面站点标题为分类名-站点浏览器标题
$site_title = $sortName . ' - ' . $site_title;
// 设置分类页面站点描述为分类描述
if (!empty($sort_cache[$sortid]['description'])) {
$site_description = $sort_cache[$sortid]['description'];
}
// 分类本身是子分类或者本身没有子分类
if ($sort['pid'] != 0 || empty($sort['children'])) {
// 数据库查询仅需获取分类本身数据
$sqlSegment = "and sortid=$sortid";
} else { // 分类是主分类且有子分类
// 分类本身及其子分类ID放在一个数组
$sortids = array_merge(array($sortid), $sort['children']);
// 数据库查询获取分类本身及其子分类数据
$sqlSegment = "and sortid in (" . implode(',', $sortids) . ")";
}
// 分类置顶排前面,新发表的排前面
$sqlSegment .= " order by sortop desc, date desc";
// 获取分类列表将获取已发布的文章数
$lognum = $Log_Model->getLogNum('n', $sqlSegment);
// $index_lognum由Option获取的变量,列表单页的日志数量
// 获得列表总页数
$total_pages = ceil($lognum / $index_lognum);
if ($page > $total_pages) { // 页码超过总页数
// 页码设置为最后一页
$page = $total_pages;
}
// 利用Url工具类方法获取分类链接
$pageurl .= Url::sort($sortid, 'page');
// 利用Log_Model方法获取当页日志列表
$logs = $Log_Model->getLogsForHome($sqlSegment, $page, $index_lognum);
// 利用工具函数获取输出列表页底部页码导航的字符串
$page_url = pagination($lognum, $index_lognum, $page, $pageurl);
// 获取分类页面模板,若有设置则为自定义模板,否则默认为log_list.php
$template = !empty($sort['template']) && file_exists(TEMPLATE_PATH . $sort['template'] . '.php') ? $sort['template'] : 'log_list';
// View调用前台模板里面的header.php和$template.php,默认为log_list.php
include View::getView('header');
include View::getView($template);
}
标签:emlog
发表评论: