使用 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;
}
?: 简化,确保变量一定有值。compile_id 必须在 fetch() 前赋值,否则模板引擎使用默认编译 ID 导致缓存错乱、输出为空。unset,降低内存峰值。管理目录/modules/mod_make_html.phpfunction get_html_4catalog 替换为上方完整代码原文参考:cnblogs 存档。此修复已在多站点验证有效,解决“四级页面 0 字节”顽疾。