zend framework2 — частичный доступ в Module.Stack Overflow

Я получил два модуля.

  1. заявка
  2. пользователь

Макет установлен в модуле приложения, в макете есть определенные элементы навигации модуля, которые мне нужно отобразить, вот что я пытаюсь сделать.

Это частичное, я звоню в расположение / расположение модуля приложения.

//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 модуля пользователя.

namespace User;

public function onBootstrap(MvcEvent $e)
{
$viewModel = $e->getViewModel();
$viewModel->setVariable('position1', 'test string');
}

Это работает абсолютно нормально, проблема в том, что я хочу заменить «тестовую строку» контента частичным, который находится в file: module/User/view/toolbar/user-menu.phtml

Любые указания на то, как это можно сделать в ZF2, приветствуются.

Благодарю.

Update1:

Я смог сделать это, используя следующий код, и я с нетерпением жду, если это можно будет улучшить, во всяком случае.

В 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 в заполнитель, единственная проблема, с которой я сейчас сталкиваюсь, — это доступ к помощнику вида в файле user-menu.phtml, в настоящее время я генерирую его в Module.php и передаю его просмотр файла.

0

Решение

Я думаю, что вы на правильном пути, потому что вы начинаете смотреть на нативные помощники вида, но вы не должны манипулировать ими непосредственно в модуле, и вы не должны пытаться изменить состав панели инструментов в ваших скриптах вида.

Вместо этого создайте свой собственный помощник вида панели инструментов, внедрите зависимости через фабрику (включая частичный шаблон), и тогда вы можете просто echo $this->toolbar() в вашем сценарии просмотра макета.

Кроме того, вы можете взглянуть на Spiffy Navigation, если не сказать больше, просто на то, как реализован помощник вида. https://github.com/spiffyjr/spiffy-navigation

1

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

Других решений пока нет …

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