如何给phpcm v9文章页增加问答模块?
编者按:
该实例为每篇文章单独配置 FAQ 数据,并在前端输出规范的 FAQPage Schema。一、后台配置自定义字段
进入模型管理
后台路径:扩展 → 模型管理 → 找到正在使用的模型(如“文章模型”)→ 字段管理 → 添加字段
字段设置
字段名称:faq(数据库字段名,建议小写)
别名:文章FAQ数据
字段类型:选择多行文本
输入框宽度:默认即可
初始值:留空
附加属性:填写说明(例如:“请按‘问题||答案’的格式填写,每行一组”)
作为搜索条件:否
其他选项:默认或按需设置
保存字段。此时数据库 v9_news 表会增加 faq 字段。
二、后台发布文章时录入 FAQ 数据
在文章发布页(添加/编辑内容),会出现一个 “文章FAQ数据” 输入框。管理员可输入如下格式的数据(每行一个问答,问题和答案用 || 分隔):
text
学校是否必须赔偿?||根据《民法典》第1199条,无民事行为能力人在校受损,学校需担责,除非能证明尽到管理职责。
家长如何收集证据?||保留监控录像、医院诊断证明、与老师的沟通记录等。
注意:问题和答案中不要包含额外的换行,以免解析出错。
三、修改内容页模板(show.html)
找到对应模板文件(例如 /phpcms/templates/default/show.html),在合适位置(通常在 </article> 后,</body> 前)加入以下代码:
<!--FAQ开始-->
<?php
$faq_raw = $faq;
$faq_items = array();
if (!empty($faq_raw)) {
$lines = explode("\n", trim($faq_raw));
foreach ($lines as $line) {
$line = trim($line);
if (empty($line)) continue;
$parts = explode('||', $line, 2);
if (count($parts) == 2) {
$faq_items[] = array(
'question' => trim($parts[0]),
'answer' => trim($parts[1])
);
}
}
}
?>
<!-- 第一部分:给用户看的 FAQ(可见) -->
<?php if (!empty($faq_items)): ?>
<div class="faq-section" style="margin: 30px 0; padding: 20px; background: #f9f9f9; border-radius: 8px;">
<h2 style="text-align: center;">法律问答</h2>
<div class="faq-list">
<?php foreach ($faq_items as $index => $item): ?>
<div class="faq-item" style="margin-bottom: 20px; border-bottom: 1px solid #eee; padding-bottom: 15px;">
<div class="faq-question" style="font-weight: bold; color: #0066cc; margin-bottom: 8px;">
Q<?php echo $index + 1; ?>:<?php echo $item['question']; ?>
</div>
<div class="faq-answer" style="color: #333; line-height: 1.6;">
A:<?php echo nl2br($item['answer']); ?><!-- nl2br 将换行转为 <br> 便于阅读 -->
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<!-- 第二部分:给搜索引擎看的 JSON-LD(不可见) -->
<?php if (!empty($faq_items)):
// 重新构建 Schema 格式
$schema_items = array();
foreach ($faq_items as $item) {
$schema_items[] = array(
'@type' => 'Question',
'name' => $item['question'],
'acceptedAnswer' => array(
'@type' => 'Answer',
'text' => $item['answer']
)
);
}
?>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": <?php echo json_encode($schema_items, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); ?>
}
</script>
<?php endif; ?>
<!--FAQ结束-->
