Zend Framework 2上多个模块的部分

时间:2014-02-20 10:34:54

标签: php zend-framework2

我有两个模块。一个是应用程序,另一个是管理员。在这两个模块中,我在以下结构中都有一个footer.phtml。

应用程序>视图>申请>局部 管理员>视图>管理员>部分

我还设置了部分文件夹的路径,如下面的module.config.php

对于应用程序模块

    'template_path_stack' => array(
    'app' => __DIR__ . '/../view',
    'appPartial' => __DIR__ . '/../view/application/partial',
    ),

和管理模块

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

但每当我使用partial('footer.phtml')?>在任何布局中,它总是从管理模块加载页脚。 我知道我可以使用partial('application / partial / footer.phtml')?>,但我想知道是否有办法只使用template_path_stack。

感谢您的帮助。 :)

2 个答案:

答案 0 :(得分:1)

您可以在两个模块中定义模板堆栈中的部分内容。请记住,密钥必须不同。然后使用密钥而不是文件名。与您的情况一样,您有appPartialpartial

您可以使用这些键加载部分。

<?php echo $this->partial('partial'); ?>

或者

<?php echo $this->partial('appPartial'); ?>

<强> UPADTE:

您可以在子目录中对布局进行分类。

layout/
   admin/
      layout.phtml
   login/
   partials/
   layout.phtml

如果您有共同的部分,则可以将其包含在所有布局中,而无需再次定义。您可以在layout.phtml

中使用已定义的密钥

<强>更新

这是我在同一模块中的不同控制器上实现不同布局的代码。可能你找到了有用的东西。

if ($controllerName == "Application\Controller\Index") {
     if (is_readable(__DIR__ . '/view/layout/layout.phtml')) {
            $controller->layout('layout/layout');
     }
} else if ($controllerName == "Application\Controller\Admin" && $statusCode != "404") {
     if (is_readable(__DIR__ . '/view/layout/admin/layout.phtml')) {
            $controller->layout('admin/layout');
     }
} else {
     if (is_readable(__DIR__ . '/view/layout/layout.phtml')) {
            $controller->layout('layout/layout');
     }
}

admin/layoutlayout/layout定义为

'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__ . '/../view/layout/layout.phtml',
            'layout/_top'           => __DIR__ . '/../view/layout/_top.phtml',
            'layout/_header_navigation'           => __DIR__ . /../view/layout/_header_navigation.phtml',
            'layout/_footer_navigation'           => __DIR__ . '/../view/layout/_footer_navigation.phtml',
            'layout/_footer'           => __DIR__ . '/../view/layout/_footer.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
            'admin/layout'             => __DIR__ . '/../view/layout/admin/layout.phtml',
            'admin/layout/login'             => __DIR__ . '/../view/layout/admin/login.phtml',
            'admin/layout/leftpanel' => __DIR__ . '/../view/layout/admin/_leftpanel.phtml',
            'admin/layout/headerpanel' => __DIR__ . '/../view/layout/admin/_headerpanel.phtml',
            'jstranslations' => __DIR__ . '/../view/layout/_jstranslations.phtml',
            'partial/_regional_searh_lists' => __DIR__ . '/../view/partials/_regional_search_lists.phtml',
            'partial/_paginator' => __DIR__ . '/../view/partials/_paginator.phtml',
            'email/deleted_user' => __DIR__ . '/../view/partials/_deleted_user_message_template.phtml',
            'email/deleting_user' => __DIR__ . '/../view/partials/_deleting_user_message_template.phtml',
            'email/delete_account' => __DIR__ . '/../view/partials/_delete_account.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),

module.config.php

答案 1 :(得分:0)

如果您只想使用path_stack,则需要两个不同的视图别名。否则,配置的最后一个将覆盖其他配置,因为这是你的情况。

您还可以使用模板地图,至少对于您的页脚等特定视图。另一个好处是模板地图的性能更高。