技术日志

记录分享邓杰律师从事网络技术工作点点滴滴。

如何给phpcm v9文章页增加问答模块?

点击复制标题网址

——温馨提示——

已复制到剪贴板,可粘贴到下一处。


时间:   查看:1001

编者按:

该实例为每篇文章单独配置 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结束-->


本文标签

发表评论:

评论记录:

未查询到任何数据!