如何仅使用某些参数显示特定类别的1个帖子" true"

时间:2018-02-08 06:36:18

标签: hugo

这个想法是如果只显示某个类别中的1个最新帖子,如果它具有params特征" true"

{{ range (where .Data.Pages "Type" "blog") 1 }}  
{{ if and (in .Params.categories "photography") (in .Params.featured "true") }}

上面的代码正在运行,但它会呈现所有类别 foo (超过1个帖子)的帖子

    {{ $photography := .Data.Pages.ByParam "categories"  }}
    {{ if and (in .Params.featured "true") (eq .Params.categories "photography") }}
       {{ range first 1 $photography }} 

上面的代码没有错误,但它根本没有呈现

任何线索?

1 个答案:

答案 0 :(得分:1)

有一种方法可以根据categories的定义来解决这个问题。

解决方案(类别作为分类法)

在这种情况下,我们会说它是一个分类法,因为categories是默认分类法,如果你没有在你的站点配置中指定任何分类法。

我们要做的第一件事是获取一个类别为photography的页面集合

 {{ $photography := .Site.Taxonomies.categories.photography  }}

然后,我们必须找到一种方法,通过使用true函数和GroupByParam

分组来获取已展示featured的网页
{{ range ($photography.Pages.GroupByParam "featured") }}

{{ end }}

此范围内的群组将返回.Key的{​​{1}}值,因此我们会检查每个值.Params.featured。找到特色组后,按照您喜欢的顺序排序并返回您想要的那个(1)。

true

完整代码示例(类别作为分类)

{{ if eq .Key true }}
  {{ range last 1 .Pages.ByDate }}
    // The `.` context here is a page. Use it accordingly
  {{ end }}
{{ end }}

注意:

  • 该解决方案使用{{ $photography := .Site.Taxonomies.categories.photography }} {{ range ($photography.Pages.GroupByParam "featured") }} {{ if eq .Key true }} {{ range last 1 .Pages.ByDate }} // The `.` context here is a page. Use it accordingly {{ end }} {{ end }} {{ end }} 按顺序排序,但can use any valid page collection sorting使用ByDatefirst相应地获取您需要的页面。
  • 确保分组参数(last)中的值是相同的类型(在本例中为布尔值)。如果它们是混合的,它们将无法正常工作。如果你将它们设为字符串,它们将起作用,但需要检查字符串featured
  • 如果您想使用分类法,但没有为其构建网页,则可以在配置文件中"true"per Hugo docs