GravCMS 字段唯一 ID

GravCMS field unique ID

我正在为 GravCMS 中的手风琴菜单构建模块化模板。

我需要一个为 id 生成的唯一标识符;是否有任何我可以调用并用作标识符的预先存在的东西?如果没有,我是否需要创建一个额外的字段并在保存时生成它?

目前我的树枝中有 {{ pane.pane_title }} 的地方是我需要一个唯一 ID 的地方。

非常感谢这里的任何练习建议。

我的 accordion.yaml 文件如下所示:

title: Accordion
@extends: default

form:
  fields:
    tabs:
      type: tabs
      active: 1

  fields:
    panes:
      type: tab
      title: Accordion Panes
      fields:
        header.panes:
          name: panes
          type: list
          label: Panes

          fields:
            .pane_title:
              type: text
              label: Title
            .pane_content:
              type: editor
              label: Content

我的文件,accordion.html.twig 看起来像这样:

<div class="container">
<div class="row">
    <div class="panel-group" id="accordion">
        {% for pane in page.header.panes %}
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h4 class="panel-title">
                        <a data-toggle="collapse" data-parent="#accordion" href="#collapse-{{ pane.pane_title }}">
                            {{ pane.pane_title }}</a>
                    </h4>
                </div>
                <div id="collapse-{{ pane.pane_title }}" class="panel-collapse collapse">
                    <div class="panel-body">{{ pane.pane_content }}</div>
                </div>
            </div>
        {% endfor %}
    </div>
</div>

假设 pane 有一个独特的 slug 你最好使用 slug 而不是 pane_title,因为你最终可能会得到特殊的否则需要转义的字符。

如果 slug 不可用,您可以为 ID 生成随机的唯一字符串:

{% for pane in page.header.panes %}
  {% set guid = random_string(36) %}
  ...
  <div id="collapse-{{guid}}"...>
  ...
{% endfor %}

但是,如果您需要确保 ID 在页面浏览中保持一致(例如直接链接到特定面板),您可能需要对标题进行 MD5 哈希处理,这样就无需转义任何字符:

{% for pane in page.header.panes %}
  {% set guid = pane.pane_title|md5 %}
  ...
  <div id="collapse-{{guid}}"...>
  ...
{% endfor %}