Sylius:如何自定义右上角的用户菜单?
Sylius: how to customize to User-menu in top right bar?
如官方 Docs 中所述,我能够为用户自定义管理仪表板菜单和帐户部分中的菜单。
但是,我如何自定义菜单,该菜单显示在右上角的栏中,包括“我的帐户”和“注销[=”等菜单项34=]”?我想在这里添加一些项目。
这就是我的意思:
到目前为止我做了什么:
首先我在 services.yml 中定义了 MenuBuilder-Customization:
app.listener.shop.menu_builder:
class: AppBundle\Menu\AccountMenuListener
tags:
- { name: kernel.event_listener, event: sylius.menu.shop.account, method: addAccountMenuItems }
- { name: kernel.event_listener, event: sylius.shop.menu_builder.account, method: addTopMenuMenuItems }
- { name: kernel.event_listener, event: sylius.menu_builder.frontend.main, method: addTopMenuMenuItems }
这是我定制的 MenuBuilder:
<?php
namespace AppBundle\Menu;
use Knp\Menu\MenuItem;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
final class AccountMenuListener
{
/**
* @param MenuBuilderEvent $event
*/
public function addAccountMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
$menu->removeChild('address_book');
$menu->removeChild('order_history');
$menu
->addChild('new', ['route' => 'sylius_shop_homepage'])
->setLabel('My Reservations')
->setLabelAttribute('icon', 'star');
}
public function addTopMenuMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
// list all items
foreach($menu->getChildren() as $child) {
echo $child->getName() . '<br>';
}
die;
}
}
至少对于 "my account" 部分中出现的侧边菜单,一切都运行良好。但是右上角的菜单无法通过这种方式到达。 "sylius.menu_builder.frontend.main" 和 "sylius.shop.menu_builder.account" 是否会抓到这里。
如何正确完成?
有两种方法:
1) 您应该覆盖这些行:https://github.com/Sylius/Sylius/blob/1.2/src/Sylius/Bundle/ShopBundle/Resources/views/layout.html.twig#L33。
2) 或者您可以在您的自定义 Twig 模板中覆盖块 top
(上面 1 行),它继承了上述模板。
如官方 Docs 中所述,我能够为用户自定义管理仪表板菜单和帐户部分中的菜单。
但是,我如何自定义菜单,该菜单显示在右上角的栏中,包括“我的帐户”和“注销[=”等菜单项34=]”?我想在这里添加一些项目。
这就是我的意思:
到目前为止我做了什么:
首先我在 services.yml 中定义了 MenuBuilder-Customization:
app.listener.shop.menu_builder:
class: AppBundle\Menu\AccountMenuListener
tags:
- { name: kernel.event_listener, event: sylius.menu.shop.account, method: addAccountMenuItems }
- { name: kernel.event_listener, event: sylius.shop.menu_builder.account, method: addTopMenuMenuItems }
- { name: kernel.event_listener, event: sylius.menu_builder.frontend.main, method: addTopMenuMenuItems }
这是我定制的 MenuBuilder:
<?php
namespace AppBundle\Menu;
use Knp\Menu\MenuItem;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
final class AccountMenuListener
{
/**
* @param MenuBuilderEvent $event
*/
public function addAccountMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
$menu->removeChild('address_book');
$menu->removeChild('order_history');
$menu
->addChild('new', ['route' => 'sylius_shop_homepage'])
->setLabel('My Reservations')
->setLabelAttribute('icon', 'star');
}
public function addTopMenuMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
// list all items
foreach($menu->getChildren() as $child) {
echo $child->getName() . '<br>';
}
die;
}
}
至少对于 "my account" 部分中出现的侧边菜单,一切都运行良好。但是右上角的菜单无法通过这种方式到达。 "sylius.menu_builder.frontend.main" 和 "sylius.shop.menu_builder.account" 是否会抓到这里。
如何正确完成?
有两种方法:
1) 您应该覆盖这些行:https://github.com/Sylius/Sylius/blob/1.2/src/Sylius/Bundle/ShopBundle/Resources/views/layout.html.twig#L33。
2) 或者您可以在您的自定义 Twig 模板中覆盖块 top
(上面 1 行),它继承了上述模板。