В моем проекте (symfony / flex 1.1) у меня был метод "displayMenuAndSubMenu ([...])" (в качестве службы) для построения меню и подменю в многомерном массиве.
Примечание: некоторые меню могут не иметь подменю
Моя проблема в том, что когда я хочу отобразить свою доску меню в шаблоне html.twig, я не могу воспроизвести инкрементные переменные $ i и $ a. В самом деле, с моим фактически веточным кодом я получаю простой вывод строки: - (
Я где-то читал, что собственное расширение ветки позволит мне обойти эту трудность.
Но мне очень сложно реализовать простой счетчик.
Итак, мои вопросы:
- Есть ли более простой способ сделать это в шаблоне html.twig?
- Должен ли я пройти через шаблон php.twig (настолько отвратительно в моем смысле)?
- Обречен ли я определить расширение ветки? (И если да, то есть ли у вас пример?)
Спасибо
ContentService :: displayMenuAndSubmenu
public function displayMenuAndSubMenu(CategoryService $categoryService, CategoryTypeService $categoryTypeService)
{
$categoryId = $categoryService->getCategoryId('Primary');
$categoryTypeId = $categoryTypeService->getCategoryTypeId('Menu');
// Getting primary menus
$primaryMenu = $this->em->getRepository('App\Entity\Content')->findByCategoryTypeAndCategory($categoryTypeId, $categoryId);
// Constructing MainMenu with menus and submenus
$i = 0;
$menu = [];
$submenu = [];
$mainMenu = [];
foreach ($primaryMenu as $keyMenu => $menuItem) {
$menu[$i] = [ 'menu_' . $i => [
'id' => $menuItem->getId(),
'name' => $menuItem->getName(),
'body' => $menuItem->getBody(),
'slug' => $menuItem->getSlug(),
]
];
// Getting secondary menu
$secondaryMenu = $this->em->getRepository('App\Entity\Content')->findByParent($menuItem->getId());
$a = 0;
foreach ($secondaryMenu as $keySubmenu => $subMenuItem) {
$submenu[$i][$a] = [ 'submenu_' . $i . '_' . $a => [
'id' => $subMenuItem->getId(),
'name' => $subMenuItem->getName(),
'body' => $subMenuItem->getBody(),
'slug' => $subMenuItem->getSlug(),
]
];
$menu[$i] += $submenu[$i][$a];
$a++;
}
$mainMenu += $menu;
$i++;
}
return $mainMenu;
}
_menu.html.twig
{% set i = 0 %}
{% for menu in menu_items %}
{% set a = 0 %}
<div class="center">
<section class="primary-menu">
{% if 'menu_'~i~'.slug' is not empty %}
<header class="enter">{{ 'menu_'~i~'.name' }}</header>
{% for submenu in 'menu_'~i~'.submenu' %}
<article>
<a href= {{ 'submenu_'~i~'_'~a~'.slug' }}" alt="{{ 'submenu_'~i~'_'~a~'.body' }}"class="para1">{{ 'submenu_'~i~'_'~a~'.name' }}</a>
</article>
{% endfor %}
{% else %}
<header class="enter"><a href="{{ 'menu_'~i~'.slug' }}" alt="{{ 'menu_'~i~'.body' }}">{{ 'menu_'~i~'.name' }}</a></header>
{% endif %}
</section>
{% set i = i + 1 %}
{% endfor %}
dump ($ mainMenu) при выводе класса ContentService
array:5 [▼
0 => array:4 [▼
"menu_0" => array:4 [▼
"id" => "a420742f-124a-11e9-a1fd-805e4fe8b43b"
"name" => "Menu 0"
"body" => "Primary menu0"
"slug" => null
]
"submenu_0_0" => array:4 [▼
"id" => "a4208ec3-124a-11e9-a1fd-805e4fe8b43b"
"name" => "Submenu 0"
"body" => "Secondary menu0"
"slug" => "menu-0-submenu-0"
]
"submenu_0_1" => array:4 [▼
"id" => "a420a70d-124a-11e9-a1fd-805e4fe8b43b"
"name" => "Submenu 1"
"body" => "Secondary menu1"
"slug" => "menu-0-submenu-1"
]
"submenu_0_2" => array:4 [▼
"id" => "a420ba8f-124a-11e9-a1fd-805e4fe8b43b"
"name" => "Submenu 2"
"body" => "Secondary menu2"
"slug" => "menu-0-submenu-2"
]
]
1 => array:1 [▼
"menu_1" => array:4 [▼
"id" => "a4205c9f-124a-11e9-a1fd-805e4fe8b43b"
"name" => "Home"
"body" => "Home menu"
"slug" => "home"
]
]
2 => array:4 [▶]
3 => array:4 [▶]
4 => array:4 [▶]
]