如何使用 Google Blogger Lambda 运算符
How to use Google Blogger Lambda Operators
Google Blogger 为其模板语言实现了一组新的 Lambda 表达式运算符。参见:https://blogger.googleblog.com/2016/05/more-custom-template-flexibility.html and https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY .
给出的示例代码(经b:if/修改)为:
<!-- Show a Flower image if the post has the label flower -->
<b:if cond='data:post.labels any (l => l.name == "Flower")'>
<img src=’/img/flower.jpg’ />
</b:if>
我不知道如何让它在模板中工作。请有人提供一些工作代码,我可以将其放入模板并查看它的工作情况。
更新:
这似乎有效。但是如何或者我可以删除循环?
<b:section class='Test1' id='Test1' maxwidgets='' showaddelement='no'>
<b:widget id='Blog2' locked='true' title='Blog Posts' type='Blog' version='1' visible='true'>
<b:includable id='main'>
<b:loop values='data:posts' var='post'>
<h1>Post found</h1>
<b:if cond='data:post.labels any (label => label.name == "flower")'>
<h1>Flower!</h1>
</b:if>
</b:loop>
</b:includable>
</b:widget>
</b:section>
例如,如果我删除循环,并将其替换为:
<b:if cond='data:posts any (p => p.title != "bob")'>
<h1>Post found</h1>
</b:if>>
只有一个 post 被发现,而我有几个 post none 其中标题为 bob!我已经尝试将 lambda 运算符从 any 切换到 filter 而不做任何更改。
我的问题的解决方法
愚蠢的我,如果我希望能够使用一个循环,我需要指定一个循环:
<b:loop values='data:posts filter (p => p.id != 0)' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
如何使用 Blogger Lambda 运算符
对于那些来这里寻求帮助的人,我推荐以下文章,它非常全面地解释了如何使用 Lambda 表达式:http://www.bloggerever.com/2016/05/what-are-exactly-bloggers-lambda.html and is based on https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY。
本质上有 7 个 Lambda 运算符
- 任何
- 全部
- none
- 计数
- 过滤器
- 地图
- 第一
每个都可以在 if 或循环条件语句中使用。下面是一些未经测试的示例代码,可帮助您入门。
如果 Lambda 中的任何项目 return 为真,则 any 运算符 return 为真,例如,以下代码将 return 如果 post 有与之关联的标签 labela 或 labelb,则为真:
<b:if cond='data:post.labels any
(l => l.name in {"labela","labelb"})'>
...Code here...
</b:if>
all 如果同时关联了 labela 和 labelb,则 return 为真:
<b:if cond='data:post.labels all
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
none 如果没有与之关联的 labela 和 labelb,则 return 为真:
<b:if cond='data:post.labels all
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
count 会 return 0、1 或 2,具体取决于 post 既没有与之关联的 labela 或 labelb,还是只有 labela 或两者都有labela 和 labelb
<b:if cond='data:post.labels count
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
filter 将 return 一个数组并需要一个循环。下面的示例将打印出每个 post 的标题,除非它的 id 为 0(我不可能!)
<b:loop values='data:posts filter (p => p.id != 0)' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
first 类似于过滤器,但 return 仅匹配第一个。
<b:loop values='data:posts first(p => p.timestamp == "4.2.09")' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
map returns 包含 Lambda 的每个结果的数组集。下面的代码将在带有 >> 前缀的 h1 标签中显示标签。
<b:loop values='data:post.labels map (l=> ">>" + l.name)' var='label'>
<h1><data:label/></h1>
</b:loop>
最后一点: 链接到的文章建议 Lambda 只能应用于 post、标签和注释元素。它当然适用于前两个,但我还没有尝试过评论。
Google Blogger 为其模板语言实现了一组新的 Lambda 表达式运算符。参见:https://blogger.googleblog.com/2016/05/more-custom-template-flexibility.html and https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY .
给出的示例代码(经b:if/修改)为:
<!-- Show a Flower image if the post has the label flower -->
<b:if cond='data:post.labels any (l => l.name == "Flower")'>
<img src=’/img/flower.jpg’ />
</b:if>
我不知道如何让它在模板中工作。请有人提供一些工作代码,我可以将其放入模板并查看它的工作情况。
更新: 这似乎有效。但是如何或者我可以删除循环?
<b:section class='Test1' id='Test1' maxwidgets='' showaddelement='no'>
<b:widget id='Blog2' locked='true' title='Blog Posts' type='Blog' version='1' visible='true'>
<b:includable id='main'>
<b:loop values='data:posts' var='post'>
<h1>Post found</h1>
<b:if cond='data:post.labels any (label => label.name == "flower")'>
<h1>Flower!</h1>
</b:if>
</b:loop>
</b:includable>
</b:widget>
</b:section>
例如,如果我删除循环,并将其替换为:
<b:if cond='data:posts any (p => p.title != "bob")'>
<h1>Post found</h1>
</b:if>>
只有一个 post 被发现,而我有几个 post none 其中标题为 bob!我已经尝试将 lambda 运算符从 any 切换到 filter 而不做任何更改。
我的问题的解决方法
愚蠢的我,如果我希望能够使用一个循环,我需要指定一个循环:
<b:loop values='data:posts filter (p => p.id != 0)' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
如何使用 Blogger Lambda 运算符
对于那些来这里寻求帮助的人,我推荐以下文章,它非常全面地解释了如何使用 Lambda 表达式:http://www.bloggerever.com/2016/05/what-are-exactly-bloggers-lambda.html and is based on https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY。
本质上有 7 个 Lambda 运算符
- 任何
- 全部
- none
- 计数
- 过滤器
- 地图
- 第一
每个都可以在 if 或循环条件语句中使用。下面是一些未经测试的示例代码,可帮助您入门。
如果 Lambda 中的任何项目 return 为真,则 any 运算符 return 为真,例如,以下代码将 return 如果 post 有与之关联的标签 labela 或 labelb,则为真:
<b:if cond='data:post.labels any
(l => l.name in {"labela","labelb"})'>
...Code here...
</b:if>
all 如果同时关联了 labela 和 labelb,则 return 为真:
<b:if cond='data:post.labels all
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
none 如果没有与之关联的 labela 和 labelb,则 return 为真:
<b:if cond='data:post.labels all
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
count 会 return 0、1 或 2,具体取决于 post 既没有与之关联的 labela 或 labelb,还是只有 labela 或两者都有labela 和 labelb
<b:if cond='data:post.labels count
(l => l.name not in {"labela","labelb"})'>
...Code here...
</b:if>
filter 将 return 一个数组并需要一个循环。下面的示例将打印出每个 post 的标题,除非它的 id 为 0(我不可能!)
<b:loop values='data:posts filter (p => p.id != 0)' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
first 类似于过滤器,但 return 仅匹配第一个。
<b:loop values='data:posts first(p => p.timestamp == "4.2.09")' var='post'>
<h1>Post found: <data:post.title/></h1>
</b:loop>
map returns 包含 Lambda 的每个结果的数组集。下面的代码将在带有 >> 前缀的 h1 标签中显示标签。
<b:loop values='data:post.labels map (l=> ">>" + l.name)' var='label'>
<h1><data:label/></h1>
</b:loop>
最后一点: 链接到的文章建议 Lambda 只能应用于 post、标签和注释元素。它当然适用于前两个,但我还没有尝试过评论。