You must first define the paths to any data files you wish to use via the options.data
object in the assemble
task or target, then Assemble will automatically supply data to your templates:
assemble: {
options: {
data: 'src/data/*.json'
},
files: {
'site/': ['src/pages/*.hbs' ]
}
}
When using "external" data files (versus YAML front matter), if name of the data file is the same as the associated template then Assemble will automatically associate the two files.
"widget component" example
Given a data file, such as widget.json
or widget.yml
:
{
"name ": "This is a square widget" ,
"modifier ": "widget-square"
}
With the following Handlebars expressions in out template, widget.hbs
:
<div class="widget {{ widget.modifier }}">{{ widget.name }}</div>
The result after running grunt assemble
will be:
<div class="widget widget-square">This is a square widget</div>
package.json example #1
Add package.json
to the data
object:
assemble {
myProject: {
options: {
data: 'package.json'
},
files: {
'dest': ['src/templates/**/*.hbs' ]
}
}
}
And we will now be able to retrieve metadata from package.json
by using variables such as:
{{package.verson}}
{{package.name}}
{{package.description}}
{{package.author.url}}
{{package.author.name}}
package.json example #2
Assuming we add the following code to our Gruntfile
pkg: grunt.file.readJSON('package.json' ),
assemble {
myProject: {
options: {
pkg: '<%= pkg %>',
data: 'other/data/*.json'
},
files: {
'dest': ['src/templates/**/*.hbs' ]
}
}
}
We can now use the following variables in our templates:
{{pkg.verson}}
{{pkg.name}}
{{pkg.description}}
{{pkg.author.url}}
{{pkg.author.name}}
Also see: YAML front matter
See the template for this page →
Find an error? Let us know →