NAME
Plift - HTML Template Engine + Custom HTML Elements
SYNOPSIS
use Plift;
my $plift = Plift->new(
path => \@paths, # default ['.']
plugins => [qw/ Script Blog Gallery GoogleMap /], # plugins not included
);
my $tpl = $plift->template("index");
# set render directives
$tpl->at({
'#name' => 'fullname',
'#contact' => [
'.phone' => 'contact.phone',
'.email' => 'contact.email'
]
});
# render render with data
my $document = $tpl->render({
fullname => 'Carlos Fernando Avila Gratz',
contact => {
phone => '+55 27 1234-5678',
email => 'cafe@example.com'
}
});
# print
print $document->as_html;
DESCRIPTION
Plift is a HTML template engine which enforces strict separation of business logic from the view. It is designer friendly, safe, extensible and fast enough to be used as a web request renderer. This engine tries to follow the principles described in the paper Enforcing Strict Model-View Separation in Template Engines by Terence Parr of University of San Francisco. The goal is to provide suficient power without providing constructs that allow separation violations.
MANUAL
This document is the reference for the Plift class. The manual pages (not yet complete) are:
- Plift::Manual::Tutorial
-
Step-by-step intruduction to Plift. "Hello World" style.
- Plift::Manual::DesignerFriendly
-
Pure HTML5 template files makes everything easier to write and better to maintain. Designers can use their WYSIWYG editor, backend developers can unit test their element renderers.
- Plift::Manual::Inception
-
Talks about the web framework that inspired Plift, and its 'View-First' approach to web request handling. (As opposed to the widespread 'Controller-First').
- Plift::Manual::CustomHandler
-
Explains how Plift is just an engine for reading/parsing HTML files, and dispaching subroutine handlers bound to XPath expressions. You will learn how to write your custom handlers using the same dispaching loop as the builtin handlers.
METHODS
add_handler
Binds a handler to one or more html tags, attributes, or xpath expression. Valid parameters are:
- tag
-
Scalar or arrayref of HTML tags bound to this handler.
- attribute
-
Scalar or arrayref of HTML attributes bound to this handler.
- xpath
-
XPath expression matching the nodes bound this handler.
See Plift::Manual::CustomHandler.
template
$context = $plift->template($template_name, \%options)
Creates a new Plift::Context instance, which will load, process and render template $template_name
. See "at" in Plift::Context, "set" in Plift::Context and "render" in Plift::Context.
process
$document = $plift->process($template_name, \%data, \@directives)
A shortcut method. A new context is created via "template", rendering directives are set via "at" in Plift::Context and finally the template is rendered via "render" in Plift::Context. Returns a XML::LibXML::jQuery object representing the final processed document.
my %data = (
fullname => 'John Doe',
contact => {
phone => 123,
email => 'foo@example'
}
);
my @directives =
'#name' => 'fullname',
'#name@title' => 'fullname',
'#contact' => {
'contact' => [
'.phone' => 'phone',
'.email' => 'email',
]
);
my $document = $plift->process('index', \%data, \@directives);
print $document->as_html;
render
$html = $plift->render($template_name, \%data, \@directives)
A shortcut for $plift->process()->as_html
.
load_components
$plift = $plift->load_components(@components)
Loads one or more Plift components. For each component, we build a class name by prepending Plift::
to the component name, then load the class, instantiate a new object and call $component->register($self)
.
See Plift::Manual::CustomHandler.
SIMILAR PROJECTS
This is a list of modules (that I know of) that pursue similar goals:
- HTML::Template
-
Probably one of the first to use (almost) valid html files as templates, and encourage less business logic to be embedded in the templates.
- Template::Pure
-
Perl implementation of Pure.js. This module inspired Plift's render directives.
- Template::Semantic
-
Similar to Template::Pure, but the render directives points to the actual data values, instead of datapoints. Which IMHO makes the work harder.
- Template::Flute
-
Uses a XML specification format for the rendering directives. Has lots of other features.
LICENSE
Copyright (C) Carlos Fernando Avila Gratz.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Carlos Fernando Avila Gratz <cafe@kreato.com.br>