Plugin: sidebar2
Author: Grésille
Test page: test

Claim: The sidebar plugin has nothing to do with sidebars. This plugin renders some page (which happens to be named sidebar) and put the result in template variable SIDEBAR, in template page.tmpl. But the fact that it is a sidebar, i.e. a bar appearing on the side on the screen, is done by CSS.

What if I want a sidebar, and a navigation bar, and a footer a bit more elaborated than the template, etc.? This plugin allows this.

If no option is given, or if option global_sidebars is a boolean, this plugin is identical to the sidebar plugin (if not, please report a bug). Otherwise, global_sidebars is a list of sidebars to include. The list is as follow:

global_sidebars => [
  "var1", "page1", "pagespec1",
  "var2", "page2", "pagespec2",
  ]

The meaning is: if available, render page1 in pages matching pagespec1, and put it in variable var1 of the page template, and so on for var2, page2, etc.

The default, which gives the behaviour of the sidebar plugin, is global_sidebars => ["sidebar", "sidebar", "*"].

Improvements over sidebar plugin

  • You can add several "sidebars" to your wiki. For example, to have a sidebar, a submeno that appear only in pages documentations, and a footer, your global_sidebars would be:

    global_sidebars => [
      "sidebar", "sidebar", "*",
      "menu", "/doc/menu", "doc/*",
      "footer", "/footer", "*"
      ]
    
  • You can enable sidebars only in certain pages matching the pagespec. If, for the same template variable, several pagespec match the current page, the first page in the list is taken into account.

    For example, the following configuration says: render menu as the sidebar for every page, excepted subpages of doc, for which the doc_menu page should be rendered.

    global_sidebars => [
      "sidebar", "doc_menu", "doc/*",
      "sidebar", "menu", "*",
      ]
    

Which pages to render?

Here is the decision process to decide what is rendered in a template variable handled by this plugin.

  1. If the page contains the ?sidebar directive, with a content argument, this content is rendered.
  2. If the page contains the ?sidebar directive with no content argument, the first rule for the considered template variable is applied, disregarding the pagespec.
  3. If none of the above, the first rule having its pagespec patching the current page is applied.
  4. If none of the above, the variable is left empty.

Directive

Its behaviour is similar to the sidebar of the original sidebar, excepted that a new var argument is available.

If this var argument is set, instead of applying to the default sidebar template variable, the directive applies to the value given in the argument.

For example, the following command forces the footer sidebar to appear on the current page.

The following command forces the footer sidebar to appaer, containing the content given in argument.