From 8c61d340f388f8950d387c2961d2e4d7edbd873c Mon Sep 17 00:00:00 2001 From: Ole Vik Date: Tue, 28 Feb 2017 02:15:23 +0100 Subject: [PATCH] Add vertical menu cookbook entry Adds an entry to /cookbook/general-recipes with a simple tutorial on creating a vertical, collapsible, hierarchical menu of pages with Twig, CSS, and JS. --- pages/10.cookbook/01.general-recipes/docs.md | 94 ++++++++++++++++++ .../01.general-recipes/vertical_menu.png | Bin 0 -> 15253 bytes 2 files changed, 94 insertions(+) create mode 100644 pages/10.cookbook/01.general-recipes/vertical_menu.png diff --git a/pages/10.cookbook/01.general-recipes/docs.md b/pages/10.cookbook/01.general-recipes/docs.md index cdcf0c347..238bc3b71 100644 --- a/pages/10.cookbook/01.general-recipes/docs.md +++ b/pages/10.cookbook/01.general-recipes/docs.md @@ -15,6 +15,7 @@ This page contains an assortment of problems and their respective solutions rela 1. [Create a private area](#create-a-private-area) 1. [Add JavaScript to the footer](#add-javascript-to-the-footer) 1. [Override the default logs folder location](#override-the-default-logs-folder-location) +1. [Split vertical menu system](#split-vertical-menu-system) ### Change the PHP CLI version @@ -472,3 +473,96 @@ return [ ``` This basically overrides the `log` stream with the `grav-logs/` folder rather than the default `logs/` folder as defined in `system/src/Grav/Common/Config/Setup.php`. + +### Split vertical menu system + +To create a vertical, collapsible, hierarchical menu of pages you need a Twig-loop, a bit of CSS, and a bit of JavaScript. The final result will, when using the Antimatter-theme, look like this: + +![Vertical Menu](vertical_menu.png) + +Let's start with Twig: + +``` +
    + {% for page in pages.children.visible %} + {% if page.children.visible is empty %} +
  1. + {{ page.title }} + {% else %} +
  2. + {{ page.title }} +
      + {% for child in page.children.visible %} + {% if child.children.visible is empty %} +
    1. + {{ child.title }} + {% else %} +
    2. + {{ child.title }} +
        + {% for subchild in child.children.visible %} +
      1. {{ subchild.title }}
      2. + {% endfor %} +
      + {% endif %} +
    3. + {% endfor %} +
    + {% endif %} +
  3. + {% endfor %} +
+``` + +This creates an ordered list which iterates over all visible pages within Grav, going three levels deep to create a structure for each level. The list wrapped around the entire structure has the class *tree*, and each list-item has the class *parent* if it contains children or *item* if it does not. + +Clicking on a parent opens the list, whilst regular items link to the page itself. You could add this to virtually any Twig-template in a Grav theme, provided that Grav can access the visible pages. + +To add some style, we add some CSS: + +``` + +``` + +This should generally be placed before the Twig-structure, or ideally be streamed into the [Asset Manager](/themes/asset-manager) in your theme. The effect is to add **[+]** after each parent-item, indicating that it can be opened, which disappears when opened. + +Finally, let's add a bit of JavaScript to [handle toggling](http://stackoverflow.com/a/36297446/603387) the *open*-class: + +``` + +``` + +This should always be placed **after** the Twig-structure, also ideally in the [Asset Manager](/themes/asset-manager). diff --git a/pages/10.cookbook/01.general-recipes/vertical_menu.png b/pages/10.cookbook/01.general-recipes/vertical_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7b28e22b85672a75a1dc21060512ecb6f85dc1 GIT binary patch literal 15253 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 K$Ex=R0sjx&gs=br literal 0 HcmV?d00001