back to pages folder structure
In case you want to use the same template, but use different data for it, you can use page data model. The scenario here is to have different data (in terms of values) with the same structure on different pages. The name of page data model should start with model followed by .. After that you should add at least one character that will represent the name of your data model. The value of model should always point to valid data object.
All data models can be accessible through global Page object. That object is accessible from each and every template and it always has a context of current page.
You can access page data models via properties of Page.Model object. It will have all the properties defined in page metadata section.
If your template file looks like this:
<img src="{{ Page.Model.banner.url }}"/>
{{ Page.Content }}
<table>
<tr>
<th>Title</th>
<th>Price</th>
</tr>
{{# Page.Model.goods }}
<tr>
<td>{{ title }}</td>
<td>{{ price }}</td>
</tr>
{{/ Page.Model.goods }}
</table>
And your page file looks like this:
url: goods1.html
template: goods.hjs
title: Home
model.goods: Data.category1.goods
model.banner.url: Data.banners.banner1.url
---
# Category 1
And your data structure looks like this:
Data
category1.yml
category2.yml
banners.yml
category1.yml
goods:
-
title: apple
price: 10
-
title: pear
price: 12
category2.yml
goods:
-
title: potato
price: 6
-
title: tomato
price: 15
banners.yml
banner1:
url: "http://mywebsite.com/banner1.png"
banner2:
url: "http://other.com/something.png"
Finally, the html rendered by Solidify Engine will look like this:
<img src="http://mywebsite.com/banner1.png"/>
<h1>Category 1</h1>
<table>
<tr>
<th>Title</th>
<th>Price</th>
</tr>
<tr>
<td>apple</td>
<td>10</td>
</tr>
<tr>
<td>pear</td>
<td>12</td>
</tr>
</table>
There is one important point to highlight here. Page.Model is predifened and case-sensitive, but goods was generated dynamicaly from page metadata and it's also case-sensitive.
The main difference between custom attributes and data model is how they interprete the values you provide.
Data model. It will copy all values from referenced Data object to current Model object.Solidify Project is powered by .NET Core 2.0 and distributed under MIT license