diff --git a/exampleSite/content/home/posts.md b/exampleSite/content/home/posts.md index 4f9fb79d..e4d85897 100644 --- a/exampleSite/content/home/posts.md +++ b/exampleSite/content/home/posts.md @@ -1,23 +1,15 @@ +++ # 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. @@ -25,5 +17,10 @@ count = 5 # 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 = "" +++ diff --git a/layouts/partials/widgets/posts.html b/layouts/partials/widgets/posts.html index 39a24ef1..69a9807c 100644 --- a/layouts/partials/widgets/posts.html +++ b/layouts/partials/widgets/posts.html @@ -1,6 +1,19 @@ {{ $ := .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) }}
{{ . | markdownify }}
{{ end }} - {{ if gt $posts_len $page.Params.count }} + {{ if gt $count $page.Params.count }}- + {{ i18n "more_posts" | markdownify }} @@ -22,74 +35,15 @@ {{ with $page.Content }}
{{ . | markdownify }}
{{ 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}}