这段代码的核心亮点是「精准区分页面类型」,通过 emlog 模板原生变量 $sortid 识别首页与分类页,既实现了 “首页隐藏指定分类日志” 的需求,又不破坏分类页的正常显示,同时保留了 emlog 的插件扩展能力和模板语法规范性。
理解其逻辑后,可灵活修改:调整分类 ID、隐藏多个分类、反向显示指定分类等,适配不同的博客运营需求,是 emlog 模板定制中 “日志列表精准过滤” 的典型实用方案。
<?php
if (!empty($logs)): // 检查是否有日志数据
foreach ($logs as $value): // 遍历每一篇日志
// 核心修改:仅在「首页」时,隐藏分类ID=3的日志
if (!isset($sortid) && $value['sortid'] == 3) continue;
?>
第 1 行:if (!empty($logs)): // 检查是否有日志数据
1. 核心作用
判断是否存在可显示的日志数据,避免空数组遍历导致的语法报错。
2. 详细解释
$logs:emlog 核心程序传递给首页模板的「日志数据数组」,包含当前页所有待显示日志的完整信息(标题、内容、发布时间、分类 ID、作者、日志链接等),已自动完成分页、按发布时间排序处理。!empty($logs):PHP 判断函数,含义是 “$logs 不为空”(既不是空数组,也不是 null/false)。- 语法细节:使用 emlog 模板友好的「替代语法」
:而非{,原因是模板中需要混合 PHP 和 HTML,替代语法更易阅读、不易漏写闭合标签。
第 2 行:foreach ($logs as $value): // 遍历每一篇日志
1. 核心作用
循环遍历所有日志数据,为单条日志的 HTML 输出提供数据支持。
2. 详细解释
foreach ($logs as $value):PHP 循环语句,作用是 “依次取出数组中的每一个元素,赋值给变量value”。- 遍历逻辑:若中有篇日志,循环会执行次,每次循环中value 都对应「单篇日志的完整数据」(比如第 1 次 $value 是第 1 篇日志的信息,第 2 次是第 2 篇,以此类推)。
- 语法细节:延续替代语法
:,与后续的endforeach;配对闭合,避免与 HTML 标签混淆。
第 3-4 行:// 核心修改:仅在「首页」时,隐藏分类ID=3的日志 if (!isset($sortid) && $value['sortid'] == 3) continue;
核心作用
区分页面类型过滤日志:仅当 “当前是首页” 且 “日志属于分类 ID=3” 时,隐藏该日志,分类页不受影响。
关键修改说明(仅 1 行代码调整)
在 foreach ($logs as $value): 之后,添加这一行:
if (!isset($sortid) && $value['sortid'] == 3) continue;隐藏多个分类(如同时隐藏分类 3、5、7)
将核心过滤条件修改为 in_array() 函数,适配多分类 ID:
// 仅首页隐藏分类ID=3、5、7的日志
if (!isset($sortid) && in_array($value['sortid'], [3,5,7])) continue;本站首页就隐藏了技术分享子类目下内容可自行查看


发表评论