本文涵盖以下主题:
- 简介< / >
- 模板基础知识< / >
- 评论< / >
- 块注释< / >
- 文字< / >
- 属性< / >
- 条件< / >
- 如何评估条件< / >
- 修剪空白< / >
- 助手< / >
- 变化的范围< / >
- 将根上下文传递给一个助手< / >
- 访问数组中的项< / >
- 长度< / >
- 子表达式< / >
简介
每个帮助中心主题由一个集合组成可编辑的页面模板< / >定义帮助中心中不同类型页面的布局。例如,知识库文章有一个模板,请求列表有一个模板,等等。亚博官方app
每个模板都混合了HTML标记和句柄式表达式,在模板中可以用双花括号来标识。车把< / >是一个简单的模板引擎,允许您在呈现时而不是在设计时在页面上插入或操作内容。
帮助中心中的模板语言被调用Curlybars并实现了Handlebars语言的一个大子集。本指南向您展示如何使用该语言自定义帮助中心中的页面。
帮助中心为您提供了帮助程序和命名属性来定制您的内容。其中一些可以在所有帮助中心页面上共享和使用。其余的是特定于页面的。
例子
{{#每个评论}} {{author.name}} {{/each}}
该示例生成在页面上留下评论的用户列表。的每一个
Helper遍历页面中的每个值评论
财产。的值对于每个注释author.avatar_url
而且author.name
属性被插入到HTML中。
模板基础知识
本节介绍编写任何模板所需的构建块。有关更多信息,请参见帮助中心模板< / >在developer.ze亚博ndesk.com上。
一个Curlybars模板由两部分组成:要按原样呈现的逐字文本和Curlybars表达式。这意味着空模板也是有效模板,只包含文本的模板也是有效模板。例如,下面是一个有效的模板:
文章
文章的一些细节
. b
当然,如果帮助中心模板只支持逐字逐句的文本,那么在呈现时就不能真正地自定义它们。要添加模板逻辑,需要用双花括号({{
而且}}
).
要将模板逻辑添加到前面的示例中,您可以如下所示修改模板:
Article
Article的一些细节
{{Article .author.name}}
下面几节将解释如何编写有效表达式来对模板进行有意义的更改。
请注意,在另一对卷曲符号中嵌套一对卷曲符号是无效的语法。例如,以下是不允许的:
Article
Article的一些细节
{{{{…}}}}
评论
在某些情况下,模板中有一些不会泄漏到呈现页面的注释可能会派上用场。出于这个目的,Curlybars允许在开头的curlies后面加上感叹号,不需要任何空格:{{!...}}
.您可以使用此语法在示例中添加代码注释:
{{!此模板旨在显示文章的详细信息}}文章
文章的一些详细信息
下面是页面呈现后发送给浏览器的内容:
文章
文章的一些细节
. b
在开发模板时,这种丢弃注释中的任何内容的效果实际上可以派上用场。您可能希望注释掉一些代码,以执行一些检查、调试等等。
块注释
不幸的是,到目前为止所描述的注释语法并不适合注释掉Curlybars代码。要注释掉Curlybars代码,请使用以下语法:{{!——……——}}
.这种注释可以跨越几行,有效地注释掉代码。例子:
{{!此模板旨在显示文章的详细信息}}文章
文章的一些详细信息
{{!——我想推荐出以下代码:{{…一些Curlybars表达式
上面的模板渲染如下:
文章
文章的一些细节
. b
文字
要包含希望Curlybars准确地按照所编写的方式解释的值,Curlybars支持的概念文字.字面量可以表示三种类型的值字符串,一个布尔,或数量.
要表示字符串,可以同时使用单引号和双引号,但不能混合使用。例如,'这是一个有效字符串'
,"这也是有效的"
,但"这是不成立的"
.
一个数字可以是任何正整数或负整数。123
是有效的正数,+ 123
表示相同的值,00123
仍然有效,并且-123年
也是有效的。
布尔值表示为真正的
而且假
.不允许有其他变化。例如,真正的
而且假
在Curlybars中不会被解释为布尔值。
你可以呈现文字。例子:
字符串:{{'hello world'}}布尔值:{{true}}数字:{{42}}
页面显示如下:
字符串:'hello world'一个布尔值:true一个数字:42
属性
帮助中心中的每个模板都可以访问上下文表示关于帮助中心的数据。例如,Article Page模板有一个名为文章
这将公开用户所请求的文章的结构。有关可以在模板中使用的所有属性,请参见帮助中心模板< / >在developer.ze亚博ndesk.com上。
使用点表示法从这些对象中提取特定的信息。一个简单的例子是article.title
.
属性的完全限定名有时称为路径.例如,的名字
属性在作者
对象,但是article.author.name
是它的路径。
可以将属性的值用双花括号括起来来显示。回到这个例子,你可能想要在一个单独的段落中打印出作者的名字:
<标题>文章< / h1 > < p >作者:{{article.author.name}} < / p >
假设用户想看一篇由名叫John Venturini的代理写的文章。模板的渲染方式如下:
文章
作者:John Venturini
您可能还想呈现文章本身。的文章
对象具有身体
属性,它包含项目的内容。您可以按照如下方式修改模板以呈现文章的主体:
文章
作者:{{Article . Author .name}}
< Article >{{Article .body}} Article > . {{Article .body}
条件
除了呈现属性值之外,模板语言还允许您向模板添加条件呈现逻辑。
例如,如果请求的文章是内部的,您可能希望呈现HTML片段。Article Page上下文具有article.internal
返回的属性真正的
如果文章是内部的和假
否则。
您可以创建如果
使用此信息进行阻塞。的如果
表达式必须指定true或false的条件。结果决定是否呈现块中的内容。下面是基本语法:
如果条件为真,则呈现。{{/如果}}
可按如下方式修改样例模板:
Article
{{#if Article .internal}} 这篇文章是内部的。< / p >{{/如果}}
Author: {{article.author.name}}
{{article.body}}
当条件为false时,您可能想要呈现一个块。在这种情况下,使用an除非
块。语法类似于如果
布洛克:
如果条件为false则呈现。{{/除非}}
回到示例,假设您还希望在文章不在内部时呈现消息。您可以对模板进行如下修改:
Article
{{#if Article .internal}} 这篇文章是内部的。< / p >{{/如果}}{{#unless article.internal}}
This is a publicly visible article!
{{/unless}} Author: {{article.author.name}}
{{article.body}}
这种条件逻辑——“如果为真,就做这个,否则就做这个”——通常由if - else
块。语法如下:
如果条件为真,则呈现。{{else}}如果条件为false则呈现。{{/如果}}
用户可修改样例如下:
Article
{{#if Article .internal}} 这篇文章是内部的。
{{else}} 这是一个公开可见的文章!< / p >{{/如果}}
Author: {{article.author.name}}
{{article.body}}
的除非
Block还有一个unless-else
变体。你可以用它来达到和if - else
布洛克:
Article
{{#unless Article .internal}} 这是一个公开可见的文章!
{{else}} 这篇文章是内部的。< / p >{{/除非}}< p >作者:{{article.author.name}} < / p > <文> {{article.body}} < / >的文章
如何评估条件
条件通常是帮助中心属性,例如article.internal
,其布尔值为真正的或假.有些属性没有布尔值。这些属性的评估如下:
如果值为数字,则0为假,任何其他数字为真
如果值为字符串,空字符串为假,其他字符串为真
如果该值是对象的集合,空集合为假,其他集合为真
如果值为空,则表达式为假
假设您想要设置一些检查数字的条件逻辑。文章页有一个article.comment_count
属性,该属性包含项目中的评论总数。您可以使用如果
条件,以测试计数是否为非0
并展示一些令人愉快的信息。例子:
文章
作者:{{Article . Author .name}}
< Article >{{Article .body}} Article > . {{Article .body}{{#if article.comment_count}} Yahoo! This article has got some comments!
{{/if}}
修剪空白
当Curlybars处理模板时,它会原封不动地显示任何文本。这很好,大多数时候都很有效。但是,有时需要对表达式旁边的空白字符进行更多的控制。以下面的代码为例:
< a href = "//www.ying8.net/support/hc/en-us/articles/…" class = "{{#如果强调}}突出{{/如果}}" >点击我!< / >
它呈现以下HTML时突出显示
是正确的:
点击我!< / >
单词周围有一个前导空格和一个尾随空格突出.这当然很好,但是假设您希望保留模板中的空格而不呈现它们。可以使用波浪号(~)。
在左花括号或右花括号中添加波浪号可清除所附文本中的空白。例子:
< a href = "//www.ying8.net/support/hc/en-us/articles/…" class = "{{#如果强调~}}突出{{~ /如果}}" >点击我!< / >
波浪字符修饰单词周围的前导空格和尾随空格突出:
点击我!< / >
波浪号字符修饰没有图形表示但影响空格或分隔行的任何空白字符,如换行符、制表符、回车符、换行符、简单空格或制表符。这意味着您可以将示例发挥到极致,并表达前面的内容如果
块在更多的行,使其更具可读性。例子:
< a href = "//www.ying8.net/support/hc/en-us/articles/…" class = "{{~ #如果强调~}}突出{{~ /如果~}}”>点击我!< / >
这仍然呈现如下:
点击我!< / >
这些例子在现实生活中没有太大意义,但是使用波浪号字符的效果可能因情况而异。
助手
在某些模板中,访问数据、显示数据和添加一些条件逻辑就足够了。不过,您可能会喜欢一些附加功能。例如,您可能希望显示一个本地化字符串,该字符串根据页面请求者的语言环境而变化。或者你可能想要截短一段很长的文本。
可以在模板中使用助手.有关可以在模板中使用的所有帮助程序,请参见帮助中心模板< / >在developer.ze亚博ndesk.com上。
例如,您可以使用名为摘录
在Article页面模板中截断字符串。在文章示例中,假设您需要显示文章标题的删节版本。你可以通过如下方式修改模板来做到这一点:
<标题>{{摘录的文章。title characters=50}} 作者:{{article. Author .name}}
{{article.body}} . {{article.body}
上面的例子显示了使用花括号来调用一个helper。的摘录
Helper接受由解析为字符串的表达式组成的形参。helper有一个字符
选项,指定要保留的字符数。的字符
选项不是强制性的。如果不指定,则使用默认值。看到摘录< / >在帮助中心模板中获取更多详细信息。
调用helper的语法是{{
.唯一的强制元素是helper的名称。参数和选项因帮助器而异。
现在,假设您想要更新模板,以便在作者的名字是John Venturini时显示一条令人高兴的消息。不幸的是,你不能使用如果
条件,检查是否article.author.name
等于“约翰Venturini”
因为如果
只对一个表达式有效。比较操作符= =
不可用。
那么如何添加这样的逻辑呢?幸运的是,您可以使用是
帮手。它使用两个参数并测试它们是否相等。例子:
<标题>{{摘录的文章。title characters=50}} {{#is article.author.name 'John Venturini'}} 酷!John Venturini是这篇文章的作者!
{{/is}} {{article.body}} .body}
如果作者是约翰·文图里尼,上面的片段就能传达出令人愉快的信息。但如果不是他,你想传达不同的信息呢?好消息是是
也可以包括其他的
就像if - else
声明。如果作者不是John Venturini,要恢复旧消息,可以添加其他的
Block如下:
<标题>{{摘录的文章。title characters=50}} {{#is article.author.name 'John Venturini'}} 酷!John Venturini是这篇文章的作者!< / p >{{其他}}< p >作者:{{article.author.name}} < / p >{{/}} <文> {{article.body}} < / >的文章
变化的范围
使用点表示法访问数据非常简单,特别是当我们需要的信息的路径不是太长时。例子:article.title
.不过,在某些情况下,您可能希望访问路径较长的属性。例子:article.author.name
.如果需要,可以在模板中使用更长的路径。例如,您可以在示例中添加作者姓名和avator,如下所示:
<标题>{{摘录的文章。标题字符=50}} {{#is article.author.name 'John Venturini'}} 酷!John Venturini是这篇文章的作者!< / p >{{其他}}< p >作者:{{article.author.name}} < / p >{{/}} <文> {{article.body}} < / >的文章
上面的代码段运行正常,但是较长的属性路径使代码看起来有点混乱。解决这个问题的一种方法是使用特辑与
构造。与
接受一个参数,该参数表示要在与其关联的代码块中使用的基本上下文。语法如下:
{{#with }}…{{和}}
您可以通过以下方式改进示例:
<标题>{{摘录的文章。标题字符=50}} {{#with article。作者}} {{#is name 'John Venturini'}} Cool! John Venturini is the author of this article!
{{else}} Author: {{name}}
{{/is}} {{/with}} {{article.body}}
的article.author
参数消除了包含的需要article.author
在块的任意路径上。所以{{名称}}
里面的块相当于article.author.name
在街区外面。
你不能用article.author.name
因为它的值是article.author.article.author.name
.同样,也不能访问块中文章的标题article.title
因为article对象只能在根上下文中访问,根上下文中位于块之外。
从所设置的上下文中转义与
和访问外部上下文,使用. . /
路径中的符号。控件中显示文章的标题与
Block如下:
<标题>{{摘录的文章。标题字符=50}} {{#with article。作者}}{{. . /文章。title}} {{#is name 'John Venturini'}} 酷!John Venturini是这篇文章的作者!< / p >{{其他}}< p >作者:{{名称}}< / p >{{/}}{{和}}<文> {{article.body}} < / >的文章
您可以使用. . /
在同一路径上重复标记。它会跳回相同数量的上下文。例如,下面的例子仍然可以正常工作:
<标题>{{摘录的文章。标题字符= 50}}< / h1 >{{#条}}{{#与作者 }} {{../../ 篇文章。标题}}…{{和}}<文> {{article.body}} < / >的文章
您可能希望在没有指定作者时呈现特定的消息。你可能会决定使用an如果
Block来做到这一点,如下所示:
<标题>{{摘录的文章。标题字符=50}} {{#if文章。Author}} {{#with article。作者}}…{{/with}} {{else}}本文没有作者!{{/如果}}<文> {{article.body}} < / >的文章
请注意,在帮助中心,article.author
实际上从不为空。我们在这里假设是这样的,只是为了这个例子。
上面的代码段工作得很好,但是您可以使用其他的
块与
构造。如果参数为false,则执行else块。可修改样例如下:
<标题>{{摘录的文章。标题字符=50}} {{#with article。作者}}…{{else}}本文没有作者!{{和}}<文> {{article.body}} < / >的文章
使用一个其他的
Block还使代码更具可读性。
将根上下文传递给一个助手
使用这
关键字将当前根上下文传递给helper。假设你有一个render_author
接收文章
对象作为参数,以显示关于其作者的详细信息。您可以使用这
关键字如下:
<标题>{{摘录的文章。标题字符=50}} {{#with article}} {{render_author this}} {{/with}} {{article.body}} . {
这
将被解析为文章
.
访问数组中的项
一些帮助中心属性由对象数组组成。例如,附件
属性由附件数组组成。
要访问数组中的项,需要遍历每个项。的每一个
Helper正是这样做的。例子:
<标题>{{摘录的文章。标题字符=50}} {{#with article。作者}}…{{和}}<文> {{article.body}} < / >的文章{{#每个附件}}< a href = " {{url}}”目标= "平等" >{{名称}}< / > < span >({{大小}})< / span >{{/每个}}
上面的代码片段列出了所有附件。每个列表项显示特定于一个附件的数据,比如它的url
,的名字
,大小
.
就像与
,每一个
更改其块中的上下文。这意味着如果要访问外部上下文,可以使用. . /
符号。
您可能希望在数组为空时呈现消息。可以通过使用如果
块,如下所示:
...{{#如果附件}}{{#每个附件}}< a href = " {{url}} "目标= "平等" >{{名称}}< / > < span >({{大小}})< / span >{{/每个}}{{其他}}不好意思,没有附件!{{/如果}}
这工作得很好,但是你也可以使用其他的
块,使代码更容易阅读:
...{{#每个附件}}< a href = " {{url}}”目标= "平等" >{{名称}}< / > < span >({{大小}})< / span >{{其他}}不好意思,没有附件!{{/每个}}
长度
每个数组都有一个隐式数组长度
属性,该属性提供数组中的元素数。例如,如果要显示附件的数量,请使用长度
属性如下:
...有{{attachments.length}}。{{#每个附件}}< a href = " {{url}}”目标= "平等" >{{名称}}< / > < span >({{大小}})< / span >{{/每个}}
子表达式
子表达式允许您在单个表达式中调用多个helper,并将内部helper调用的结果作为参数传递给外部helper。子表达式由括号分隔。
下面的例子显示了表达式中的子表达式:
{{搜索占位符=(dc "search_text")}}
子表达式可以嵌套:
{{搜索占位符=(摘录(dc "search_text"))}}
子表达式可以用在条件帮助中:
{{#if(比较集合。长度"==" 0)}}
< div >空集合。< / div >
{{其他}}您的集合有{{集合。长度}}项目< / div >
{{/如果}}子表达式可以在数组迭代器helper中使用:
{{#each (slice(过滤用户。徽章="category_slug" ="成就")
0 4)}}
< >节
< h3 >{{名称}}< / h3 >
< div >{{描述}}< / div >
< / >节
{{/每个}}
5个评论
-
有办法创建一个自定义布尔?例如,我们想要创建一个名为“legacyproduct”的布尔值,用于#if循环,以便将类附加到元素上。
-
嗨史蒂夫,
目前,这在模板语言中似乎是不可能的。
我建议使用Javascript。然后映射到这里。 -
在类别和部分页面上,我想显示每篇文章的文本之间的每篇文章的h1标签(而不是什么是在每个标题标签)。
我想相关的代码会放在分类页。和section_page.hbs。
我想,这就是当前显示的标题。
< class = " article-list-item__link " href = " {{url}} " >{{标题}}< / >
这样的行动可能吗?如果是这样,大致的轮廓你能怎么做?
-
"请注意,在另一对卷曲线中嵌套一对卷曲线是无效语法"
那么你将如何着手实现这一目标呢?
示例:我想设置搜索字段的占位符为一些动态内容:
{{search instant=true占位符={{dc 'key'}}}}