KnpMenuBundle - отправьте параметры и используйте их в Twig
Последние дни я написал в своем меню навигационной панели с KnpMenuBundle. Но я думаю отказаться от этого. Я хочу просто указать шаблону несколько параметров в пути, а затем отреагировать на него. Я схожу с ума. Является ли это возможным. Я попробовал это:
$menu->addChild('Registration', array('route' => 'fos_user_registration_register',
'icon' => array('glyphicon' => 'briefcase')));
И тогда я хочу выбрать это в шаблоне Twig:
{% if icon['glyphicon'] is defined %}
<span class="glyphicon glyphicon-{{icon['glyphicon']}} "></span>
{% endif %}
Я много пробовал, но ничего не работает. Это должно быть так просто. Я не могу поверить, что это не должно быть возможным.
2 ответа
Вот как я это сделал
Класс Меню:
$menu->addChild('Home', array(
'route' => 'home',
'extras' => array('icon' => 'home')
));
Мой вызов меню в шаблоне, я прошу конкретный шаблон ветки
{{ knp_menu_render('MyBundle:Menu:primaryNav', {'template': 'MyBundle:Menu:primaryNav.html.twig'}) }}
В шаблоне ветки я копирую / вставляю шаблон knpmenubundle и редактирую некоторые блоки. Вы также можете сделать это с помощью "extends" и шаблонов наследования (возможно, лучшая идея).
Пример отредактированного блока для иконки:
{% block spanElement %}
<a href="#" class="dropdown-toggle">
{% if item.extras.icon is defined %}<i class="icon-{{ item.extras.icon }}"></i>{% endif %}
<span class="menu-text"> {{ block('label') }}</span>
<b class="arrow icon-angle-down"></b>
</a>
{% endblock %}
Возможно, вам нужно было это поле "дополнительные" в классе меню:)
Я не знаю, может ли это все-таки помочь, но есть намного более простой способ использовать шрифт с меню knp. Есть вариант, где вы можете дать класс по вашей ссылке. Вам просто нужно создать дочерний элемент без метки add setLinkAttribute. Пример:
$ menu-> addChild ('', array ('route' => 'backend_index')) -> setLinkAttribute ('class', 'fa fa-home');
Это создаст тег "a" с классом fa fa-home. Даже если документация о шрифте ошеломляет, что значки предназначены для встроенных элементов, она будет работать с тегом "a". Затем вы можете использовать некоторые CSS для улучшения дизайна. В моем случае я просто изменил размер шрифта и высоту строки.