id4v / menu-bundle
Menu Bundle that allows you to create menus, and manage them easily with SonataAdminBundle
Installs: 1 981
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 2
Open Issues: 3
Type:symfony-bundle
Requires
This package is not auto-updated.
Last update: 2024-11-06 16:32:06 UTC
README
MenuBundle
Id4vMenuBundle is a Symfony2 bundle to manage menus easily
How it works
A Menu is a tree of MenuItems
MenuItems are
- A label to display
- Optionally an icon to show
- A link to go when clicked
Installation
1 Install it using composer
composer require id4v/menu-bundle
2 Activate the bundle in your AppKernel.php
file
public function registerBundles() { $bundles = array( ... # if you haven't already this bundle new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), ... new \Id4v\Bundle\MenuBundle\Id4vMenuBundle(), ... ); return $bundles }
3 Add this mandatory configuration for the StofDoctrineExtensionsBundle
in your config.yml
stof_doctrine_extensions: orm: default: sluggable: true
4 Register the id4v_menu.admin.menu
Service to your sonata admin configuration
5 Profit!
Usage
####Create your menu in the admin of your website.
####Organize your menu by adding MenuItems, drag and dropping them
####Render your Menu in twig templates
####Full exemple of implementation
{{ knp_menu_render("app.menu.main", {template: "Id4vMenuBundle:Menu:main.html.twig"}) }}
or
{{ knp_menu_render("app.menu.main", {template: "menu:main.html.twig"}) }}
All documentation for this tag is available here : KnpMenuBundle.
A base builder as been added to help common usage of menu creation, the BaseMenuBuilder.php
class.
First of all the basic declaration of your builder can be :
namespace AppBundle\Menu; use Knp\Menu\FactoryInterface; use Doctrine\ORM\EntityManager; use Id4v\Bundle\MenuBundle\Builder\BaseMenuBuilder; class AppMenuBuilder extends BaseMenuBuilder { public function __construct(FactoryInterface $factory, EntityManager $em) { parent::__construct($factory, $em); } public function createMainMenu() { return $this->getSimpleMenu('main-menu'); } }
You can now declare yours services :
services: app.menu_builder: class: AppBundle\Menu\AppMenuBuilder arguments: ["@knp_menu.factory", "@doctrine.orm.entity_manager"] app.menu.main: class: Knp\Menu\MenuItem # the service definition requires setting the class factory: ["@app.menu_builder", createMainMenu] arguments: ["@request_stack"] tags: - { name: knp_menu.menu, alias: app.menu.main }
You can consult documentation of this declaration in KnpMenuBundle Doc.
Moreover you can activate an URI matcher or adapt one on your need.
services: app.voter.regex: class: Id4v\Bundle\MenuBundle\Matcher\Voter\UriVoter arguments: ["@request_stack"] tags: - { name: knp_menu.voter }
Sonata Admin
Sometimes you get an abundant tree into your menus. And the performance of the administration get found affected. It's the reason why existing a configuration with the bundle.
By default you can only drap and drop two levels depth. If you want to change it, modify the menu_depth
node.
Default Configuration
id4v_menu: admin: menu_depth: 2