我是ZF 2的新手,只是尝试在模块的视图目录之外渲染通用布局。
目前,我有一个模块“类别”,在“Categories \ view \ generic \”中,我已经拆分了所有常见的布局元素(即标题(包含菜单等),页脚,头部(包含css / javascripts) )这样我就可以将它们用于其他模块。参见屏幕截图以便澄清:
不是一次又一次地为每个模块创建相同的布局(页眉,页脚,菜单),我想让所有模块都可以访问这些布局/视图。(例如,用户,类别模块应该具有相同的页脚,标题全部时间)。 我的问题是:
1-作为一种最佳实践,在我的情况下,我应该在哪里放置我的通用布局文件,使它们可以被项目中的所有模块访问?通常,通用布局不应该位于特定模块的视图目录中。
2 - 我需要对配置文件进行哪些更改以及使其有效?
我曾尝试使用Evan的EdpModuleLayout
(https://github.com/EvanDotPro/EdpModuleLayouts/)
并尝试了
“Set a generic layout for all modules in Zend framework 2”
但是不能成功。如果有人能在这方面指导我,我将不胜感激。 谢谢
答案 0 :(得分:1)
ZF2已经为所有模块提供了通用的共享布局。默认值为layout/layout.phtml
。
只需将此文件放在Application modules视图目录中,它就会被共享给所有模块。
来自所有已加载模块的所有视图脚本都可以在其他模块中使用,您只需要为视图模型提供模板路径:
$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,
)
)
);