Recent Changes - Search:

Cookbook

PmWiki

pmwiki.org

ExpandingMenus

Summary: How to create a sidebar menu which expands to show sublevel items
Status: Stable
Version:
Prerequisites: pmwiki-2.0
Maintainer:
Votes: 5

Question

How can I create a compact sidebar menu which expands to show sublevel items when clicking on first level items?

Answer

Make sure the skin you use can display first and second level list elements.

Build your Sidebar embracing selected list elements in an (:if group $Groupname :) ... (:if:) conditional directive. These will be displayed only if the page belongs to the specified group. This is most useful to hide second level list elements when not in their group. The sidebar menu must be structured in groups, so that secondary elements point to pages in a group, and an intro page link appears at the top. That gives the effect of opening up the group links when clicked on the intro page link.

Example SideBar

  
*[[GroupOne/GroupOne]] (:if group GroupOne:)
**[[GroupOne/Page1]]
**[[GroupOne/Page2]]
**[[GroupOne/Page3]] (:if:)
*[[GroupTwo/GroupTwo]] (:if group GroupTwo:)
**[[GroupTwo/Page4]]
**[[GroupTwo/Page5]]
**[[GroupTwo/Page6]] (:if:)
*PmWiki (:if group PmWiki:)
** [[PmWiki/Installation | Download and Install]]
** [[PmWiki/Tips For Editing]]
** [[PmWiki/Documentation Index]]
** [[PmWiki/FAQ]] (:if:)

To avoid having each group edit the Main.SideBar you can expand on this idea and allow each group to have its own SideBar-Menu page conditionally included like this:

Example SideBar

  
*[[GroupOne]]
(:if group GroupOne:)(:include {$Group}.SideBar-Menu:)(:if:)
*[[GroupTwo]]
(:if group GroupTwo:)(:include {$Group}.SideBar-Menu:)(:if:)
*[[PmWiki]]
(:if group PmWiki:)(:include {$Group}.SideBar-Menu:)(:if:)

Example Group.SideBar-Menu Note: You do not have to fully qualify the group pages.

  
**[[Page1]]
**[[Page2]]
**[[Page3]]

  • This recipe was last tested on PmWiki version: 2beta26
  • This recipe requires at least PmWiki version: 2

See also

Notes and Comments

Contributors


Question:

Is it possible to arrange within one (:if group GroupOne:) a second and maybe even third group? I would like to create a Members-section with a Forum (group Forum) and others but to include all of them within the group Members.

While you can't nest conditional statements, what you want simply requires that you display a second (or third) group within a single condition. That shouldn't be a problem. Using the example at the top of this page, if you wanted GroupOne and GroupTwo to display when on a page in GroupOne, then you would just get rid of the first (:if:) ending (After *[[GroupOne/Page3]]) and the second (:if group GroupTwo:) (after *[[GroupTwo/GroupTwo]]) Pico May 18, 2006, at 07:51 AM
Well, yesterday I've already solved that problem via (:if group GroupA or GroupB:)...(:if:). Maybe I should have checked the ConditionalMarkup earlier... But anyway - thank you.

Expansion Idea

Within the conditional part, use PageLists to automatically list all the pages in the group. Dec 14,2006 Sandy

Edit - History - Print - Recent Changes - Search
Page last modified on February 12, 2008, at 06:30 AM