32356e4eFix typo in header of shortcode-templates.mdc8f1a2d2Correct code example for index template functionbfa6a55dEscape code fencingff8b2f99Fix typos in deployment with wercker tutorial557c36e8theme: Merge commit '7fbb4bed25001182bfeb91f79db0f0c1936582ee'7fbb4bedSquashed 'themes/gohugoioTheme/' changes from 7dd8a302..ca53082dce31cee0Add "See Also" config158cee1bMake the tags into keywords61600be6Add a note to the related section49edb5a2Relase 0.27.1c9bbc001releaser: Add release notes to /docs for release of 0.27.1213c6c3bAdd bugs poster8b4590cdAdd KeyCDN integration tutorial2b277859Add tutorial videos to several docs pages950fef1fUpdate roadmap to link to the correct milestones page496f5bf6Rename relnotesd6f9378dBump Netlify versions to 0.27087fde7fUpdate 0.27 release notes603f94aedocs: Document Related Content3790f6a3releaser: Bump versions for release of 0.270948868creleaser: Add release notes to /docs for release of 0.27 git-subtree-dir: docs git-subtree-split:32356e4eab
2.7 KiB
title, description, godocref, date, publishdate, lastmod, keywords, categories, menu, toc, signature, workson, hugoversion, relatedfuncs, deprecated, draft, aliases
| title | description | godocref | date | publishdate | lastmod | keywords | categories | menu | toc | signature | workson | hugoversion | relatedfuncs | deprecated | draft | aliases | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| .Scratch | Acts as a "scratchpad" to allow for writable page- or shortcode-scoped variables. | 2017-02-01 | 2017-02-01 | 2017-02-01 |
|
|
|
false | false |
|
In most cases you can do well without Scratch, but there are some use cases that aren't solvable with Go's templates without Scratch's help, due to scoping issues.
{{% note %}} See this Go issue for the main motivation behind Scratch. {{% /note %}}
Scratch is added to both Page and Shortcode -- with following methods:
SetandAddtakes akeyand thevalueto add.Getreturns thevaluefor thekeygiven.SetInMaptakes akey,mapKeyandvalueGetSortedMapValuesreturns array of values fromkeysorted bymapKey
Set and SetInMap can store values of any type.
For single values, Add accepts values that support Go's + operator. If the first Add for a key is an array or slice, the following adds will be appended to that list.
The scope of the backing data is global for the given Page or Shortcode, and spans partial and shortcode includes.
Note that .Scratch from a shortcode will return the shortcode's Scratch, which in most cases is what you want. If you want to store it in the page scroped Scratch, then use .Page.Scratch.
Sample usage
The usage is best illustrated with some samples:
{{ $.Scratch.Add "a1" 12 }}
{{ $.Scratch.Get "a1" }} {{/* => 12 */}}
{{ $.Scratch.Add "a1" 1 }}
{{ $.Scratch.Get "a1" }} // {{/* => 13 */}}
{{ $.Scratch.Add "a2" "AB" }}
{{ $.Scratch.Get "a2" }} {{/* => AB */}}
{{ $.Scratch.Add "a2" "CD" }}
{{ $.Scratch.Get "a2" }} {{/* => ABCD */}}
{{ $.Scratch.Add "l1" (slice "A" "B") }}
{{ $.Scratch.Get "l1" }} {{/* => [A B] */}}
{{ $.Scratch.Add "l1" (slice "C" "D") }}
{{ $.Scratch.Get "l1" }} {{/* => [A B C D] */}}
{{ $.Scratch.Set "v1" 123 }}
{{ $.Scratch.Get "v1" }} {{/* => 123 */}}
{{ $.Scratch.SetInMap "a3" "b" "XX" }}
{{ $.Scratch.SetInMap "a3" "a" "AA" }}
{{ $.Scratch.SetInMap "a3" "c" "CC" }}
{{ $.Scratch.SetInMap "a3" "b" "BB" }}
{{ $.Scratch.GetSortedMapValues "a3" }} {{/* => []interface {}{"AA", "BB", "CC"} */}}
{{% note %}}
The examples above uses the special $ variable, which refers to the top-level node. This is the behavior you most likely want, and will help remove some confusion when using Scratch inside page range loops -- and you start inadvertently calling the wrong Scratch. But there may be use cases for {{ .Scratch.Add "key" "some value" }}.
{{% /note %}}