У меня есть два модуля.
Макет устанавливается в модуле приложения, в макете есть элементы навигации, специфичные для модуля, которые мне нужно отображать, вот что я пытаюсь сделать.
Это часть, которую я вызываю в макете/макете модуля приложения.
//file: module/Application/view/layout/container/layout.phtml
<?php echo $this->partial('toolbar'); ?>
Это мой toolbar.phtml
//file: module/Application/view/layout/chunks/toolbar.phtml
<div class="new-top-menu">
<div class="navbar-header">
<a class="navbar-brand sidebar-toggle-box" href="#">
<div class="sidebar-left-trigger">
<span class="fa fa-align-right"></span>
</div>
</a>
</div>
<ul class="nav navbar-nav">
<?php echo $this->placeholder('notification/top-menu'); ?>
</ul>
<ul class="nav navbar-nav navbar-right">
<?php echo $this->placeholder('toolbar/search'); ?>
<?php echo $this->placeholder('toolbar/right-position1')->set($this->position1); ?>
<?php echo $this->placeholder('toolbar/right-position2')->set($this->position2); ?>
<?php echo $this->placeholder('toolbar/right-position3')->set($this->position3); ?>
</ul>
</div>
В основном я хочу прочитать другую частичную именованную toolbar/user-menu.phtml
из модуля пользователя и установить ее как содержимое этого заполнителя $this->placeholder('toolbar/right-position3');
Я попытался сделать это в модуле Module.php User.
namespace User;
public function onBootstrap(MvcEvent $e)
{
$viewModel = $e->getViewModel();
$viewModel->setVariable('position1', 'test string');
}
Это работает абсолютно нормально, проблема в том, что я хочу заменить содержимое "тестовой строки" содержимым частичного, которое находится в file: module/User/view/toolbar/user-menu.phtml
Любые указатели на то, как это можно сделать в ZF2, оцениваются.
Благодарю.
Я смог сделать это, используя следующий код, я с нетерпением жду, если это можно улучшить, так или иначе.
В User/Module.php я обновлено следующее.
use Zend\View\Renderer\PhpRenderer;
use Zend\View\Resolver;
public function onBootstrap(MvcEvent $event)
{
$application = $event->getApplication();
$eventManager = $application->getEventManager();
$serviceManager = $application->getServiceManager();
//create a Template Stack
$stack = new Resolver\TemplatePathStack(array('script_paths' => array(__DIR__ . '/view/user/toolbar')));
//create a Resolver
$resolver = new Resolver\AggregateResolver();
$resolver->attach($stack);
//create a Renderer
$renderer = new PhpRenderer();
$renderer->setResolver($resolver);
$viewHelperManager = $serviceManager->get('ViewHelperManager');
$urlViewHelper = $viewHelperManager->get('url');
$partial = $renderer->partial('user-menu', array(
'signOutUrl' => $urlViewHelper('user-account-sign-out')
));
$viewModel = $event->getViewModel();
$viewModel->setVariable('position1', $partial);
}
Что он, я могу разместить содержимое HTML в placeholder сейчас, единственная проблема, с которой я сейчас сталкиваюсь, - это получить доступ к помощнику доступа в файле user-menu.phtml, в настоящее время я создаю его в Module.php и передавая его файл вида.
Я думаю, что вы на правильном пути, потому что вы начинаете смотреть на помощники на собственном виджете, но вы не должны напрямую манипулировать ими в модуле, и вы не должны пытаться изменить компоновку панели инструментов в сценариях вашего представления.
Вместо этого создайте свой собственный помощник для просмотра панели инструментов, введите зависимости через свой завод (включая частичный шаблон), а затем вы можете просто echo $this->toolbar()
в вашем сценарии просмотра макета.
Кроме того, вы можете взглянуть на Spiffy Navigation, если не на что, просто на то, как реализован помощник вида. https://github.com/spiffyjr/spiffy-navigation