PHP怎样获取栏目是否显示_PHP判栏目显隐方法【可视】

2次阅读

常见字段名是ishidden、hidden、status或is_show;判断时需用isset()和==0而非!$row[‘ishidden’];查询应集中加where条件;前端需同步显隐标识并清除缓存。

PHP怎样获取栏目是否显示_PHP判栏目显隐方法【可视】

php中判断栏目是否显示的常见字段名

大多数CMS(如DEDECMS、帝国、自研系统)会用一个整型字段标记栏目可见性,常见字段名是 ishiddenhiddenstatusis_show。注意:不是所有系统都叫 is_displayvisible,得先查数据库表结构。

典型判断逻辑是:

  • ishidden = 0 表示显示(默认值)
  • ishidden = 1 表示隐藏(不参与前台导航、列表、面包屑)

别直接写 if ($row['ishidden']) —— 这会把 0 当 false、1 当 true,但有些系统反着来(比如 is_show = 1 才显示),必须结合文档或字段注释确认语义。

在模板中安全判断栏目显隐的写法

在PHP模板(如 dedecms 的 list_article.htm)里,不能只靠变量输出,要包裹逻辑判断。常见错误是直接 echo 字段值,却不校验是否该显示。

立即学习PHP免费学习笔记(深入)”;

推荐写法(以 ishidden 字段为例):

<?php if (isset($row['ishidden']) && $row['ishidden'] == 0): ?>     <a href="<code><?php echo $row['typeurl']; ?></code>"><?php echo $row['typename']; ?></a> <?php endif; ?>

关键点:

  • 必须用 isset() 防止未定义索引警告
  • == 0 而非 !$row['ishidden'],避免 NULL字符串 '0' 导致误判
  • 如果字段是字符串类型(如 'true'/'false'),需用 === 'true'filter_var($val, FILTER_VALIDATE_BOOLEAN)

后台PHP逻辑中统一获取“可显示栏目”的查询条件

在控制器或模型里查栏目列表时,显隐判断不该散落在各处,应集中到 sql 或 Query Builder 中。

例如使用 pdo 查询可见栏目:

$stmt = $pdo->prepare("SELECT * FROM `#@__arctype` WHERE `reid` = ? AND `ishidden` = 0 ORDER BY `sortrank`"); $stmt->execute([$parent_id]);

或者在 thinkphp 中:

Db::name('arctype')->where('reid', $pid)->where('ishidden', 0)->select();

注意:ishidden 字段通常不加索引,若栏目量大(>1000),建议对它加普通索引提升查询速度;同时确认该字段是否允许为 NULL——若允许,WHERE ishidden = 0 会漏掉 NULL 行,此时应写成 WHERE COALESCE(ishidden, 0) = 0 或明确排除 IS NULL

前端“可视”反馈常被忽略的兼容场景

所谓【可视】,不只是 PHP 输出与否,还包括 js 动态加载栏目时的同步判断。比如点击切换频道,ajax 返回的 json 数据里若没带 ishidden 字段,前端就无法做显隐控制。

所以后端 API 必须确保返回数据包含显隐标识,并且命名一致:

  • 不要有的接口show,有的传 display
  • 不要在 JSON 里省略该字段(哪怕值是 false),否则 JS data.show === undefineddata.show === false 处理逻辑不同
  • 如果前端用 Vue/React 渲染导航,建议在 PHP 层就过滤掉隐藏项,而不是传全量再用 JS v-if 过滤——减少无意义数据传输和渲染负担

最易被忽略的是缓存场景:栏目显隐变更后,模板缓存、redis 缓存、CDN 缓存可能仍返回旧状态,务必在更新 ishidden 同时清除对应缓存键(如 cache_menu_{$pid})。

text=ZqhQzanResources