A few root objects are available within any of the supported template types.
content
The content
object is primarily used from within layouts, as it holds
the content from the previously rendered page or content.
site
The site
object is the top-level object available within the template.
Various extensions may add additional properties to this
object. By default, it has the following:
site.base_url
Default this is set to http://localhost:4242
. Through the _config/site.yml
file, you may override this value to the URL of your product site, for instance.
Normally this is not required, except when creating fully-qualified URLs, which is
rare.
site.pages
From the site
object, you have access to the array of registered pages. All
struct-based meta-data for each page is directly accessible (and alterable)
from it. See the section on page
below for more details.
site.pages.each do |page|
puts "page.title=\#{page.title}"
puts "page.layout=\#{page.layout}"
end
When templates are interpreted, changes to this array are undefined. Before the rendering phase, extensions may add/remove pages within this array, or alter details on the individual pages themselves.
page
The page
object is set to the struct for each page in turn, during processing.
It provides access to any properties set in the front-matter, along with
other properties used by the engine or extensions.
page.url
The url
property of each page provides a relative URL from the root of the site
for accessing the page. The URL may or may not directly match the output file.
For instance, any path that ends with /index.html
will not include the index.html
portion in the resulting URL.
This allows for the top-level page of the site (/index.html
) to have a URL of simply /
.
The same rule applies for any directory's index.html
.
page.layout
Normally set through a page's front-matter, the layout
property is used by the
engine to recursively surround page content with a layout. Any layout
may also specify a layout for itself to use, until some end is reached.
The layout
property should reference the simple name of the layout.
A page index.html.haml
wanting to use the layout from _layouts/default.html.haml
should simply specify front-matter such as
---
layout: default
---
The correct layout extension (.html
) will be selected based upon the page's
own extension.
Additional helpers may be configured into the pipeline.