b944fb8f6f28f9005ad7f333e4f3ab0b0855b12a
[ikiwiki.git] / doc / todo / tmplvars_plugin.mdwn
1 A simple plugin to allow per-page customization of a template by passing paramaters to HTML::Template. For those times when a whole pagetemplate is too much work. --Ethan
2
3     #!/usr/bin/perl
4     package IkiWiki::Plugin::tmplvars;
5
6     use warnings;
7     use strict;
8     use IkiWiki 2.00;
9
10     my %tmplvars;
11
12     sub import { #{{{
13             hook(type => "preprocess", id => "tmplvars", call => \&preprocess);
14             hook(type => "pagetemplate", id => "tmplvars", call => \&pagetemplate);
15     } # }}}
16
17     sub preprocess (@) { #{{{
18             my %params=@_;
19
20             if ($params{page} eq $params{destpage}) {
21                     my $page = $params{page};
22                     if (undef $tmplvars{$page}){
23                             $tmplvars{$page} = {};
24                     }
25                     # XXX: The only way to get at just the user-specified params is
26                     # to try to remove all the Ikiwiki-supplied ones.
27                     delete $params{page};
28                     delete $params{destpage};
29                     delete $params{preview};
30                     foreach my $arg (keys %params){
31                             $tmplvars{$page}->{$arg} = $params{$arg};
32                     }
33             }
34     
35     } # }}}
36     
37     sub pagetemplate (@) { #{{{
38             my %params=@_;
39             my $template = $params{template};
40
41             if (exists $tmplvars{$params{page}}) {
42                     foreach my $arg (keys %{$tmplvars{$params{page}}}){
43                             $template->param($arg => $tmplvars{$params{page}}->{$arg});
44                     }
45             }
46
47             return undef;
48     } # }}}
49
50     1