* Add templatefile hook.
* Add pagetemplate plugin, which allows changing the template used for a page. (Not to be confused with the hook of the same name..)master
parent
e64442aa08
commit
40959ce76d
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/perl
|
||||
package IkiWiki::Plugin::pagetemplate;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my %templates;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "pagetemplate", call => \&preprocess);
|
||||
hook(type => "templatefile", id => "pagetemplate", call => \&templatefile);
|
||||
} # }}}
|
||||
|
||||
sub preprocess (@) { #{{{
|
||||
my %params=@_;
|
||||
|
||||
if (! exists $params{template} ||
|
||||
$params{template} !~ /^[-A-Za-z0-9._+]+$/ ||
|
||||
! defined IkiWiki::template_file($params{template})) {
|
||||
return "[[pagetemplate ".gettext("bad or missing template")."]]";
|
||||
}
|
||||
|
||||
if ($params{page} eq $params{destpage}) {
|
||||
$templates{$params{page}}=$params{template};
|
||||
}
|
||||
|
||||
} # }}}
|
||||
|
||||
sub templatefile (@) { #{{{
|
||||
my %params=@_;
|
||||
|
||||
if (exists $templates{$params{page}}) {
|
||||
return $templates{$params{page}};
|
||||
}
|
||||
|
||||
return undef;
|
||||
} # }}}
|
||||
|
||||
1
|
|
@ -18,6 +18,7 @@ sub import { #{{{
|
|||
hook(type => "sanitize", id => "skeleton", call => \&sanitize);
|
||||
hook(type => "format", id => "skeleton", call => \&format);
|
||||
hook(type => "pagetemplate", id => "skeleton", call => \&pagetemplate);
|
||||
hook(type => "templatefile", id => "skeleton", call => \&templatefile);
|
||||
hook(type => "delete", id => "skeleton", call => \&delete);
|
||||
hook(type => "change", id => "skeleton", call => \&change);
|
||||
hook(type => "cgi", id => "skeleton", call => \&cgi);
|
||||
|
@ -86,6 +87,13 @@ sub pagetemplate (@) { #{{{
|
|||
debug("skeleton plugin running as a pagetemplate hook");
|
||||
} # }}}
|
||||
|
||||
sub templatefile (@) { #{{{
|
||||
my %params=@_;
|
||||
my $page=$params{page};
|
||||
|
||||
debug("skeleton plugin running as a templatefile hook");
|
||||
} # }}}
|
||||
|
||||
sub delete (@) { #{{{
|
||||
my @files=@_;
|
||||
|
||||
|
|
|
@ -69,7 +69,15 @@ sub genpage ($$$) { #{{{
|
|||
my $content=shift;
|
||||
my $mtime=shift;
|
||||
|
||||
my $template=template("page.tmpl", blind_cache => 1);
|
||||
my $templatefile;
|
||||
run_hooks(templatefile => sub {
|
||||
return if defined $templatefile;
|
||||
my $file=shift->(page => $page);
|
||||
if (defined $file && defined template_file($file)) {
|
||||
$templatefile=$file;
|
||||
}
|
||||
});
|
||||
my $template=template(defined $templatefile ? $templatefile : 'page.tmpl', blind_cache => 1);
|
||||
my $actions=0;
|
||||
|
||||
if (length $config{cgiurl}) {
|
||||
|
|
|
@ -14,8 +14,11 @@ ikiwiki (2.5) UNRELEASED; urgency=low
|
|||
* Fix re-rendering of pages when a linked to page goes away. This was broken
|
||||
in version 1.50 with the addition of %destsources. Thanks, Ethan
|
||||
Glasser-Camp.
|
||||
* Add templatefile hook.
|
||||
* Add pagetemplate plugin, which allows changing the template used for
|
||||
a page. (Not to be confused with the hook of the same name..)
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Thu, 26 Jul 2007 15:30:22 -0400
|
||||
-- Joey Hess <joeyh@debian.org> Thu, 26 Jul 2007 16:16:55 -0400
|
||||
|
||||
ikiwiki (2.4) unstable; urgency=low
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
[[template id=plugin name=pagetemplate author="[[Joey]]"]]
|
||||
[[tag type/chrome]]
|
||||
|
||||
This plugin allows a page to be created using a different
|
||||
[[template|wikitemplate]]. The page text is inserted into the template, so
|
||||
the template controls the overall look and feel of the wiki page. This is
|
||||
in contrast to the [[template]] plugin, which allows inserting templates
|
||||
_into_ the body of a page.
|
||||
|
||||
This plugin can only use templates that are already installed in
|
||||
/usr/share/ikiwiki/templates (or wherever ikiwiki is configured to look for
|
||||
them). You can choose to use any .tmpl files in that directory. Example:
|
||||
|
||||
\[[pagetemplate template=my_fancy.tmpl]]
|
||||
|
||||
[[pagetemplate template=my_fancy.tmpl]]
|
|
@ -128,17 +128,28 @@ return the htmlized content.
|
|||
|
||||
hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
|
||||
|
||||
[[Templates]] are filled out for many different things in ikiwiki, like
|
||||
generating a page, or part of a blog page, or an rss feed, or a cgi. This
|
||||
hook allows modifying those templates. The function is passed named
|
||||
parameters. The "page" and "destpage" parameters are the same as for a
|
||||
preprocess hook. The "template" parameter is a [[cpan HTML::Template]]
|
||||
object that is the template that will be used to generate the page. The
|
||||
function can manipulate that template object.
|
||||
[[Templates|wikitemplate]] are filled out for many different things in
|
||||
ikiwiki, like generating a page, or part of a blog page, or an rss feed, or
|
||||
a cgi. This hook allows modifying the variables available on those
|
||||
templates. The function is passed named parameters. The "page" and
|
||||
"destpage" parameters are the same as for a preprocess hook. The "template"
|
||||
parameter is a [[cpan HTML::Template]] object that is the template that
|
||||
will be used to generate the page. The function can manipulate that
|
||||
template object.
|
||||
|
||||
The most common thing to do is probably to call `$template->param()` to add
|
||||
a new custom parameter to the template.
|
||||
|
||||
### templatefile
|
||||
|
||||
hook(type => "templatefile", id => "foo", call => \&templatefile);
|
||||
|
||||
This hook allows plugins to change the [[template|wikitemplate]] that is
|
||||
used for a page in the wiki. The hook is passed a "page" parameter, and
|
||||
should return the name of the template file to use, or undef if it doesn't
|
||||
want to change the default ("page.tmpl"). Template files are looked for in
|
||||
/usr/share/ikiwiki/templates by default.
|
||||
|
||||
### sanitize
|
||||
|
||||
hook(type => "sanitize", id => "foo", call => \&sanitize);
|
||||
|
|
|
@ -39,3 +39,5 @@ could be accepted upstream. Joey, what do you think? And would a
|
|||
proper patch be helpful (it really just adds those lines to the right
|
||||
place).
|
||||
|
||||
> Fully implemented as a templatefile hook and a [[plugins/pagetemplate]]
|
||||
> plugin. --[[Joey]] [[done]]
|
||||
|
|
|
@ -34,5 +34,8 @@ located in /usr/share/ikiwiki/templates by default.
|
|||
* `searchform.tmpl` - Used by the [[plugins/search]] plugin to add a search
|
||||
form to wiki pages.
|
||||
|
||||
The [[plugins/pagetemplate]] plugin can allow individual pages to use a
|
||||
different template than `page.tmpl`.
|
||||
|
||||
The [[plugins/template]] plugin also uses templates, though those
|
||||
[[templates]] are stored in the wiki.
|
||||
|
|
Loading…
Reference in New Issue