我有两个模块。一个是应用程序,另一个是管理员。在这两个模块中,我在以下结构中都有一个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。
感谢您的帮助。 :)
答案 0 :(得分:1)
您可以在两个模块中定义模板堆栈中的部分内容。请记住,密钥必须不同。然后使用密钥而不是文件名。与您的情况一样,您有appPartial
和partial
。
您可以使用这些键加载部分。
<?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/layout
和layout/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,则需要两个不同的视图别名。否则,配置的最后一个将覆盖其他配置,因为这是你的情况。
您还可以使用模板地图,至少对于您的页脚等特定视图。另一个好处是模板地图的性能更高。