KnpMenuBundle - как я могу установить класс значков для каждого элемента меню?


Я хочу, чтобы мой код представления выглядел так:

<li>
    <a href="path/to/action">
            <i class="icon-class"></i>
            <span class="title">Title</span>
    </a>
</li>

Я создаю элементы меню с помощью конструктора меню:

class Builder extends ContainerAware
{
    public function adminMenu(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem('root');

        $menu->addChild('Dashboard', array(
            'route' => 'admin_dashboard',
        ));

        return $menu;
    }
}

Я перезаписал представление следующим кодом (knp_menu.html.twig):

{% block linkElement %}
    {% import _self as knp_menu %}
    <a href="{{ item.uri }}"{{ knp_menu.attributes(item.linkAttributes) }}>
        <i class="icon-class"></i>
        <span class="title">{{ block('label') }}</span>
    </a>
{% endblock %}

Как я могу передать значение имени класса значка элементу <i> в методе AdminMenu() в классе Builder? Какой самый простой способ это сделать?

Author: klapaucius, 2015-01-02

3 answers

Вы можете добавить любой атрибут с помощью

$menu->addChild('Dashboard', array(
    'route' => 'admin_dashboard',
))->setAttribute('icon', 'icon-class');

Затем

{{ item.attribute('icon') }}
 8
Author: Federkun, 2015-01-02 20:04:30

Я бы предложил использовать extras вместо attributes, потому что attributes используется для отображения атрибутов элемента li.

$menu->addChild('Dashboard', array(
    'uri' => '#',
))->setAttribute('icon', 'icon-class');

И

{{ item.attribute('icon') }}

, вероятно, будет отображаться как:

<li icon="icon-class"><a href="#"><i class="fa fa-icon-class" aria-hidden="true"></i> Dashboard</a></li>

Принимая во внимание, что:

$menu->addChild('Dashboard', array(
    'uri' => '#',
))->setExtra('icon', 'icon-class');

И

{{ item.extra('icon') }}

, вероятно, будет просто отображаться как:

<li><a href="#"><i class="fa fa-icon-class" aria-hidden="true"></i> Dashboard</a></li>

Также смотрите этот ответ: https://stackoverflow.com/a/19095287/2106834.

 3
Author: Jonny, 2017-05-23 12:25:20

Просто:

$menu->addChild('Home', ['route' => 'home_page'])
        ->setAttribute('icon', 'fa fa-home');
 0
Author: Lord Zed, 2015-01-02 20:51:00