ZF2 добавляет параметры в подменю setPartial

Я использую это частичное для создания моего подменю.

<?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-> getHref ()» отображает URL без необходимого параметра «slug / id».

Я попытался создать URL с помощью $ this-> url () в ZF1, вы можете передавать параметры в массиве в парциальное, но в ZF2 это, похоже, больше не работает.

Кто-нибудь может сказать мне, как добавить параметры в URL-адресах меню?

Заранее спасибо!

PS!

Я не имею в виду $ this-> Partial, я говорю о $ this-> navigation (‘navigation’) -> menu () -> setPartial (‘partal / submenu ‘) -> render (), который явно не не поддерживает массив параметров.

2

Решение

Если я понимаю ваш вопрос, да, вы можете передавать параметры частичным. Пример:


<?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

0

Другие решения

Это было когда-то, так как этот вопрос был задан, однако сегодня я столкнулся с той же проблемой (используя версию 2.4).

Если у вас есть сегментный маршрут, который нужно включить в меню, для которого требуются некоторые параметры, вы не сможете передать их частичному помощнику вида навигации.

Сделанное мною изменение позволяет ViewModel экземпляр, передаваемый помощнику по навигации по меню setPartial() метод. Эта модель представления будет контекстом для частичной визуализации шаблона навигации; поэтому мы можем использовать его для установки переменных, которые нам нужны для создания маршрута, и извлекать их так же, как в других представлениях, используя $this->variableName,

Изменение требует от вас расширения помощника меню (или того, который когда-либо требовался помощнику навигации).

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]);
//...
}
0

По вопросам рекламы [email protected]