我使用此部分来生成我的子菜单。
<?php foreach ($this->container as $page): ?>
<?php foreach ($page->getPages() as $child): ?>
<a href="<?php echo $child->getHref(); ?>" class="list-group-item">
<?php echo $this->translate($child->getLabel()); ?>
</a>
<?php endforeach; ?>
<?php endforeach; ?>
这就是这样称呼的:
$this->navigation('navigation')->menu()->setPartial('partial/submenu')->render();
但是当我渲染菜单时,“$ child-&gt; getHref()”会在没有所需“slug / id”参数的情况下呈现网址。
我尝试在ZF1中创建带有“$ this-&gt; url()”的网址,您可以将数组中的参数传递给部分但在ZF2中似乎不再有效。
有人能告诉我如何将params添加到菜单网址吗?
提前致谢!
PS!
我不是指$ this-&gt;部分,我在谈论$ this-&gt;导航('导航') - &gt; menu() - &gt; setPartial('partial / submenu ') - &gt; render()显然不支持param数组。
答案 0 :(得分:0)
如果我理解你的问题,是的,你可以将params传递给partials。例如:
<?php echo $this->partial('partial.phtml', array(
'from' => 'Team Framework',
'subject' => 'view partials')); ?>
请参阅http://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.partial.html
我不确定这完全解决了您的问题,因为您没有显示菜单助手是什么。这是你自己的助手吗?你是说setPartial方法只接受一个参数吗?
所有这一切,你考虑过Spiffy Navigation吗? https://github.com/spiffyjr/spiffy-navigation
答案 1 :(得分:0)
自问这个问题以来已经过了一段时间,但今天我遇到了同样的问题(使用2.4版本)。
如果要在菜单中包含需要某些参数的分段路径,则无法将这些路径传递到导航的视图部分帮助程序。
我所做的更改允许将ViewModel
个实例传递给菜单导航助手的setPartial()
方法。该视图模型将是导航的部分模板渲染的上下文;因此,我们可以使用它来设置路径创建所需的变量,并使用$this->variableName
就像在其他视图中一样获取它们。
此更改要求您扩展Menu帮助程序(或导航帮助程序需要它)。
namespace Foo\Navigation;
use Zend\Navigation\AbstractContainer;
use Zend\View\Model\ViewModel;
class Menu extends \Zend\View\Helper\Navigation\Menu
{
public function renderPartial($container = null, $partial = null)
{
if (null == $container) {
$container = $this->getContainer();
}
if ($container && $partial instanceof ViewModel) {
$partial->setVariable('container', $container);
}
return parent::renderPartial($container, $partial);
}
public function setPartial($partial)
{
if ($partial instanceof ViewModel) {
$this->partial = $partial;
} else {
parent::setPartial($partial);
}
return $this;
}
}
因为这扩展了帮助程序的默认实现,所以module.config.php
中需要更新配置以确保加载扩展类。
'navigation_helpers' => [
'invokables' => [
'Menu' => 'Foo\Navigation\Menu',
],
],
菜单助手将接受视图模型实例。
$viewModel = new \Zend\View\Model\ViewModel;
$viewModel->setTemplate('path/to/partial/template')
->setVariable('id', $foo->getId());
echo $this->navigation()
->menu()
->setPartial($viewModel)
->render();
实际部分脚本中的唯一更改将要求您使用URL视图助手创建URL。
foreach ($container as $page) {
//...
$href = $this->url($page->getRoute(), ['id' => $this->id]);
//...
}