0

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

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

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

非常感谢您对此处实践的任何建议。

我的手风琴.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>

4

1 回答 1

1

假设pane有一个独特的slug,你最好使用slugthan 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 %}
于 2017-01-29T06:16:59.040 回答