在网站运营中,与访问者建立有效互动是提升用户体验、收集宝贵反馈的关键一环。安企CMS深知这一点,因此为我们提供了强大而灵活的留言表单功能,不仅支持基础的留言收集,还能轻松实现自定义字段和验证码,让网站的互动模块既高效又安全。

接下来,我们将深入探讨如何在安企CMS的前台页面构建并显示一个功能完备的留言表单,同时支持自定义字段和验证码,从而更好地服务我们的用户。

留言表单的核心构建

构建留言表单的第一步,是理解安企CMS如何在前台调用留言功能。安企CMS提供了一个专门的模板标签 {% guestbook fields %},它能够智能地获取我们在后台为留言表单配置的所有字段信息。这意味着我们无需手动编写每个表单元素,系统会自动将后台设置的字段传递给前端模板进行渲染。

一个基础的留言表单通常包含用户姓名、联系方式和留言内容。在后台的“功能管理”下的“网站留言”中,我们可以找到并管理这些基础字段,也可以在此基础上添加更多自定义需求。

在前台模板文件(通常是 guestbook/index.html 或你为留言功能指定的其他模板)中,我们的表单结构会大致如下所示。请注意,表单的 action 属性应指向 /guestbook.htmlmethodpost,这是安企CMS接收留言的标准接口。

<form method="post" action="/guestbook.html">
    <input type="hidden" name="return" value="html"> {# 可选,指定后端返回格式为HTML #}

    <div>
        <label for="user_name">您的姓名:</label>
        <input type="text" id="user_name" name="user_name" required placeholder="请填写您的称呼">
    </div>

    <div>
        <label for="contact">联系方式:</label>
        <input type="text" id="contact" name="contact" required placeholder="您的电话/邮箱/微信">
    </div>

    <div>
        <label for="content">留言内容:</label>
        <textarea id="content" name="content" rows="5" required placeholder="请留下您的宝贵留言..."></textarea>
    </div>

    {# 这里将是自定义字段和验证码的插入位置 #}

    <div>
        <button type="submit">提交留言</button>
        <button type="reset">重置</button>
    </div>
</form>

这段代码为我们提供了一个基本的留言框架。其中 user_namecontactcontent 是系统默认且在提交时需要提供的字段,即使我们没有在后台为它们特别设置,也应在表单中包含它们。

灵活的自定义字段支持

安企CMS的强大之处在于其内容模型的灵活性,这一特性也延伸到了留言表单。在后台设置中,我们可以轻松地为留言表单添加各种自定义字段,例如“所属行业”、“您的公司”、“感兴趣的产品”等,以满足不同的业务需求。

当我们使用 {% guestbook fields %} 标签时,它会返回一个 fields 数组,其中包含了所有在后台配置的留言表单字段(包括系统默认和我们自定义的)。我们可以遍历这个 fields 数组,动态地渲染表单元素。这种方式极大地提高了模板的复用性和可维护性。

以下是一个动态渲染自定义字段的示例代码:

<form method="post" action="/guestbook.html">
  <input type="hidden" name="return" value="html">

  {# 动态渲染留言表单字段 #}
  {% guestbook fields %}
      {% for item in fields %}
      <div>
          <label for="{{item.FieldName}}">{{item.Name}}:</label>
          <div>
              {# 根据字段类型渲染不同的输入框 #}
              {% if item.Type == "text" || item.Type == "number" %}
              <input type="{{item.Type}}" id="{{item.FieldName}}" name="{{item.FieldName}}" {% if item.Required %}required{% endif %} placeholder="{{item.Content}}" autocomplete="off">
              {% elif item.Type == "textarea" %}
              <textarea id="{{item.FieldName}}" name="{{item.FieldName}}" {% if item.Required %}required{% endif %} placeholder="{{item.Content}}" rows="5"></textarea>
              {% elif item.Type == "radio" %}
              {%- for val in item.Items %}
              <label><input type="radio" name="{{item.FieldName}}" value="{{val}}" {% if item.Required %}required{% endif %}> {{val}}</label>
              {%- endfor %}
              {% elif item.Type == "checkbox" %}
              {%- for val in item.Items %}
              <label><input type="checkbox" name="{{item.FieldName}}[]" value="{{val}}" {% if item.Required %}required{% endif %}> {{val}}</label>
              {%- endfor %}
              {% elif item.Type == "select" %}
              <select id="{{item.FieldName}}" name="{{item.FieldName}}" {% if item.Required %}required{% endif %}>
                  {%- for val in item.Items %}
                  <option value="{{val}}">{{val}}</option>
                  {%- endfor %}
              </select>
              {% endif %}
          </div>
      </div>
      {% endfor %}
  {% endguestbook %}

  {# 验证码将在此处插入 #}

  <div>
      <button type="submit">提交留言</button>
      <button type="reset">重置</button>
  </div>
</form>

通过这段代码,无论是文本框、数字输入、多行文本、单选、多选还是下拉菜单,安企CMS都能根据后台的配置,在前台自动生成相应的HTML表单元素。我们只需要关注字段的逻辑和样式,无需为每种字段类型编写重复的HTML结构。

增强安全性:验证码的集成

为了防止恶意提交和垃圾信息,留言表单通常需要集成验证码功能。安企CMS内置了验证码支持,我们只需在后台“全局设置”->“内容设置”中启用留言评论验证码,便可以将其集成到前端表单。

集成验证码的关键在于生成一个唯一的验证码ID和对应的图片,并在用户提交时一同验证。以下是集成验证码的模板和JavaScript代码片段:

”`twig

{# ... 你的其他表单字段 ... #}

<div>
    <label for="captcha">验证码:</label>
    <div style="display: flex; align-items: center;">
        <input type="hidden" name="captcha_id" id="captcha_id">
        <input type="text" id="captcha" name="captcha" required placeholder="请填写验证码" style="flex: 1; margin-right: 10px;">
        <img src="" id="get-captcha" alt="验证码" style="width: 120px; height: 40px; cursor: pointer; border: 1px solid #ddd;" />
    </div>
</div>

<div>
    <button type="submit">提交留言</button>
    <button type="reset">重置</button>
</div>

{# 如果您的网站使用jQuery,也可以这样写: #} {#