1

我在 Grav 中有以下页面结构:

# Title
## Subtitle
### Subsubtitle

页面结构始终相同,只有这三个项目。

如何在 Twig 模板中分别检索每个项目(标题/副标题/副标题)?

然后树枝模板将执行以下操作:

<p> You typed {{ page.whatever_retrieves_the_title_# }} as title, then {{ page.whatever_retrieves_the_subtitle_## }} as subtitle and finally {{ page.whatever_retrieves_the_subsubtitle_### }} as subsubtitle</p>

如果我没有上述结构怎么办:

- Title
- Subtitle
- Subsubtitle

目标是用户只添加三个项目的结构,并且树枝模板使用每个项目来显示更复杂的布局。

4

2 回答 2

4

这是降价,对吧?

# Title
## Subtitle
### Subsubtitle

您可以在 Twig 中使用 获取页面 Markdown 的 HTML 版本{{ page.content }},如Grav 的文档中所述。所以你应该得到这样的东西:

<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>

您可以使用splitraw过滤器来提取这些标签的内容。我也在使用default过滤器,以便在提取标签内容失败时不会出现错误:

Title is:
{{ page.content|split('<h1>')[1]|default|raw|split('</h1>')[0] }}

Subtitle is:
{{ page.content|split('<h2>')[1]|default|raw|split('</h2>')[0] }}

Subsubtitle is:
{{ page.content|split('<h3>')[1]|default|raw|split('</h3>')[0] }}

或者因为 Grav 似乎提供了一个regex_replace过滤器,你也可以使用它:

Title is:
{{ page.content|regex_replace('~.*<h1>(.*)</h1>.*~s', '$1') }}

Subtitle is:
{{ page.content|regex_replace('~.*<h2>(.*)</h2>.*~s', '$1') }}

Subsubtitle is:
{{ page.content|regex_replace('~.*<h3>(.*)</h3>.*~s', '$1') }}

相反,如果你有这个:

- Title
- Subtitle
- Subsubtitle

您可以再次使用split,defaultraw过滤器:

Title is:
{{ page.content|split('<li>')[1]|default|raw|split('</li>')[0] }}

Subtitle is:
{{ page.content|split('<li>')[2]|default|raw|split('</li>')[0] }}

Subsubtitle is:
{{ page.content|split('<li>')[3]|default|raw|split('</li>')[0] }}

不是很漂亮。:-) 如果标题可以包含 HTML(例如## Hello **world**!<h2>Hello <strong>world</strong>!</h2>)或特殊字符,您可能需要附加|raw到已经很长的魔法咒语。

于 2018-02-21T19:12:29.190 回答
1

其他人通过降价操作提供了很好的解决方案。但是,您可以使用重力功能并提供您自己的蓝图,并让您的用户填写一些字段。

假设这是一个使用模板的页面,blog_article.html.twig因此您可以创建一个名为blog_article.yamlinside的文件user/themes/yourtheme/blueprints并用以下蓝图填充它:

title: Blog_Article
'@extends':
    type: default
    context: blueprints://pages

form:
  fields:
    tabs:
      fields:
        content:
          fields:
            header.mytitle:
              type: text
              label: My Label
            header.mysubtitle:
              type: text
              label: Type Subtitle
            header.mysubsubtitle
              type: text
              label: Type subsubtitle

现在,如果您尝试从管理员编辑页面,您将在页面媒体下看到三个新字段添加到页面。

然后,您可以使用以下树枝在模板中显示这些字段:

{{ page.header.mytitle }} 
{{ page.header.mysubtitle }}
{{ page.header.mysubsubtitle }}

希望能帮助到你

于 2018-02-23T11:31:10.380 回答