112 lines
3.4 KiB
Markdown
112 lines
3.4 KiB
Markdown
[[!tag wishlist patch]]
|
|
|
|
# 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
|