【问题标题】:Zend framework 2: Nested view with template from other moduleZend 框架 2:带有来自其他模块的模板的嵌套视图
【发布时间】:2015-11-06 17:20:32
【问题描述】:

如何从 Zend Framework 2 的其他模块设置模板?我有两个模块:
- 模块“A”(这是我的主题)
- 模块“B”(它是一种插件/小部件)

我想在模块“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() 函数呢?或者也许有其他功能/方式来设置它?
感谢您的帮助

【问题讨论】:

  • 我现在也遇到了同样的问题 - 到目前为止你有没有找到任何好的解决方案?如果你能把它分享给我们,将不胜感激。

标签: zend-framework2 zend-view


【解决方案1】:

也许你需要将你的布局重新映射到你想要的,在你的模块配置上尝试这样的事情:

'view_manager' => array(

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

    'template_map' => array(
        'B/content/article'           => __DIR__ . '/../../MODULE_B/view/article/article.phtml',
    ),
),

【讨论】:

  • 这种方式可行,但我需要更灵活的方式。 'B' => DIR 之类的东西。 '/../../MODULE_B/view/.所以我可以这样做:$view->setTemplate('B/module/content/article')。我在做类似插件的事情,所以我不想编辑我的核心模块(“A”)并手动添加每个视图。不过还是谢谢。
【解决方案2】:

我遇到了类似的问题 - 创建了我自己的模块,并希望在不修改主模块配置的情况下从该模块呈现模板。

看来这个教程会回答你的问题:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多