Частичный доступ в Module.php

0

У меня есть два модуля.

  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 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, оцениваются.

Благодарю.

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

  • 0
    Почему бы вам не создать класс и не определить его как член, чтобы вы могли использовать его повторно?
  • 0
    И как это поможет в моем сценарии? я думал, что заполнитель хорошо подходит для того, что я хочу сделать, я не уверен, как этого можно достичь с помощью независимого класса.
Показать ещё 2 комментария
Теги:
zend-framework2
partials

1 ответ

1
Лучший ответ

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

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

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

  • 0
    Я не уверен, как реализация помощника вида будет мне в моем сценарии, спасибо за ваш ответ :)
  • 0
    Это помогло бы, потому что тогда вы можете содержать всю свою логику сборки в этом классе и вставлять свои зависимости. Прямо сейчас вам нужно поместить логику в скрипт вида, потому что вы ограничиваете себя помощником частичного представления. Если вместо этого вы создадите свой собственный помощник вида, вы можете позволить шаблонам быть шаблонами, и помощник вида сделает помощь :-)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню