Расположение на модуль zf2
У меня есть 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',
),
3 ответа
Вы можете использовать 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', ),
У меня тоже был такой же случай, и я решил его так:
Имел модуль 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',
),
)
;
Это должно запустить вас.
Установить в вашем
{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, перезарядите свой браузер.
- Улыбнись:D