NAME

CAM::Template::Cache - Template files with database storage

SYNOPSIS

use CAM::Template::Cache;
CAM::Template::Cache->setDBH($dbh);
CAM::Template::Cache->setExpiration(60*60); # seconds ago

my $key = $username.":".$pagetype;  # whatever you like
my $template = new CAM::Template::Cache($key);
$template->setExpiration(24*60*60); # seconds ago
if ($template->isFresh()) {
   $template->printCache();
} else {
   $template->setFilename($templateFilename);
   $template->addParams(blah blah);
   $template->print();
}

DESCRIPTION

CAM::Template provides an interface for parameter replacement in a template file. This package provides the additional functionality of storing the completed template in a MySQL database for later quick retrieval.

Use of the cached version of the template requires a unique key that will allow retrieval of the completed file, if present. The cache uses a time stamp and an expiration interval (default: 1 day) to decide if the cached copy is recent enough.

This module also includes the class methods setup() and clean() as convenience functions for initialization and maintenance of the cache database.

FUNCTIONS

new
new CACHEKEY
new CACHEKEY, DBIHANDLE

Create a new template object. To get the caching functionality, the cachekey is required, and must uniquely identify the content of interest. If the cachekey is not specified, then this template behaves without any of the caching infrastructure.

If the database handle is not set here, it must have been set previously via the class method setDBH().

Any additional function arguments (namely, a filename or replacement parameters) are passed on to the CAM::Template constructor.

setDBH DBI_HANDLE

Set the global database handle for this package. Use like this: CAM::Template::Cache->setDBH($dbh);

setExpiration SECONDS

Set the duration for the cached content. If the cache is older than the specified time, the isFresh() method will return false.

Use like this: CAM::Template::Cache->setExpiration($seconds); or like this: $template->setExpiration($seconds);

setTableName NAME

Set the name of the database table that is used for the cache.

Use like this: CAM::Template::Cache->setTableName($name); or like this: $template->setTableName($name);

isFresh

Returns a boolean indicating whether the cache is present and whether it is up to date.

toStringCache

Returns the cached content, or undef on failure. If isFresh() has already been called, information is recycled from that inquiry.

printCache

Prints the cached content. Returns a boolean indicating success or failure. If isFresh() has already been called, information is recycled from that inquiry.

save CONTENT

Record the content in the database. This is typically only called from within toString(), but is provided here for the benefit of subclasses.

toString

Same as CAM::Template->toString except that the result is stored in the database.

print

Same as CAM::Template->print except that the result is stored in the database.

setup
setup DBIHANDLE, TABLENAME

Create a database table for storing cached templates. This is not intended to be called often, if ever. This is a class method. It should be used in a separate script like this:

use DBI;
use CAM::Template::Cache;

my $dbh = DBI->connect(...);
CAM::Template::Cache->setup($dbh, "TemplateCache");
clean
clean DBIHANDLE, TABLENAME, SECONDS

Cleans out all records older than the specified number of seconds. This is a class method. It should be used in a separate script like this, likely running as a cron:

use DBI;
use CAM::Template::Cache;

my $dbh = DBI->connect(...);
CAM::Template::Cache->clean($dbh, "TemplateCache", 2*60*60);

AUTHOR

Chris Dolan, Clotho Advanced Media, chris@clotho.com