我在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目标是用户只添加由三个项组成的结构,小枝模板使用每个项来显示更复杂的布局。
发布于 2018-02-21 19:12:29
这是Markdown对吧?
# Title
## Subtitle
### Subsubtitle您可以使用{{ page.content }}在Twig中获得页面标记的HTML版本,如格拉夫文献中所述。所以你应该得到这样的东西:
<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>您可以使用split和raw过滤器提取这些标记的内容。我还使用了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似乎提供了一个过滤器,所以您也可以使用它:
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、default和raw过滤器:
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-23 11:31:10
另一些则提供了良好的减价操作解决方案。但是,您可以使用grav特性并提供自己的蓝图,并让用户填充一些字段。
假设这是一个使用模板blog_article.html.twig的页面,因此您可以在user/themes/yourtheme/blueprints中创建一个名为blog_article.yaml的文件,并填充以下蓝图:
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编辑您的页面,您将看到三个新的字段添加到页面中,在页面媒体下面。
然后,您可以使用以下小树枝在模板中显示这些字段:
{{ page.header.mytitle }}
{{ page.header.mysubtitle }}
{{ page.header.mysubsubtitle }}希望它能帮上忙
https://stackoverflow.com/questions/48911978
复制相似问题