在ZF2中设置特定的布局文件

时间:2012-11-26 12:13:24

标签: php zend-framework2

我希望构建我的ZF2源以按模块层次结构获取特定布局

然后,如果模板文件存在,我想将其映射到当前模块

例如:

  • templates / album / profile / list.phtml:Module“Album”=>控制器“Profile”=>行动“清单”
  • templates / album / album.phtml:适用于所有“相册”模块
  • templates / layout / layout.phtml:另一个模块的默认模板

======================================

我在ZF2 Skeleton Apps中得到了这个

'view_manager' => array (
            'display_not_found_reason' => true,
            'display_exceptions' => true,
            'doctype' => 'HTML5',
            'not_found_template' => 'error/404',
            'exception_template' => 'error/index',
            'template_map' => array (
                    'layout/layout' => __DIR__ . '/../../../template/layout/layout.phtml',
                    'layout/custom' => __DIR__ . '/../../../template/layout/custom.phtml',
                    'error/404' => __DIR__ . '/../../../template/error/404.phtml',
                    'error/index' => __DIR__ . '/../../../template/error/index.phtml' 
            ),
            'template_path_stack' => array (
                    __DIR__ . '/../view' 
            ) 
    )

我可以通过这种方式设置自定义布局

$e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
        $controller = $e->getTarget();
        $controller->layout('layout/custom');
}

但我必须手动定义'template_map'。有没有办法设置当前控制器特定的模板文件?我想要这样的东西

//Set template
$template = 'layout/layout';
if (file_exists($templatePath . $currAction.'.phtml')) {
    $template = $currAction;
}else if(file_exists($templatePath . $currController.'.phtml')) {
    $template = $currController;
}else if(file_exists($templatePath . $currModule.'.phtml')) {
    $template = $currModule;
}else{
    //return default template
}

$controller->layout($template);

由于

=====

2012年11月27日更新:

我找到了一些简单的方法来映射布局键:

在module.config.php中只添加一个添加路径

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

然后我可以使用模板层次结构系统。但仅适用于模块和控制器级别。我的问题是布局和“动作视图”冲突

  • /template/album.phtml =>工作得很好。将所有“相册”模块应用到模板
  • /template/album/profile.phtml =>工作得很好。将所有“相册/个人资料”控制器
  • 应用到模板
  • /template/album/profile/detail.phtml =>这与“modules / album / view / album / profile / detail.phtml”相冲突。然后通过设置布局文件查看错误视图

0 个答案:

没有答案