App-Templer
view release on metacpan or search on metacpan
* These are implemented via plugins.
* Plugins are documented in the file [PLUGINS.md](PLUGINS.md).
* You may also embed perl code in your pages.
Another key point is that the layouts allow for more than a single
simple "content" block to be placed into them - you can add arbitrary
numbers of optional side-menus, for example.
Although this tool was written and used with the intent you'd write your
site-content in HTML you can write your input pages in Textile or Markdown
if you prefer (these inputs are supported via [plugins](PLUGINS.md)).
Concepts
--------
A templer site comprises of three things:
* A global configuration file.
* This defines the paths to search for input pages, layout templates, plugins, etc.
* This may contain global variable declarations.
* Please see the example configuration file:
[`templer.cfg`](https://raw.github.com/skx/templer/master/templer.cfg.sample).
* A layout.
* This is used to format the output pages, defining the common look and feel.
* A series of pages & assets.
* Pages have their content processed and inserted into the layout to produce output HTML.
* Assets are not processed, but are copied into the output directory literally.
In general we assume there is a tree like so:
âââ input
â âââ index.wgn
â âââ ...
â âââ ...
â âââ favicon.ico
â âââ robots.txt
âââ layouts
â âââ default.layout
âââ output
âââ templer.cfg
Every file in the input directory is either considered to be a page which is converted
into HTML, or an asset which is copied into the output-tree with no changes made.
In the example above `input/index.wgn` would become `output/index.html`.
> **NOTE** The `.wgn` suffix is an example. You can define which suffix is considered a page via the configuration file.
There is _also_ an "in-place" mode. When working in-place there is no
distinct output directory, instead output is written to the same directory in
which is encountered. Given an input directory you might see this kind of
transformation:
index.wgn -> index.html
about.wgn -> about.html
favicon.ico [Ignored and left un-modified.]
robots.txt [Ignored and left un-modified.]
..
There is _also_ a *synchronized* mode. When working synchronized any file in
the output directory which do not have a source file in input directory (page
or asset) is removed each time the site is rebuild.
Pages
-----
Your site will be made of pages, which are snippets of HTML you write. These
snippets will be processed and inserted into the layout file before being output
to disk.
A page is a simple file which contains a header and some content. This is
a sample page:
Title: This is the title page.
----
<p>This is the body of the page</p>
The header of the page is delimited from the body by four dashes (`----`) and
can contain an arbitrary number of variable definitions.
Special Page Variables
-----------------------
In your page you can define, and refer to, an arbitrary number of variables
but some names are reserved - and any variable with one of those names will
be treated specially:
The special variable `layout` may be used to specify a different layout
template for the current page. If there is no per-page layout specified then
the global layout declared in the `templer.cfg` file will be used.
The special variable `template-filter` may be used to specify some filters to
apply on the used layout in order to transform it into valid `HTML::Template`
file. If there is no per-page layout filter specified then the global layout
declared in the `templer.cfg` file will be used.
The special variable `output` may be used to specify an alternative output
file. For example the input file `index.wgn` would normally become
`index.html`, but you could make it become something else.
The special variable `format` may be given a value of `textile`, `markdown`, or
`perl` to enable processing the page body with the appropriate filter. These
formatters are implemented as [plugins](PLUGINS.md), and will be available
assuming their [dependencies are installed](#installation).
Textile and markdown are well-known, and allow you to write your page content naturally. The perl-formatter is used to allow you to write dynamic content in Perl in your page-body, via the [Text::Template](http://search.cpan.org/perldoc?Text%3A%3ATe...
Title: This page has code in it
format: perl
----
<p>This page has some code in it.</p>
<p>I am running on { `hostname` }...</p>
<p>I am {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
$year += 1900;
( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )