emlog MVC解构--控制器Controller之Sort_Controller
  • 内容
  • 评论
  • 相关

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);
}
点赞
X
赞助一下:
    支付宝    微信    QQ红包

打开支付宝扫一扫
emlog MVC解构--控制器Controller之Sort_Controller
本文标签:
版权声明:若无特殊注明,本文皆为“懒人的小窝”原创,转载请保留文章出处。
本文链接:http://suppore.cn/152.html   百度已收录

发表评论

电子邮件地址不会被公开。 必填项已用*标注

00:00 / 00:00
顺序播放