I’m trying to use intersect to make a list of related content. With a fresh hugo build and looking at the (dev) documentation for it (see https://github.com/spf13/hugo/pull/537 ).
I have the following code in a single.html
<ul>
{{ $page_link := .Permalink }}
{{ $oggetti := .Params.oggetti }}
{{ range .Site.Recent }}
{{ $page := . }}
{{ $has_common_tags := intersect $oggetti .Params.oggetti | len | lt 0 }}
{{ if and $has_common_tags (ne $page_link $page.Permalink) }}
<li><a href="{{ $page.Permalink }}">{{ $page.Title }}</a></li>
{{ end }}
{{ end }}
</ul>
Where oggetti is the name of the taxonomy I’m using and all content has at least one term listed in front matter.
But I just get an error for each page of content, example:
ERROR: 2014/11/06 Error while rendering page foto/foto/Collana2.md: template: foto/single.html:26:43: executing "foto/single.html" at <intersect $oggetti ....>: error calling intersect: can't iterate over string
It was indeed a taxonomy. But I double checked the documentation for syntax of taxonomies and terms, it turns out the problem was the way I’d specified terms in the content front matter. I’d only added square brackets around terms when there was more than one, not for single terms. Which I presume is why they were seen as a string instead of an array.
So my front matter had
oggetti = "fiori"
which I changed to
oggetti = [ "fiori" ]
And the errors were gone. Thanks for the prompt to check the taxonomy!
I know with some other things we’ve actually written code to accept either a single string value or an array of string values and internally convert it into a slice of strings. We should look into doing this for taxonomies as well.
I read codes. Taxonomies itself is built in assembleTaxonomies function in hugolib/site.go. It assembles both a single string definition and a string slice definition into a taxonomy slice. The other hand, the front matter value is saved as a single string Param value in update function in hugolib/page.go. So in this case, to use it with intersect, the front matter value should be bracketed off.