1 Maybe sidebar could be beefed up to take the name of a sidebar, such that I could use multiple sidebars in the same wiki. For instance, the default name would be 'sidebar', meaning the plugin looks for `sidebar.pm` and fills in the `sidebar` slot, but I might also want a footer in `footer.pm`, filling the template's `footer` slot.
3 One good way (if possible) would be to provide a directive like `\[[!sidebar
4 id=sidebar]]` which would cause the file, in which it occurred to fill the
5 slot `SIDEBAR` in the template: basically, a page `foo.mdwn` says
6 `\[[!fillslot slot=myslot]]` and then its contents should go into `<TMPL_VAR
7 SLOT_MYSLOT>` for all pages. Ideally, this can then be overridden, so if
8 `/bar/foo.mdwn` also references `myslot` then pages under `/bar` should get
9 those contents instead.
14 > In mine I just copied sidebar out and made some extra "sidebars", but they go elsewhere. Ugly hack, but it works. --[[simonraven]]
16 >> Here a simple [[patch]] for multiple sidebars. Not too fancy but better than having multiple copies of the sidebar plugin. --[[jeanprivat]]
18 >>> I made a [[git]] branch for it [[!template id=gitbranch branch="privat/multiple_sidebars" author="[[jeanprivat]]"]] --[[jeanprivat]]
20 >>>> Ping for [[Joey]]. Do you have any comment? I could improve it if there is things you do not like. I prefer to have such a feature integrated upstream. --[[JeanPrivat]]
23 --- /usr/share/perl5/IkiWiki/Plugin/sidebar.pm 2010-02-11 22:53:17.000000000 -0500
24 +++ plugins/IkiWiki/Plugin/sidebar.pm 2010-02-27 09:54:12.524412391 -0500
29 + active_sidebars => {
31 + example => qw(sidebar banner footer),
32 + description => "Which sidebars must be activated and processed.",
38 -sub sidebar_content ($) {
39 +sub sidebar_content ($$) {
43 - my $sidebar_page=bestlink($page, "sidebar") || return;
44 + my $sidebar_page=bestlink($page, $sidebar) || return;
45 my $sidebar_file=$pagesources{$sidebar_page} || return;
46 my $sidebar_type=pagetype($sidebar_file);
50 my $page=$params{page};
51 my $template=$params{template};
53 - if ($template->query(name => "sidebar")) {
54 - my $content=sidebar_content($page);
55 - if (defined $content && length $content) {
56 - $template->param(sidebar => $content);
59 + if (defined $config{active_sidebars} && length $config{active_sidebars}) { @sidebars = @{$config{active_sidebars}}; }
60 + else { @sidebars = qw(sidebar); }
62 + foreach my $sidebar (@sidebars) {
63 + if ($template->query(name => $sidebar)) {
64 + my $content=sidebar_content($page, $sidebar);
65 + if (defined $content && length $content) {
66 + $template->param($sidebar => $content);