У меня есть 2 модуля, и мне нужно использовать разные макеты для каждого, но все модули всегда используют макет второго загруженного модуля.
application.config.php :
return array(
// This should be an array of module namespaces used in the application.
'modules' => array(
'news',//in this module use Application layout
'Application',
),
Вы могли бы использовать EdpModuleLayouts. Это модуль ZF2, который позволяет настраивать разную компоновку для каждого модуля. Его использование очень просто:
включить EdpModuleLayouts
модуль в application.config.php
файл :
'modules' => array(
'EdpModuleLayouts', //<---add this line
'News',
'Application',
),
Определите макет для каждого модуля в вашем module.config.php
файл одного из двух модулей, например в модуле приложения. Здесь мы устанавливаем два макета: news/layout
за Новости Модуль и layout/layout
за заявка модуль:
'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'XHTML1_TRANSITIONAL',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array(
'news/layout' => __DIR__ . '/../../News/view/layout/admin-layout.phtml',
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
'template_path_stack' => array(
'application' => __DIR__ . '/../view',
'news' => __DIR__ . '/../../News/view',
),
),
'module_layouts' => array(
'Application' => 'layout/layout',
'News' => 'news/layout',
),
Установить в вашем {MyNewModule}/Module.php
,
namespace {MyNewModule};
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Mvc\ModuleRouteListener;
use Zend\ModuleManager\ModuleManager;
use Zend\Mvc\MvcEvent;
Создать новый метод Init.
public function init(ModuleManager $manager){
$events = $manager->getEventManager();
$sharedEvents = $events->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
$controller = $e->getTarget();
$controller->layout('layout/***customFile.phtm***');
}, 100);
}
F5, перезарядите свой браузер.
У меня тоже был такой же случай, и я решил его так:
Имел модуль login
а также application
что я сделал, чтобы определить макеты в global.php
как это:
return array(
'module_layouts' => array(
'Application' => 'layout/layout.phtml',
'Login' => 'layout/login.phtml'
),
);
Теперь вы должны создать папку в логине макета представления, где бы login.phtml
Теперь в конфигурации модуля входа в систему. Module.config.php
'view_manager' => array(
'template_path_stack' => array(
'Login' => __DIR__ . '/../view',
),
)
;
Это должно запустить вас.