cb18a5183Fix broken link07a0198bfConfig: Place Google Analytics tag ID under the services key4bf0c719fFix typo50d8ad1afFix muiltilingual menu definition instructions1a32519a9Fix typos6f34ca8e0Explain usage of front matter to target a template5bd977257Improve goldmark config docs447632938Remove Docker notes from installation instructions84741d173Update reference to hugo.work0338d7c71Fix menu templatef5d2f5ed4Fix typos in content/en/functions/fmta3a40ff99Add return type to functions85ac3e779Remove outdated feature imaged47d889e4Fix signatures7551ba28fDocument safe.JSStr functione77993be0Document keyVals function4dba20db3Update themebabf91544Update echoparam8c8203efaAdjust related functions4cb1b30fcFix exampleba95eca64Improve showcase prose5d3dcf366Add Overmind Studios showcase8d634ac70Change code blocks from indented to fencedcfab978e6Add missing code fences407dd5c47Limit related pages for functions to other functions9fa67d981Fix .Site.LastChange doc393aa16d0netlify: Hugo 0.119.0f864af97adocs: Even more about images.Process9d772d5f0docs: More about images.Processbc655f869docs: Regen docshelper41c3536d1Merge commit '9aec42c5452b3eb224888c50ba1c3f3b68a447e9'918ed53f4Add images.Process filter573645883Add $image.Processa1151b0fdAdd images.Opacity filter git-subtree-dir: docs git-subtree-split:cb18a5183f
4.3 KiB
title, description, categories, keywords, menu, function, relatedFunctions, aliases
| title | description | categories | keywords | menu | function | relatedFunctions | aliases | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| .Scratch | Acts as a "scratchpad" to store and manipulate data. |
|
|
|
|
|
Scratch is a Hugo feature designed to conveniently manipulate data in a Go Template world. It is either a Page or Shortcode method for which the resulting data will be attached to the given context, or it can live as a unique instance stored in a variable.
{{% note %}}
Note that Scratch was initially created as a workaround for a Go template scoping limitation that affected Hugo versions prior to 0.48. For a detailed analysis of .Scratch and contextual use cases, see this blog post.
{{% /note %}}
Contexted .Scratch vs. local newScratch
Since Hugo 0.43, there are two different ways of using Scratch:
The Page's .Scratch
.Scratch is available as a Page method or a Shortcode method and attaches the "scratched" data to the given page. Either a Page or a Shortcode context is required to use .Scratch.
{{ .Scratch.Set "greeting" "bonjour" }}
{{ range .Pages }}
{{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
{{ end }}
The local newScratch
A Scratch instance can also be assigned to any variable using the newScratch function. In this case, no Page or Shortcode context is required and the scope of the scratch is only local. The methods detailed below are available from the variable the Scratch instance was assigned to.
{{ $data := newScratch }}
{{ $data.Set "greeting" "hola" }}
Methods
A Scratch has the following methods:
{{% note %}}
Note that the following examples assume a local Scratch instance has been stored in $scratch.
{{% /note %}}
.Set
Set the value of a given key.
{{ $scratch.Set "greeting" "Hello" }}
.Get
Get the value of a given key.
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Get "greeting" }} > Hello
.Add
Add a given value to existing value(s) of the given key.
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.
{{ $scratch.Add "greetings" "Hello" }}
{{ $scratch.Add "greetings" "Welcome" }}
----
{{ $scratch.Get "greetings" }} > HelloWelcome
{{ $scratch.Add "total" 3 }}
{{ $scratch.Add "total" 7 }}
----
{{ $scratch.Get "total" }} > 10
{{ $scratch.Add "greetings" (slice "Hello") }}
{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
----
{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}
.SetInMap
Takes a key, mapKey and value and adds a map of mapKey and value to the given key.
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello]
.DeleteInMap
Takes a key and mapKey and removes the map of mapKey from the given key.
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ .Scratch.DeleteInMap "greetings" "english" }}
----
{{ .Scratch.Get "greetings" }} > map[french:Bonjour]
.GetSortedMapValues
Return an array of values from key sorted by mapKey.
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
.Delete
Remove the given key.
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Delete "greeting" }}
.Values
Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via newScratch, not .Page.Scratch etc., as that will lead to concurrency issues.