* 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 => "sanitize", id => "skeleton", call => \&sanitize);
|
||||||
hook(type => "format", id => "skeleton", call => \&format);
|
hook(type => "format", id => "skeleton", call => \&format);
|
||||||
hook(type => "pagetemplate", id => "skeleton", call => \&pagetemplate);
|
hook(type => "pagetemplate", id => "skeleton", call => \&pagetemplate);
|
||||||
|
hook(type => "templatefile", id => "skeleton", call => \&templatefile);
|
||||||
hook(type => "delete", id => "skeleton", call => \&delete);
|
hook(type => "delete", id => "skeleton", call => \&delete);
|
||||||
hook(type => "change", id => "skeleton", call => \&change);
|
hook(type => "change", id => "skeleton", call => \&change);
|
||||||
hook(type => "cgi", id => "skeleton", call => \&cgi);
|
hook(type => "cgi", id => "skeleton", call => \&cgi);
|
||||||
|
@ -86,6 +87,13 @@ sub pagetemplate (@) { #{{{
|
||||||
debug("skeleton plugin running as a pagetemplate hook");
|
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 (@) { #{{{
|
sub delete (@) { #{{{
|
||||||
my @files=@_;
|
my @files=@_;
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,15 @@ sub genpage ($$$) { #{{{
|
||||||
my $content=shift;
|
my $content=shift;
|
||||||
my $mtime=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;
|
my $actions=0;
|
||||||
|
|
||||||
if (length $config{cgiurl}) {
|
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
|
* 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
|
in version 1.50 with the addition of %destsources. Thanks, Ethan
|
||||||
Glasser-Camp.
|
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
|
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);
|
hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
|
||||||
|
|
||||||
[[Templates]] are filled out for many different things in ikiwiki, like
|
[[Templates|wikitemplate]] are filled out for many different things in
|
||||||
generating a page, or part of a blog page, or an rss feed, or a cgi. This
|
ikiwiki, like generating a page, or part of a blog page, or an rss feed, or
|
||||||
hook allows modifying those templates. The function is passed named
|
a cgi. This hook allows modifying the variables available on those
|
||||||
parameters. The "page" and "destpage" parameters are the same as for a
|
templates. The function is passed named parameters. The "page" and
|
||||||
preprocess hook. The "template" parameter is a [[cpan HTML::Template]]
|
"destpage" parameters are the same as for a preprocess hook. The "template"
|
||||||
object that is the template that will be used to generate the page. The
|
parameter is a [[cpan HTML::Template]] object that is the template that
|
||||||
function can manipulate that template object.
|
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
|
The most common thing to do is probably to call `$template->param()` to add
|
||||||
a new custom parameter to the template.
|
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
|
### sanitize
|
||||||
|
|
||||||
hook(type => "sanitize", id => "foo", call => \&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
|
proper patch be helpful (it really just adds those lines to the right
|
||||||
place).
|
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
|
* `searchform.tmpl` - Used by the [[plugins/search]] plugin to add a search
|
||||||
form to wiki pages.
|
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
|
The [[plugins/template]] plugin also uses templates, though those
|
||||||
[[templates]] are stored in the wiki.
|
[[templates]] are stored in the wiki.
|
||||||
|
|
Loading…
Reference in New Issue