Zend framework 2: вложенное представление с шаблоном из другого модуля

Как установить шаблон из другого модуля в Zend Framework 2? У меня есть два модуля:
- модуль "A" (это моя основная тема)
- модуль "B" (это своего рода плагин/виджет)

Я хотел бы в модуле «А» установить шаблон модуля «Б».
Я пробовал:

public function viewAction()
{
    // This is action of controller from module A

    $view = new ViewModel();

    $widget = new ViewModel(array('article' => $article));
    $widget->setTemplate('B/content/article'); // <-- Doens't work

    $view->addChild($articleView, 'article');

    return $view;
}

Но этот пример не работает. Итак, как я могу передать идентификатор другого модуля в функцию setTemplate()? Или, может быть, есть другая функция/способ ее установки?
Спасибо за любую помощь.


person user1409508    schedule 07.05.2014    source источник
comment
У меня сейчас такая же проблема - вы нашли какое-нибудь хорошее решение до сих пор? был бы признателен, если бы вы могли поделиться им с нами тогда.   -  person eXe    schedule 06.11.2015


Ответы (2)


Возможно, вам нужно переназначить макет на то, что вы хотите, попробуйте что-то вроде этого в конфигурации вашего модуля:

'view_manager' => array(

    'template_path_stack' => array(
        'MODULE_A' => __DIR__ . '/../view',
    ),

    'template_map' => array(
        'B/content/article'           => __DIR__ . '/../../MODULE_B/view/article/article.phtml',
    ),
),
person Fiambre    schedule 07.05.2014
comment
Таким образом, это работает, но мне нужен более гибкий способ. Что-то вроде 'B' =› DIR . '/../../MODULE_B/представление/. Так что я мог бы сделать: $view-›setTemplate('B/module/content/article'). Я делаю что-то вроде плагинов, поэтому я не хочу редактировать свой основной модуль (A) и добавлять каждое представление вручную. Но все равно спасибо. - person user1409508; 07.05.2014

У меня была аналогичная проблема - создал свой модуль и хотел рендерить шаблоны из этого модуля без изменения конфигов основного модуля.

Кажется, этот учебник ответит на ваш вопрос:

http://framework.zend.com/manual/current/en/modules/zend.view.renderer.php-renderer.html

пример кода:

    $oRenderer = new \Zend\View\Renderer\PhpRenderer();
    $oResolver = new \Zend\View\Resolver\AggregateResolver();
    $oRenderer->setResolver($oResolver);

    $oResolverMap = new \Zend\View\Resolver\TemplateMapResolver(array(
        'yourtemplate' => __DIR__ . '/view/yourtemplate.phtml',
    ));

    $oResolverPath = new \Zend\View\Resolver\TemplatePathStack(array(
        'script_paths' => array(
            __DIR__ . '/view',
        ),
    ));

    $oResolver->attach($oResolverMap);
    $oResolver->attach($oResolverPath);
    $oResolver->attach(new \Zend\View\Resolver\RelativeFallbackResolver($oResolverMap));
    $oResolver->attach(new \Zend\View\Resolver\RelativeFallbackResolver($oResolverPath));

    $oView = new \Zend\View\Model\ViewModel();
    $oView->setTemplate('yourtemplate');
    $sRenderedTemplateSource = $oRenderer->render($oView);
person eXe    schedule 06.11.2015