GravCMS字段唯一ID

时间:2017-01-03 22:25:42

标签: twig grav

我正在为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>

1 个答案:

答案 0 :(得分:1)

假设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 %}