0

我是 ZF 2 的新手,只是试图在模块的视图目录之外呈现通用布局。

目前,我有一个模块“类别”,在“类别\视图\通用\”中,我已经拆分了所有常见的布局元素(即页眉(包含菜单等)、页脚、头部(包含 css/javascripts)),以便我可以将它们用于其他模块。请参阅屏幕截图以进行澄清: 在此处输入图像描述

而不是一次又一次地为每个模块创建相同的布局(页眉,页脚,菜单),我想让所有模块都可以访问这些布局/视图。(例如,用户,类别模块应该始终具有相同的页脚,页眉) . 我的问题是:

1- 作为最佳实践,在我的情况下,我应该将通用布局文件放在哪里,以使项目中的所有模块都可以访问它们?通常,通用布局不应驻留在特定模块的视图目录中。

2-我需要对配置文件进行哪些更改以使其正常工作?

我试过玩 Evan 的 EdpModuleLayout

( https://github.com/EvanDotPro/EdpModuleLayouts/ )

也试过

"为 Zend 框架 2 中的所有模块设置通用布局"

但无法成功。如果有人能在这方面指导我,我将不胜感激。谢谢

4

1 回答 1

1

ZF2 已经为所有模块提供了通用共享布局。默认为layout/layout.phtml. 只需将此文件放在应用程序模块视图目录中,它将为所有模块共享。

所有加载模块的所有视图脚本都可以在其他模块中使用,您只需要为视图模型提供模板路径:

$viewModel->setTemplate('application/index/index');

这些是默认值:

$viewModel->setTemplate('[module namespace]/[controller]/[action]');

但是当您手动提供模板路径时,它们可以是注册视图目录中的任何内容。

您还可以在视图管理器配置中更改默认布局文件路径:

    'view_manager' => array(
        'display_not_found_reason' => true,
        'doctype' => 'HTML5',
        'not_found_template' => 'error/404',
        'exception_template' => 'error/index',
//        'layout' => 'layout/layout.phtml',//<----------------------------
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
        'strategies' => array(
            'ViewJsonStrategy',
        ),
    ),

或在控制器本身:

 $this->layout('layout/layout.phtml');

或者在某个事件中,如果您需要它是动态的。

为您查看需要更改/或添加到视图管理器配置中的文件定义另一个目录

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

或者如果你需要它是动态的:

$templatePathResolver = $this->getServiceLocator()->get('Zend\View\Resolver\TemplatePathStack');
    $templatePathResolver->setOptions(
        array(
            'script_paths' => array(
                $client_theme_path,
            )
        )
    );
于 2014-11-05T13:05:50.497 回答