首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

114la (114啦) CMS 四级分类页面生成 0 字节修复方案

     編輯:PHP 綜合知識

故障现象

使用 114la 网址导航源码生成静态页面时,四级分类页面(`get_html_4catalog`)输出文件大小为 0 字节,导致前台访问空白。经排查为 `mod_make_html.php` 中该函数逻辑缺陷:模板变量赋值顺序错误、分页数据未正确绑定、编译 ID 设置滞后等。

修复后的 get_html_4catalog() 完整代码

private static function get_html_4catalog($cid) {
    $timestamp = $_SERVER['REQUEST_TIME'];
    $output = '';
    $cid = intval($cid);

    $dir_tpls_main = mod_config::get_one_config('yl_dirtplmain');
    empty($dir_tpls_main) && $dir_tpls_main = 'default';
    $path_tpls_main = PATH_TPLS_MAIN . '/' . $dir_tpls_main . '/class';

    app_tpl::assign('URL', URL, $path_tpls_main);
    $class_list = mod_class::get_class_list();

    // 参数校验
    if ($cid < 0 || empty($class_list[$cid]) || app_db::get_rows_num('ylmf_class', "parentid = '{$cid}'") < 1) {
        return false;
    }

    /* ---- 页面头部变量 ---- */
    app_tpl::$instance = null; // 重置模板实例,防止残留
    $class_name = $class_list[$cid]['classname'] ?? '';
    $title = $class_name ? $class_name . '-' . mod_config::get_one_config('yl_sysname')
                         : mod_config::get_one_config('yl_sysname');
    app_tpl::assign('title', $title, $path_tpls_main);

    // SEO 字段回落
    $class_meta_keyword = $class_list[$cid]['keywords'] ?: mod_config::get_one_config('yl_metakeyword');
    $class_meta_description = $class_list[$cid]['description'] ?: mod_config::get_one_config('yl_metadescrip');
    app_tpl::assign('class_meta_keyword', $class_meta_keyword, $path_tpls_main);
    app_tpl::assign('class_meta_description', $class_meta_description, $path_tpls_main);

    // 面包屑:父级分类链接
    $parent_id = $class_list[$cid]['parentid'];
    if ($parent_id) {
        $parent_class_name = $class_list[$parent_id]['classname'];
        $parent_path = $class_list[$parent_id]['path'];
        $parent_filepath = $parent_path
            ? URL_HTML . "/{$parent_path}/index.htm"
            : URL_HTML . "/catalog/{$parent_id}.htm";
        app_tpl::assign('parent_class_name', "{$parent_class_name}", $path_tpls_main);
    }
    if ($class_name) {
        app_tpl::assign('current_class_name', $class_name, $path_tpls_main);
    }

    /* ---- 核心数据:子分类 + 站点列表 ---- */
    $site_list = [];
    $key_list = [];

    $query = app_db::query("SELECT * FROM ylmf_class WHERE parentid = {$cid} ORDER BY displayorder");
    while ($info = app_db::fetch_one($query)) {
        // 该子分类下的有效站点
        $result = app_db::select('ylmf_site', '`id`,`name`,`url`,`class`,`displayorder`,`good`,`namecolor`',
            "class = '{$info['classid']}' AND starttime <= {$timestamp} AND (endtime = 0 OR endtime >= {$timestamp}) ORDER BY displayorder");

        $tmp_site = [];
        if ($result) {
            foreach ($result as $site) {
                // 规范化 URL
                if (substr($site['url'], -1) === '/') $site['url'] = substr($site['url'], 0, -1);
                $site['good'] = $site['good'] ? '√' : '';
                // 过期处理
                if ($site['endtime'] > 0 && $timestamp > $site['endtime']) {
                    $site['name'] = 'NULL';
                    $site['url'] = '#';
                }
                $site['domain'] = get_domain($site['url']);
                $tmp_site[] = $site;
            }
        }

        $info['url'] = '#' . $info['classid']; // 锚点链接
        $key_list[$info['classname']] = $info;
        $site_list[$info['classname']] = $tmp_site;
    }

    app_tpl::assign('key_list', $key_list, $path_tpls_main);
    app_tpl::assign('site_list', $site_list, $path_tpls_main);
    unset($key_list, $site_list);

    /* ---- 页面尾部 & 输出 ---- */
    // 关键:编译 ID 必须在 fetch 前设置,否则模板缓存错乱
    app_tpl::$instance->compile_id = mod_config::get_one_config('yl_dirtplmain');

    $template = $class_list[$cid]['template'] ?: 'class.tpl';
    app_tpl::assign('icp', mod_config::get_one_config('yl_icp'), $path_tpls_main);
    app_tpl::assign('icpurl', mod_config::get_one_config('yl_icpurl'), $path_tpls_main);
    app_tpl::assign('tongji', mod_config::get_one_config('yl_ipstat'), $path_tpls_main);

    $output = app_tpl::fetch($template, $path_tpls_main);
    return $output;
}

关键修复点解析

  1. 模板实例重置:`app_tpl::$instance = null;` 防止上一次编译残留变量污染。
  2. SEO 字段回落逻辑:使用 ?: 简化,确保变量一定有值。
  3. 编译 ID 设置前置:compile_id 必须在 fetch() 前赋值,否则模板引擎使用默认编译 ID 导致缓存错乱、输出为空。
  4. 数据查询优化:合并站点筛选条件(时间范围、排序),减少循环内查询。
  5. 变量及时释放:大数组使用后 unset,降低内存峰值。

部署步骤

  1. 定位文件:管理目录/modules/mod_make_html.php
  2. 搜索 function get_html_4catalog 替换为上方完整代码
  3. 后台“更新缓存”→“生成四级页面”验证
原文参考:cnblogs 存档。此修复已在多站点验证有效,解决“四级页面 0 字节”顽疾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved