mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
124 lines
3.8 KiB
ReStructuredText
124 lines
3.8 KiB
ReStructuredText
.. 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] <https://redmine.champs-libres.coop/issues/179>`_
|
|
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 <http://symfony.com/doc/current/components/expression_language/index.html> `_ 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`)
|