shithub: hugo

Download patch

ref: 93addfcbeec301e4f37b0f83bc5735f1939f1895
parent: 0ce4ec1edb6116cd2803ef1120b5943da1fc29c5
author: spf13 <[email protected]>
date: Fri Aug 29 20:57:38 EDT 2014

Adding documentation about 'where' and cleaning up docs around first.

--- a/docs/content/templates/content.md
+++ b/docs/content/templates/content.md
@@ -2,7 +2,7 @@
 aliases:
 - /layout/functions/
 date: 2013-07-01
-linktitle: Single
+linktitle: Single Content
 menu:
   main:
     parent: layout
--- a/docs/content/templates/functions.md
+++ b/docs/content/templates/functions.md
@@ -38,9 +38,30 @@
 ### first
 Slices an array to only the first X elements.
 
+Works on [lists](/templates/list/), [taxonomies](/taxonomies/displaying/), [terms](/templates/terms/), [groups](/templates/list/)
+
 eg.
     {{ range first 10 .Data.Pages }}
         {{ .Render "summary"}}
+    {{ end }}
+
+### where
+Filters an array to only elements containing a matching value for a given field.
+
+Works on [lists](/templates/list/), [taxonomies](/taxonomies/displaying/), [terms](/templates/terms/), [groups](/templates/list/)
+
+eg.
+
+    {{ range where .Data.Pages "Section" "post" }}
+       {{ .Content}}
+    {{ end }}
+
+*where and first can be stacked*
+
+eg.
+
+    {{ range first 5 (where .Data.Pages "Section" "post") }}
+       {{ .Content}}
     {{ end }}
 
 
--- a/docs/content/templates/list.md
+++ b/docs/content/templates/list.md
@@ -2,7 +2,7 @@
 aliases:
 - /layout/indexes/
 date: 2013-07-01
-linktitle: List
+linktitle: List of Content
 menu:
   main:
     parent: layout
@@ -296,3 +296,43 @@
         {{ end }}
     </ul>
     {{ end }}
+
+## Filtering & Limiting Content
+
+Sometimes you only want to list a subset of the available content. A common
+request is to only display “Posts” on the homepage. Using the `where` function
+you can do just that.
+
+### First 
+
+`first` works like the limit keyword in SQL. It reduces the array to only the
+first X elements. It takes the array and number of elements as input.
+
+    {{ range first 10 .Data.Pages }}
+        {{ .Render "summary"}}
+    {{ end }}
+
+### Where
+
+`where` works in a similar manner to the where keyword in SQL. It selects all
+elements of the slice that match the provided field and value. It takes three
+arguments 'array or slice of maps or structs', 'key or field name' and 'match
+value'
+
+    {{ range where .Data.Pages "Section" "post" }}
+       {{ .Content}}
+    {{ end }}
+
+### First & Where Together
+
+Using both together can be very powerful.
+
+    {{ range first 5 (where .Data.Pages "Section" "post") }}
+       {{ .Content}}
+    {{ end }}
+
+If `where` or `first` receives invalid input or a field name that doesn’t exist they will provide an error and stop site generation.
+
+These are both template functions and work on not only
+[lists](/templates/list/), but [taxonomies](/taxonomies/displaying/),
+[terms](/templates/terms/) and [groups](/templates/list/).