会点点代码修改,会各种程序上手运营,会电商,会运营,还会吃点喝点!*_*
当前位置:首页- emlog MVC解构21 - 控制器Controller之Sort_Controller

emlog MVC解构21 - 控制器Controller之Sort_Controller

作者:李元波发布时间:2024-12-12 08:56分类: 日常 浏览:23评论:0


导读:Sort_Controller控制器用于查看分类文章。只有一个方法display($params):$params为Dispatcher传出来的正则表达式$matches func...

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);
}

标签:


发表评论: