.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". .. _menus : Menus ***** Chill has created his own menu system .. seealso:: `Routes dans Chill [specification] `_ The issue wich discussed the implementation of routes. Concepts ======== .. warning:: to be written Add a menu in a template ======================== In your twig template, use the `chill_menu` function : .. code-block:: html+jinja {{ chill_menu('person', { 'layout': 'ChillPersonBundle::menu.html.twig', 'args' : {'id': person.id }, 'activeRouteKey': 'chill_person_view' }) }} The available arguments are: * `layout` : a custom layout. Default to `ChillMainBundle:Menu:defaultMenu.html.twig` * `args` : those arguments will be passed through the url generator. * `activeRouteKey` must be the route key name. .. note:: The argument `activeRouteKey` may be a twig variable, defined elsewhere in your template, even in child templates. Create an entry in an existing menu =================================== If a route belongs to a menu, you simply add this to his definition in routing.yml : .. code-block:: yaml chill_person_history_list: pattern: /person/{person_id}/history defaults: { _controller: ChillPersonBundle:History:list } options: #declare menus menus: # the route should be in 'person' menu : person: #and have those arguments : order: 100 label: menu.person.history * `order` (mandatory) : the order in the menu. It is preferrable to increment by far more than 1. * `label` (mandatory) : a translatable string. * `helper` (optional) : a text to help people to understand what does the menu do. Not used in default implementation. * `condition` (optional) : an `Expression Language `_ which will make the menu appears or not. Typically, it may be used to say "show this menu only if the person concerned is more than 18". **Not implemented yet**. * `access` (optional) : an Expression Language to evalute the possibility, for the user, to show this menu according to Access Control Model. **Not implemented yet.** You may add additional keys, but should not use the keys described above. You may add the same route to multiple menus : .. code-block:: yaml chill_person_history_list: pattern: /person/{person_id}/history defaults: { _controller: ChillPersonBundle:History:list } options: menus: menu1: order: 100 label: menu.person.history menu2: order: 100 label: another.label Customize menu rendering ======================== You may customize menu rendering by using the `layout` option. .. warning :: TODO : this part should be written. .. _caveats : Caveats ======= Currently, you may pass arguments globally to each menu, and they will be all passed to route url. This means that : * the argument name in the route entry must match the argument key in menu declaration in twig template * if an argument is missing to generate an url, the url generator will throw a `Symfony\Component\Routing\Exception\MissingMandatoryParametersException` * if the argument name is not declared in route entry, it will be added to the url, (example: `/my/route?additional=foo`)