需手动向v9_category表添加自定义字段并用DB类或PDO查询,在模板中判空输出且必须用htmlspecialchars过滤。先执行ALTER TABLE添加字段,再查库赋值,最后安全输出,否则字段为空或XSS注入。

在PHP框架中快速搭建网站时,需直接调用CMS栏目自定义字段(如英文名称、SEO描述、排序权重等),但系统默认不提供现成接口,必须绕过模板标签层,直连数据库或复用后台字段解析逻辑。
确认自定义字段已存入v9_category表
登录phpMyAdmin,打开当前站点的数据库,检查表 v9_category 是否存在你添加的字段(例如 catname_en、cat_seo_desc、listorder_weight)。若字段名为空或为NULL,后续所有PHP拼接都会返回空值。
字段必须是手动ALTER TABLE添加的,不能仅靠后台界面勾选——因为PHPCMS V9的栏目自定义字段功能默认不写入该表,需自行执行SQL:ALTER TABLE v9_category ADD COLUMN catname_en VARCHAR(100) DEFAULT ''。
在控制器中用DB类原生查询栏目字段
进入你的PHP框架控制器(如ThinkPHP的IndexController.php或Laravel的CategoryController.php),引入数据库操作实例:
立即学习“PHP免费学习笔记(深入)”;
方法一:使用PHPCMS内置db类(兼容性强)
在控制器顶部加入:pc_base::load_sys_class('db');
然后执行查询:$db = db::getInstance(); $cat = $db->get_one("SELECT catname, catname_en, cat_seo_desc FROM v9_category WHERE catid=5");
方法二:使用PDO原生查询(推荐用于非PHPCMS框架)
直接连接数据库后执行:$stmt = $pdo->prepare("SELECT catname, catname_en, cat_seo_desc FROM v9_category WHERE catid = ?"); $stmt->execute([5]); $cat = $stmt->fetch(PDO::FETCH_ASSOC);
注意:此处catid必须是数字且已存在,否则$cat为false,直接取键会报错。
在模板中安全输出自定义字段值
第一步:将查得的$cat数组传入模板变量,例如ThinkPHP中使用$this->assign('category', $cat);
第二步:在HTML模板中判断字段是否存在再输出:{if !empty($category['catname_en'])}{$category['catname_en']}{else}{$category['catname']}{/if}
第三步:对输出内容做XSS过滤——PHPCMS自带函数htmlspecialchars($category['cat_seo_desc'], ENT_QUOTES, 'UTF-8')必须显式调用,否则用户在后台填入<script>标签将直接执行。</script>
这一步漏掉过滤,前端页面就可能被注入恶意脚本,尤其当字段内容来自后台富文本或未校验输入框时。



















