gpt4 book ai didi

navigation - Zend Framework 2 导航子子菜单

转载 作者:行者123 更新时间:2023-12-04 15:59:37 24 4
gpt4 key购买 nike

假设我有以下导航:

Home
Internal
Folders
New Folder
Configuration
Categories
New
Tags
New
Options
New
Contact
External

我在 layout.phtml 中用于显示此菜单的代码:
$internal = $this->navigation('navigation')->findOneByLabel('Internal');
echo $this->navigation('navigation')
->menu()
->setUlClass('nav nav-list')
->setMaxDepth(1)
->renderMenu($internal);

所以它显示如下:
Folders
New Folder
Configuration
Categories
Tags
Options
Contact

目前我得到了一个不错的菜单,显示了所有的 parent 和第一个 child ,所以"new"导航永远不会显示。

但是,如果我在“类别”页面上,我也想显示他们的 child ,因此应该显示“类别”下的"new",如下所示:
Folders
New Folder
Configuration
Categories
New
Tags
Options
Contact

我尝试了很多方法来尝试这个,并检查了你可以给 layout.phtml 中的菜单的所有选项(setMinDepth、setMaxDepth、renderSubMenu、setParentMenu),但没有成功。它要么包含"new",要么不包含,而不是介于两者之间。

除了制作部分菜单之外,关于 ZF2 的文档并没有给我任何关于如何让这个子菜单工作的信息。

那么,制作部分是唯一的选择吗?

提前致谢!

最佳答案

对于不久前的一个小项目,我做了一些非常快速的修复。我们一直在计划清理代码并使其可配置,但我们从未进入另一个需要相同的项目。

TL;DR:您不能使用普通的 zf2 View 助手,但您必须查找要显示的“顶级”页面(在您的情况下为内部)并显示该页面下方的菜单。

<?php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class SubNavigation extends AbstractHelper
{
public function __invoke($class = null)
{
$view = $this->getView();
$menu = $view->navigation()->menu();

$container = $view->navigation()->getContainer();
$active = $view->navigation()->setRenderInvisible(true)->findActive($container);

if (!$active) {
return;
}

$container = $active['page'];
$depth = $active['depth'];

while (0 !== $depth) {
$container = $container->getParent();
$depth--;
}

$visible = $container->isVisible();
$html = $menu->setContainer($container->setVisible(true))
->setUlClass('')
->setOnlyActiveBranch(false)
->setMinDepth(null)
->setMaxDepth(null)
->render();

$container->setVisible($visible);

if (strlen($html)) {
return sprintf('<ul %s><li%s><a href="%s">%s</a>%s</li></ul>',
(null !== $class) ? ' class="' . $class . '"' : null,
($container->isActive())? ' class="active"' : null,
$container->getHref(),
$container->getLabel(),
$html);
}
}
}

此 View 助手将“内部”呈现为 sprintf() 中的顶部菜单项。调用,但您可以轻松更改此行为。你可以回声 $html然后这就是你真正需要的。

关于navigation - Zend Framework 2 导航子子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com