Context
I may have missed a simple way to achieve what I need without modifying ikiwiki, so here is the context.
I have a first-level directory (called bricks
) containing a bunch of
wiki pages :
/bricks
|
|- bla.mdwn
|
|- bli.mdwn
|
`- ...
I have two groups of tags called direction
and usage
, stored in
two sub-directories of $tagbase
:
/tag
|
|- direction
| |- d1.mdwn
| |- d2.mdwn
| |- ...
|
|- usage
| |- u1.mdwn
| |- u2.mdwn
| |- ...
Any page in /brick
can be tagged with one or more tags from any of
these tags-groups.
I need to present different views for these wiki pages, so a /view
tree is dedicated to this mission :
/view
|
|- dev
| |- d1.mdwn
| |- d2.mdwn
| |-...
|
|- howto
|- u1.mdwn
|- u2.mdwn
|- ...
... where e.g. /view/dev/d1
lists a subset (depending on other tags)
of the pages tagged d1.
My current plan is :
- thanks to the edittemplate plugin,
/view/dev/*
and/view/howto/*
would contain respectively[[!template id=dev_direction]]
and[[!template id=howto_usage]]
/templates/dev_direction.mdwn
and/templates/howto_usage.mdwn
would use[[!map ...]]
directives to build their views
My issue
Such map directives would look something like the following (more complicated, actually, but let's focus on my current issue) :
[[!map pages="bricks/* and link(tag/usage/<TMPL_VAR BASENAME>)"]]
Where BASENAME
value would be, e.g., u1
or d2
, depending on the
page inserting the template. But BASENAME
does not exist. I found
that <TMPL_VAR PAGE>
is replaced with the full path to the page, but
I did not found how to get the page's basename in a template included
with a [[!template id=...]]
directive.
Any idea ?
I guess it would be possible to provide the templates inserted by the
template plugin with more TMPL_VAR
variables, but I don't know ikiwiki
codebase well, so I don't know how hard it would be.
I sure could write a ad-hoc plugin that would use the pagetemplate
hook to add a custom <TMPL_LOOP>
selector I could use in my
templates, or another one that would use the filter hook to add the
needed [[!map ...]]
where it belongs to, but since ikiwiki's
preprocessor directives already almost do what I need, I'd like to
avoid the ad-hoc plugin solution.
(Adding a parameter such as name=d1
in every /view/dev/d*.mdwn
and
/view/howto/u*.mdwn
page is not an option : I want to factorize the
most possible of these pages.
The following patch adds a
basename
TMPL_VAR
variable that can be used in the templates inserted by [[!template plugin]] :diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index a6e34fc..bb9dd8d 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -57,6 +57,8 @@ sub preprocess (@) { } } + $template->param("basename" => (split("/", $params{page}))[-1]); + return IkiWiki::preprocess($params{page}, $params{destpage}, IkiWiki::filter($params{page}, $params{destpage}, $template->output));
-- intrigeri
Thanks for taking the trouble to develop a patch. done --Joey
Thanks -- intrigeri