From 999ba8d47e45810bec6162543eab10cea1b99e93 Mon Sep 17 00:00:00 2001 From: Ryan Watters Date: Tue, 18 Apr 2017 19:30:25 -0500 Subject: [PATCH 1/4] Add len to functions list with examples Closes rdwatters/hugo-docs-concept#92 --- content/functions/delimit.md | 3 +- content/functions/len.md | 65 ++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 content/functions/len.md diff --git a/content/functions/delimit.md b/content/functions/delimit.md index 3c5ffc898..9e1a6b96c 100644 --- a/content/functions/delimit.md +++ b/content/functions/delimit.md @@ -1,9 +1,8 @@ --- title: delimit linktitle: delimit -description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter." +description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter. godocref: -qref: loops through array, slice, or map and returns string of all values separated by a delimiter. workson: [] date: 2017-02-01 publishdate: 2017-02-01 diff --git a/content/functions/len.md b/content/functions/len.md new file mode 100644 index 000000000..78e888355 --- /dev/null +++ b/content/functions/len.md @@ -0,0 +1,65 @@ +--- +title: len +linktitle: len +description: Returns the length of a variable according to its type. +godocref: https://golang.org/pkg/builtin/#len +date: 2017-02-01 +publishdate: 2017-02-01 +lastmod: 2017-04-18 +categories: [functions] +tags: [] +ns: +signature: ["len VARIABLE"] +workson: [lists,taxonomies,terms] +hugoversion: +relatedfuncs: [] +deprecated: false +toc: false +aliases: [] +--- + +`len` is a built-in function in Golang that returns the length of a variable according to its type. From the Golang documentation: + +> Array: the number of elements in v. +> +> Pointer to array: the number of elements in *v (even if v is nil). +> +> Slice, or map: the number of elements in v; if v is nil, len(v) is zero. +> +> String: the number of bytes in v. +> +> Channel: the number of elements queued (unread) in the channel buffer; if v is nil, len(v) is zero. + +`len` is also considered a [fundamental function for Hugo templating][]. + +## `len` Example 1: Longer Headings + +You may want to append a class to a heading according to the length of the string therein. The following templating checks to see if the title's length is greater than 80 characters and, if so, adds a `long-title` class to the `

`: + +{{% code file="check-title-length.html" %}} +```html +
+ {{.Title}}

+ +``` +{{% /code %}} + +## `len` Example 2: Counting Pages with `where` + +The following templating uses [`where`][] in conjunction with `len` to figure out the total number of content pages in a `posts` [section][]: + +{{% code file="how-many-posts.html" %}} +```html +{{ $posts := (where .Site.RegularPages "Section" "==" "post") }} +{{ $postCount := len $posts }} +``` +{{% /code %}} + +Note the use of `.RegularPages`, a [site variable][] that counts all regular content pages but not the `_index.md` pages used to add front matter and content to [list templates][]. + + +[fundamental function for Hugo templating]: /templates/introduction/ +[list templates]: /templates/lists/ +[section]: /content-management/sections/ +[site variable]: /variables/site/ +[`where`]: /functions/where/ \ No newline at end of file From c67f09b209146c47e576287767f425742e310673 Mon Sep 17 00:00:00 2001 From: Ryan Watters Date: Tue, 18 Apr 2017 19:32:35 -0500 Subject: [PATCH 2/4] Update signature for len function --- content/functions/len.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/functions/len.md b/content/functions/len.md index 78e888355..714dc7b02 100644 --- a/content/functions/len.md +++ b/content/functions/len.md @@ -9,7 +9,7 @@ lastmod: 2017-04-18 categories: [functions] tags: [] ns: -signature: ["len VARIABLE"] +signature: ["len INPUT"] workson: [lists,taxonomies,terms] hugoversion: relatedfuncs: [] From 4a2148e2761a32da1a84c6050096f27000efecc6 Mon Sep 17 00:00:00 2001 From: Ryan Watters Date: Tue, 18 Apr 2017 19:43:34 -0500 Subject: [PATCH 3/4] Clean up list ordering and grouping; add ref to Format func --- content/templates/lists.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/content/templates/lists.md b/content/templates/lists.md index a83f0a1bc..af94a29c2 100644 --- a/content/templates/lists.md +++ b/content/templates/lists.md @@ -398,7 +398,7 @@ Hugo provides some functions for grouping pages by Section, Type, Date, etc. ``` {{% /code %}} -### By Page date +### By Date {{% code file="layouts/partials/by-page-date.html" %}} ```html @@ -416,7 +416,7 @@ Hugo provides some functions for grouping pages by Section, Type, Date, etc. ``` {{% /code %}} -### By Page publish date +### By Publish Date {{% code file="layouts/partials/by-page-publish-date.html" %}} ```html @@ -434,7 +434,7 @@ Hugo provides some functions for grouping pages by Section, Type, Date, etc. ``` {{% /code %}} -### By Page Param +### By Page Parameter {{% code file="layouts/partials/by-page-param.html" %}} ```html @@ -452,7 +452,9 @@ Hugo provides some functions for grouping pages by Section, Type, Date, etc. ``` {{% /code %}} -### By Page Param in Date Format +### By Page Parameter in Date Format + +The following template takes grouping by `date` a step further and uses Golang's layout string. See the [`Format` function][] for more examples of how to format dates in Hugo. {{% code file="layouts/partials/by-page-param-as-date.html" %}} ```html @@ -570,6 +572,7 @@ Using `first` and `where` together can be very powerful: [bepsays]: http://bepsays.com/en/2016/12/19/hugo-018/ [directorystructure]: /getting-started/directory-structure/ +[`Format` function]: /functions/format/ [homepage]: /templates/homepage/ [homepage]: /templates/homepage/ [limitkeyword]: https://www.techonthenet.com/sql/select_limit.php From e97837f6560e824b84601b6bfa02ccef1ddf036b Mon Sep 17 00:00:00 2001 From: Ryan Watters Date: Tue, 18 Apr 2017 19:46:18 -0500 Subject: [PATCH 4/4] Fix typo in Format function --- content/functions/format.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/functions/format.md b/content/functions/format.md index b1de89f97..0cffd44cf 100644 --- a/content/functions/format.md +++ b/content/functions/format.md @@ -18,7 +18,7 @@ aliases: [] toc: true --- -`Format` will format date values defined in your front matter. `.Format` and can be used as a property on the following [page variables][pagevars]: +`Format` will format date values defined in your front matter and can be used as a property on the following [page variables][pagevars]: * `.PublishDate` * `.Date` @@ -30,7 +30,7 @@ Assuming a key-value of `date: 2017-03-03` in a content file's front matter, you {{ .PublishDate.Format "January 2, 2006" }} => March 3, 2017 ``` -For formatting *any* string representations of dates defined in your front matter, see the [`dateFormat` function][dateFormat]. +For formatting *any* string representations of dates defined in your front matter, see the [`dateFormat` function][dateFormat], which will still leverage the Golang layout string explained below but uses a slightly different syntax. ## Go's Layout String