NAME
Zucchini::Template - process templates and output static files
VERSION
version 0.0.21
SYNOPSIS
# create a new templater object
$templater = Zucchini::Template->new(
{ config => $self->get_config }
);
# process the site
$templater->process_site;
DESCRIPTION
This module handles the processing of the template files into the website source files.
The solution uses Template::Toolkit and tries to Be Smart - only process that which has changed.
An exception to this is when a globally included file, for example header.tt, has been modified. To apply this change to the site, one must either "touch" all the templates, or use the 'force' option.
# force all html files to be regenerated
$ find . -name \*html -exec touch {} \;
$ zucchini
# brute force approach to regenerate all files
$ zucchini --force
METHODS
new
Creates a new instance of the top-level Zucchini object:
# create a new templater object
$templater = Zucchini::Template->new(
{
config => $zucchini->get_config,
}
);
process_site
Gets appropriate site-config, and initiates the template-processing.
# start the templating...
$templater->process_site;
get_config / set_config
Returns/sets an object representing the current configuration.
# get the current configuration
$self->get_config;
# get the source_dir from the configuration object
$directory = $self->get_config->get_siteconfig->{source_dir};
get_ttobject / set_ttobject
Returns/sets the Template Toolkit object:
# process the current item
$self->get_ttobject->process(
$template,
\%data,
$output_file
);
process_directory
Perform the appropriate action for each item in the given directory: template or copy files; recurse directories. Ignore anything that should be ignored, as per the site-config.
# set off a cascading processing of the templates
$templater->process_directory( $template_root_directory );
directory_contents
Get a list of everything (except . and ..) in the given directory.
# get items in the site root
@list = $templater->directory_contents( $template_root_directory );
file_checksum
Calculate an MD5 checksum for a given file.
# get a checksum
$checksum = $templater->file_checksum( $file );
file_modified
Given two files - a template file and its templated output - determine if the template has been modified since the output was last generated.
# do something with a changed template
if ($self->file_modified($template, $output)) {
# do stuff
}
ignore_directory
Given a directory, determine if it should be ignored; useful for CVS/ and .svn/ directories. Uses 'ignored_dirs' from site-config.
# don't do anything with ignored directories
if ($self->ignore_directory($dir)) {
# next
}
ignore_file
Given a file, determine if it should be ignored; useful for editor swap files. Uses 'ignore_files' from site-config.
# don't do anything with ignored files
if ($self->ignore_file($file)) {
# next
}
item_name
Returns a filename, optionally formatted to include the full (destination) path if 'showpath' option is active.
# tell the user where we're putting something
print "Writing: "
. $self->item_name($dir, $file)
. "\n";
process_file
Given a file take one of the following actions: template it, copy it, ignore it.
# process the current file
$self->process_file($dir, $file)
relative_path_from_full
This catchily named function returns the relative path to a directory, from the template source dir; 'source_dir' in the site-config.
# get the relative path ...
$relpath = $self->relative_path_from_full( $dir );
same_file
Determine if two files are the same. Primarily used to avoid copying unchanged files.
if(not $self->same_file($file1, $file2)) {
# do stuff
}
show_destination
If the 'showdest' option is active, output where we are writing a file to.
# let user know where we're putting the item
$self->show_destination($directory, $item);
template_file
Detemine if the file should be treated as a template. Template files are specified by the 'template_files' variable in the site-config.
if ($self->template_file($item)) {
# do some templating magic
}
SEE ALSO
AUTHOR
Chisel <chisel@chizography.net>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Chisel Wright.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.