在网站运营中,与访客互动、收集反馈是提升用户体验和获取宝贵信息的重要环节,而留言表单正是实现这一目标的核心工具。安企CMS(AnQiCMS)深知其重要性,为用户提供了guestbook标签,让你可以轻松、灵活地构建功能强大且高度定制化的网站留言表单。

使用guestbook标签,你不仅能快速生成基础的留言功能,更能根据自己的业务需求,为表单添加各种自定义字段,从而精确地收集你想要的信息,无需触碰复杂的后端代码。

核心功能:可定制字段的留言表单

安企CMS的留言表单功能强大之处在于其可定制性。它允许你在网站后台管理系统中定义留言表单所需的字段,例如除了常见的姓名、联系方式和留言内容之外,你还可以添加“选择服务类型”、“预约时间”、“上传文件”等各种字段。这些自定义字段将直接影响前端留言表单的展现形式和收集的信息类型。

当你在后台设置好这些字段后,前端模板中只需简单调用guestbook标签,安企CMS就会根据你的配置,自动生成相应的表单元素。这极大地简化了开发流程,让内容运营者也能轻松驾驭表单的创建与管理。

深入理解 guestbook 标签

guestbook标签的使用方式非常直观:{% guestbook fields %}...{% endguestbook %}。在这里,fields是一个由安企CMS系统根据后台配置自动生成的数组对象。这个数组包含了你为留言表单定义的所有字段的详细信息。

让我们来看看fields数组中每个item(即每个表单字段)都包含了哪些关键属性,它们是实现定制化的基石:

  • Name:这是字段的显示名称,也就是访客在表单上看到的标签文字,比如“您的姓名”、“联系邮箱”等。
  • FieldName:这是后端用于识别和存储该字段数据的唯一标识,通常是一个英文字符串,例如user_namecontact_email。在表单提交时,这个名称会作为数据的一部分发送到服务器。
  • Type:这个属性非常关键,它决定了表单元素的类型。安企CMS支持多种类型,包括:
    • text (单行文本输入框)
    • number (数字输入框)
    • textarea (多行文本域)
    • radio (单选按钮组)
    • checkbox (多选框组)
    • select (下拉选择框)
  • Required:一个布尔值(truefalse),表示该字段是否为必填项。如果为true,前端表单通常会添加相应的验证规则。
  • Content:这个属性通常用作文本输入框的占位符(placeholder)或默认值,为访客提供填写提示。
  • Items:当字段类型是radiocheckboxselect时,这个属性会提供一个数组,包含所有可供选择的选项值。

逐步构建你的留言表单

现在,让我们通过一个实际的模板代码示例,看看如何利用guestbook标签来快速生成一个可定制字段的留言表单。

首先,你需要确保已经在安企CMS后台的”功能管理”->“网站留言管理”中,根据你的需求添加了自定义字段,并设置了它们的名称、类型、是否必填以及选项(如果需要)。例如,你可能设置了“姓名(text,必填)”、“邮箱(text,必填)”、“服务类型(select,选项:网站建设、SEO优化、内容营销)”、“留言内容(textarea,必填)”。

接下来,你可以在你的留言页面模板文件(通常是guestbook/index.html或你自定义的留言页模板)中,编写如下代码:

”`twig

{# 用于系统识别提交来源和返回格式,如果需要json返回,可设置为json #}
<input type="hidden" name="return" value="html">

{% guestbook fields %}
    {% for item in fields %}
    <div class="form-group">
        <label for="{{ item.FieldName }}">{{ item.Name }}{% if item.Required %} *{% endif %}</label>
        <div>
            {% if item.Type == "text" or item.Type == "number" %}
            <input type="{{ item.Type }}"
                   id="{{ item.FieldName }}"
                   name="{{ item.FieldName }}"
                   {% if item.Required %}required{% endif %}
                   placeholder="{{ item.Content }}"
                   class="form-control">
            {% elif item.Type == "textarea" %}
            <textarea id="{{ item.FieldName }}"
                      name="{{ item.FieldName }}"
                      {% if item.Required %}required{% endif %}
                      placeholder="{{ item.Content }}"
                      rows="5"
                      class="form-control"></textarea>
            {% elif item.Type == "radio" %}
            <div class="form-check-group">
                {%- for val in item.Items %}
                <label class="form-check-label">
                    <input type="radio"
                           name="{{ item.FieldName }}"
                           value="{{ val }}"
                           {% if loop.first %}checked{% endif %} {# 默认选中第一个 #}
                           {% if item.Required %}required{% endif %}
                           class="form-check-input"> {{ val }}
                </label>
                {%- endfor %}
            </div>
            {% elif item.Type == "checkbox" %}
            <div class="form-check-group">
                {%- for val in item.Items %}
                <label class="form-check-label">
                    <input type="checkbox"
                           name="{{ item.FieldName }}[]" {# 多选框通常需要[]表示数组 #}
                           value="{{ val }}"
                           class="form-check-input"> {{ val }}
                </label>
                {%- endfor %}
            </div>
            {% elif item.Type == "select" %}
            <select id="{{ item.FieldName }}"
                    name="{{ item.FieldName }}"
                    {% if item.Required %}required{% endif %}
                    class="form-control">
                {%- for val in item.Items %}
                <option value="{{ val }}">{{ val }}</option>
                {%- endfor %}
            </select>
            {% endif %}
        </div>
    </div>
    {% endfor %}

    {# 留言验证码,如果后台开启,需集成 #}
    {# 详情请参考 tag-captcha.md 文档 #}
    {#
    <div class="form-group captcha-group">
        <label for="captcha">验证码 {% if system.guestbook_captcha_open %}*{% endif %}</label>
        <div style="display: flex; align-items: center;">
            <input type="hidden" name="captcha_id" id="captcha_