diff options
Diffstat (limited to 'doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn')
-rw-r--r-- | doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn b/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn new file mode 100644 index 000000000..c71250b3a --- /dev/null +++ b/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn @@ -0,0 +1,111 @@ +[[!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 |