首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grav -从模板中的页面中检索特定项

Grav -从模板中的页面中检索特定项
EN

Stack Overflow用户
提问于 2018-02-21 17:26:05
回答 2查看 852关注 0票数 1

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

代码语言:javascript
复制
# Title
## Subtitle
### Subsubtitle

页面结构总是相同的,只有这三项。

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

然后,小枝模板将执行如下操作:

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
- Title
- Subtitle
- Subsubtitle

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-21 19:12:29

这是Markdown对吧?

代码语言:javascript
复制
# Title
## Subtitle
### Subsubtitle

您可以使用{{ page.content }}在Twig中获得页面标记的HTML版本,如格拉夫文献中所述。所以你应该得到这样的东西:

代码语言:javascript
复制
<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>

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

代码语言:javascript
复制
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似乎提供了一个过滤器,所以您也可以使用它:

代码语言:javascript
复制
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') }}

如果你有这样的选择:

代码语言:javascript
复制
- Title
- Subtitle
- Subsubtitle

您可以再次使用splitdefaultraw过滤器:

代码语言:javascript
复制
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附加到已经很长的魔法咒语中。

票数 4
EN

Stack Overflow用户

发布于 2018-02-23 11:31:10

另一些则提供了良好的减价操作解决方案。但是,您可以使用grav特性并提供自己的蓝图,并让用户填充一些字段。

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

代码语言:javascript
复制
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

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

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

代码语言:javascript
复制
{{ page.header.mytitle }} 
{{ page.header.mysubtitle }}
{{ page.header.mysubsubtitle }}

希望它能帮上忙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48911978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档