Permalink
Browse files

feat(widget): restrict post filter to only one tag or category

Close #815

BREAKING CHANGES

Remove `tags_include` and `tags_exclude` from `home/posts.md`
Add `filter_tag` and `filter_category` to `home/posts.md`
  • Loading branch information...
gcushen committed Dec 16, 2018
1 parent 5c0c7f5 commit fbcb7f27618e7cc2c3e9a984fed6bde96f44c01e
Showing with 33 additions and 82 deletions.
  1. +9 −12 exampleSite/content/home/posts.md
  2. +24 −70 layouts/partials/widgets/posts.html
@@ -1,29 +1,26 @@
+++
# Recent Posts widget.
# This widget displays recent posts from `content/post/`.
widget = "posts"
active = true
widget = "posts" # Do not modify this line!
active = true # Activate this widget? true/false
weight = 40 # Order that this section will appear.
date = 2016-04-20T00:00:00

title = "Recent Posts"
subtitle = ""

# Order that this section will appear in.
weight = 40

# Filter posts by tag.
# By default, show all recent posts.
# Filtering example: `tags_include = ["hugo", "academic"]`
tags_include = []
tags_exclude = []

# Number of posts to list.
# Number of recent posts to list.
count = 5

# List format.
# 0 = Simple
# 1 = Detailed
# 2 = Stream
list_format = 2

# Filter posts by tag or category.
# E.g. to only show posts tagged with `Academic`, set `filter_tag = "Academic"`
filter_tag = ""
filter_category = ""
+++

@@ -1,16 +1,29 @@
{{ $ := .root }}
{{ $page := .page }}
{{ $posts_len := len (where (where $.Site.RegularPages "Type" "post") ".Params.notonhomepage" nil) }}

{{ $query := where (where $.Site.RegularPages "Type" "post") ".Params.notonhomepage" nil }}
{{ $archive_page := $.Site.GetPage "section" "post" }}

{{/* Check if a filter should be applied. */}}
{{ if $page.Params.filter_tag }}
{{ $archive_page = $.Site.GetPage (printf "tags/%s" $page.Params.filter_tag) }}
{{ $query = $query | intersect $archive_page.Pages }}
{{ else if $page.Params.filter_category }}
{{ $archive_page = $.Site.GetPage (printf "categories/%s" $page.Params.filter_category) }}
{{ $query = $query | intersect $archive_page.Pages }}
{{ end }}

{{ $count := len ($query) }}

<!-- Blog Posts widget -->
<div class="row">
<div class="col-12 col-lg-4 section-heading">

<h1>{{ with $page.Title }}{{ . | markdownify }}{{ end }}</h1>
{{ with $page.Params.subtitle }}<p>{{ . | markdownify }}</p>{{ end }}
{{ if gt $posts_len $page.Params.count }}
{{ if gt $count $page.Params.count }}
<p class="view-all">
<a href="{{ ($.Site.GetPage "section" "post").RelPermalink }}">
<a href="{{ $archive_page.RelPermalink }}">
{{ i18n "more_posts" | markdownify }}
<i class="fas fa-angle-double-right"></i>
</a>
@@ -22,74 +35,15 @@ <h1>{{ with $page.Title }}{{ . | markdownify }}{{ end }}</h1>

{{ with $page.Content }}<p>{{ . | markdownify }}</p>{{ end }}

{{ if gt (len $page.Params.tags_include) 0 }}
{{ $posts := where (where (where $.Site.RegularPages "Type" "post") ".Params.tags" "intersect" $page.Params.tags_include) ".Params.notonhomepage" nil }}

{{ $.Scratch.Add "show_post" "1" }}
{{ range $post := first $page.Params.count $posts }}

{{ $.Scratch.Set "show_post" "1" }}

{{/* If `tags_include` is set, exclude posts with no tags. */}}
{{ with (not .Params.tags) }}
{{ with $page.Params.tags_include }}
{{ $.Scratch.Set "show_post" "0" }}
{{end}}
{{end}}
{{/* If `tags_exclude` is set, exclude posts. */}}
{{ range $key, $val := .Params.tags }}
{{ if in $page.Params.tags_exclude $val }}
{{ $.Scratch.Set "show_post" "0" }}
{{end}}
{{end}}

{{ $show_post := $.Scratch.Get "show_post" }}
{{ if ne $show_post "0" }}
{{ if eq $page.Params.list_format 0 }}
{{ partial "post_li_simple" . }}
{{ else if eq $page.Params.list_format 1 }}
{{ partial "post_li_detailed" . }}
{{ else }}
{{ partial "post_li_stream" . }}
{{ end }}
{{end}}

{{ range $post := first $page.Params.count $query }}
{{ if eq $page.Params.list_format 0 }}
{{ partial "post_li_simple" . }}
{{ else if eq $page.Params.list_format 1 }}
{{ partial "post_li_detailed" . }}
{{ else }}
{{ partial "post_li_stream" . }}
{{ end }}
{{ else}}
{{ $posts := where (where $.Site.RegularPages "Type" "post") ".Params.notonhomepage" nil }}

{{ $.Scratch.Add "show_post" "1" }}
{{ range $post := first $page.Params.count $posts }}

{{ $.Scratch.Set "show_post" "1" }}

{{/* If `tags_include` is set, exclude posts with no tags. */}}
{{ with (not .Params.tags) }}
{{ with $page.Params.tags_include }}
{{ $.Scratch.Set "show_post" "0" }}
{{end}}
{{end}}

{{/* If `tags_exclude` is set, exclude posts. */}}
{{ range $key, $val := .Params.tags }}
{{ if in $page.Params.tags_exclude $val }}
{{ $.Scratch.Set "show_post" "0" }}
{{end}}
{{end}}

{{ $show_post := $.Scratch.Get "show_post" }}
{{ if ne $show_post "0" }}
{{ if eq $page.Params.list_format 0 }}
{{ partial "post_li_simple" . }}
{{ else if eq $page.Params.list_format 1 }}
{{ partial "post_li_detailed" . }}
{{ else }}
{{ partial "post_li_stream" . }}
{{ end }}
{{end}}

{{ end }}
{{ end }}
{{end}}

</div>
</div>

0 comments on commit fbcb7f2

Please sign in to comment.