Twig Grav-从模板中的页面检索特定项
我在Grav中有以下页面结构:Twig Grav-从模板中的页面检索特定项,twig,grav,Twig,Grav,我在Grav中有以下页面结构: # Title ## Subtitle ### Subsubtitle 页面结构总是相同的,它只有这三个项目 如何在Twig模板中分别检索每个项目(标题/副标题/子标题) 然后,细枝模板将执行以下操作: <p> You typed {{ page.whatever_retrieves_the_title_# }} as title, then {{ page.whatever_retrieves_the_subtitle_## }} as subti
# 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
您可以使用{{page.content}}
在Twig中获取页面标记的HTML版本,如中所述。所以你应该得到这样的东西:
<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>
或者因为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') }}
您可以再次使用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] }}
标题是:
{page.content | split('')[1]|默认| raw | split(' ')[0]}
副标题是:
{page.content | split('')[2]|默认| raw | split(' ')[0]}
子标题为:
{page.content | split('')[3]|默认| raw | split(' ')[0]}
不太漂亮。:-)如果标题可以包含HTML(例如,
##你好**世界**!
→ <代码>你好world!)或特殊字符,您可能需要将|raw
附加到已经很长的魔法咒语中。这是标记,对吗
# Title
## Subtitle
### Subsubtitle
您可以使用{{page.content}}
在Twig中获取页面标记的HTML版本,如中所述。所以你应该得到这样的东西:
<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>
或者因为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') }}
您可以再次使用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] }}
标题是:
{page.content | split('')[1]|默认| raw | split(' ')[0]}
副标题是:
{page.content | split('')[2]|默认| raw | split(' ')[0]}
子标题为:
{page.content | split('')[3]|默认| raw | split(' ')[0]}
不太漂亮。:-)如果标题可以包含HTML(例如,
##你好**世界**!
→ Helloworld!
)或特殊字符,您可能需要将|raw
附加到已经很长的魔法咒语中。其他人提供了很好的降价操作解决方案。但是,您可以使用grav功能并提供自己的蓝图,并让用户填写一些字段
假设这是一个使用模板blog\u article.html.twig
的页面,因此您可以在user/themes/yourtheme/blueprints
内部创建一个名为blog\u 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 }}
希望它能帮助其他人通过降价操作提供了很好的解决方案。但是,您可以使用grav功能并提供自己的蓝图,并让用户填写一些字段 假设这是一个使用模板
blog\u article.html.twig
的页面,因此您可以在user/themes/yourtheme/blueprints
内部创建一个名为blog\u 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 }}
希望有帮助谢谢你回答了这个问题,但是我最终发现在Grav中更好的方法是使用一个插件,它允许定义节,然后在Twig中检索这些节。@M.E.如果你找到了更好的方法,这个解决方案非常难看,非常粗糙!作为参考,我包括了这个相关的问题,并且有一个更好的方法:谢谢这回答了这个问题,然而,我最终发现在Grav中更好的方法是使用一个插件,该插件允许定义节,然后在Twig中检索这些节。@M.E.如果你找到一个更好的方法,这个解决方案非常难看,非常有黑客味!作为参考,我提出了一个相关的问题,并且有一个更好的方法:您不想在标题中定义这些变量是有原因的吗?@PaulMassendari如果我正确理解grav admin用户界面的工作原理,用户需要选择专家模式来编辑标题中的变量。我希望非技术用户能够更改该文本。不完全是这样,您可以提供自己的蓝图。我将提供一个答案作为示例。您不想在标题中将这些变量定义为vars有什么原因吗?@PaulMassendari如果我正确理解grav admin用户界面的工作原理,用户需要选择专家模式来编辑标题中的变量。我希望非技术用户能够更改该文本。不完全是这样,您可以提供自己的蓝图。我将提供一个答案作为例子。这非常有趣,我将尝试一下。我从来没有使用过蓝图,所以这是非常有趣的,我会尝试一下。到目前为止,我从未使用过蓝图