[Patches] [PATCH] Bug 7387 : Adding a caching plugin for Template::Toolkit

koha-patchbot at kohaaloha.com koha-patchbot at kohaaloha.com
Fri Dec 30 09:30:03 NZDT 2011


From: Chris Cormack <chrisc at catalyst.net.nz>
Date: Fri, 30 Dec 2011 09:25:29 +1300
Subject: [PATCH] Bug 7387 : Adding a caching plugin for Template::Toolkit

And an example of how to use it
---
 Koha/Template/Plugin/Cache.pm                      |  119 ++++++++++++++++++++
 .../intranet-tmpl/prog/en/modules/intranet-main.tt |    8 +-
 2 files changed, 126 insertions(+), 1 deletions(-)
 create mode 100644 Koha/Template/Plugin/Cache.pm

diff --git a/Koha/Template/Plugin/Cache.pm b/Koha/Template/Plugin/Cache.pm
new file mode 100644
index 0000000..c4d43c6
--- /dev/null
+++ b/Koha/Template/Plugin/Cache.pm
@@ -0,0 +1,119 @@
+package Koha::Template::Plugin::Cache;
+
+# Copyright Catalyst IT 2011
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use vars qw( $VERSION );
+use base qw( Template::Plugin );
+use Template::Plugin;
+use C4::Context;
+$VERSION = '0.01';
+
+#------------------------------------------------------------------------
+# new(\%options)
+#------------------------------------------------------------------------
+
+sub new {
+    my ( $class, $context, $params ) = @_;
+    my $cache;
+    if ( $params->{cache} ) {
+        $cache = delete $params->{cache};
+    }
+    else {
+        require Koha::Cache;
+	$cache = Koha::Cache->new( { 'cache_servers' => C4::Context->config('memcached_servers') });
+    }
+    my $self = bless {
+        CACHE   => $cache,
+        CONFIG  => $params,
+        CONTEXT => $context,
+    }, $class;
+    return $self;
+}
+
+#------------------------------------------------------------------------
+# $cache->include({
+#                 template => 'foo.html',
+#                 keys     => {'user.name', user.name},
+#                 ttl      => 60, #seconds
+#                });
+#------------------------------------------------------------------------
+
+sub inc {
+    my ( $self, $params ) = @_;
+    $self->_cached_action( 'include', $params );
+}
+
+sub proc {
+    my ( $self, $params ) = @_;
+    $self->_cached_action( 'process', $params );
+}
+
+sub _cached_action {
+    my ( $self, $action, $params ) = @_;
+    my $key;
+    if ( $params->{key} ) {
+        $key = delete $params->{key};
+    }
+    else {
+        my $cache_keys = $params->{keys};
+        $key = join(
+            ':',
+            (
+                $params->{template},
+		map { "$_=$cache_keys->{$_}" } keys %{$cache_keys}
+            )
+        );
+    }
+    my $result = $self->{CACHE}->get_from_cache($key);
+    if ( !$result ) {
+	warn "here in not in cache";
+	$result = $self->{CONTEXT}->$action( $params->{template} );
+	$self->{CACHE}->set_in_cache( $key, $result, $params->{ttl} );
+    }
+    return $result;
+}
+
+1;
+
+=head1 NAME
+
+Koha::Template::Plugin::Cache - cache output of templates
+    
+=head1 SYNOPSIS
+
+  [% USE cache = Cache %]
+        
+
+  [% cache.inc(
+                   'template' => 'slow.html',
+                   'keys' => {'user.name' => user.name},
+                   'ttl' => 360
+                   ) %]
+               
+  # or with a pre-defined Cache::* object and key
+  
+  [% USE cache = Cache( cache => mycache ) %]
+      
+  [% cache.inc(
+                       'template' => 'slow.html',
+                       'key'      => mykey,
+                       'ttl'      => 360
+                       )  %]
+    
+__END__
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt
index 12861f6..9f69ca1 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt
@@ -1,4 +1,10 @@
-[% INCLUDE 'doc-head-open.inc' %]
+[% USE cache = Cache %]
+[% cache.inc(
+    'template' => 'doc-head-open.inc',
+    'keys' => {'dochead' => 'dochead'},
+    'ttl' => 360
+    )
+%]
 <title>Koha staff client</title>
 [% INCLUDE 'doc-head-close.inc' %]
 <style type="text/css"> #koha-news { border: 1px solid #EEEEEE; margin: .2em;} #koha-news h3 {background-color: #EEEEEE; padding : .3em; margin: 0;} .newsitem {margin: .3em; border-bottom: 1px solid #EEE;} .newsitem:last-child {border-bottom : 0;} .newsfooter {font-size: 80%; color: #CCCCCC;} </style>
-- 
1.7.5.4


More information about the Patches mailing list