Как установить различные макеты для разных модулей в Zend Framework 3 вместо одного шаблона макета по всему сайту?Как установить различные макеты для разных модулей в Zend Framework 3
ответ
Вы можете переключаться между раскладками для действий конкретного контроллера, используя следующий код:
// A controller's action method that uses an alternative
// layout template.
public function indexAction()
{
//...
// Use the Layout plugin to access the ViewModel
// object associated with layout template.
$this->layout()->setTemplate('layout/layout2');
//...
}
В дополнение к плагину
Layout
контроллера, естьLayout
вид помощник, который обеспечивает те же возможности. В случае с макетом , вы можете, например, выбрать расположение коммутатора со статической страницы , которая не имеет определенного действия контроллера.
Настройка макета для всех действий контроллера
Если все методы действия одного класса контроллера должны использовать один и тот же альтернативный макет, вы можете переопределить onDispatch()
метод AbstractActionController
класса и вызвать setTemplate()
Способ есть, как показано в примере ниже:
// Add this alias in the beginning of the controller file
use Zend\Mvc\MvcEvent;
// ...
class IndexController extends AbstractActionController
{
/**
* We override the parent class' onDispatch() method to
* set an alternative layout for all actions in this controller.
*/
public function onDispatch(MvcEvent $e)
{
// Call the base class' onDispatch() first and grab the response
$response = parent::onDispatch($e);
// Set alternative layout
$this->layout()->setTemplate('layout/layout2');
// Return the response
return $response;
}
}
> Вы можете изменить макет на основе текущего модуля. Для этого требуется (а) определить, соответствует ли контроллер, соответствующий маршруту , этому модулю, а затем (б) изменить шаблон модели просмотра.
Место проведения этих действий находится в слушателе. Он должен прослушать либо на событие «маршрут» при низком (отрицательном) приоритете, либо на событие «отправка» в любом приоритете. Как правило, вы регистрируете этот во время события начальной загрузки.
namespace Content;
class Module
{
/**
* @param \Zend\Mvc\MvcEvent $e The MvcEvent instance
* @return void
*/
public function onBootstrap($e)
{
// Register a dispatch event
$app = $e->getParam('application');
$app->getEventManager()->attach('dispatch', array($this, 'setLayout'));
}
/**
* @param \Zend\Mvc\MvcEvent $e The MvcEvent instance
* @return void
*/
public function setLayout($e)
{
$matches = $e->getRouteMatch();
$controller = $matches->getParam('controller');
if (false === strpos($controller, __NAMESPACE__)) {
// not a controller from this module
return;
}
// Set the layout template
$viewModel = $e->getViewModel();
$viewModel->setTemplate('content/layout');
}
}
Руководство говорит выше, но если вы хотите использовать эти символы, вам необходимо:
// module/Content/config/module.config.php
return [
/* whatever else */
'view_manager' => [
'template_map' => [
'content/layout' => __DIR__ . '/../view/layout/layout.phtml'
]
]
];
Вскоре, когда все модули инициализированы (bootstrap) успешно, Zend автоматически вызовет onBootstrap()
, которые связывают событие «dispatch» с методом setLayout()
, где имя контроллера сопоставляется с пространством имен текущего модуля, а если успех, используйте setTemplate()
для установки макета шаблон.
например.(! Успех)
Module/Namespace: Content,
Controller: Content\Controller\MatchMeController,
Controller: Other\Controller\DontMatchMeController,
(обязательно!)
Но есть маленький недостаток: setLayout()
использование
strpos(controller, __NAMESPACE__) === false
для определения текущего модуля, но что, если бы у меня был ContentController
в каком-то другом модуле? Так что используйте
strpos(controller, __NAMESPACE__) !== 0
вместо этого.
----------
Пособие довольно подробно, он также упоминает много других вещей, как набор различных макетов для различных контроллеров (или действия).
- 1. Установить различные макеты для разных модулей в Zend Framework 2?
- 2. Как использовать различную загрузку для разных модулей в zend framework
- 3. Как установить различные шаблоны шаблонов для разных модулей в Symfony
- 4. Различные меню для разных модулей
- 5. Макеты в Zend Framework 1
- 6. Как автозагрузка моделей модулей Zend Framework?
- 7. Как установить различные макеты для разных ориентаций во фрагменте
- 8. Как установить различные макеты в Croogo
- 9. Различные макеты для разных групп ExpandableListView
- 10. Как установить макет для каждого из разных модулей в Zend Framework 2.2
- 11. Различные макеты для разных групп в расширяемом ListView
- 12. Zend Framework: несколько модулей в макете
- 13. Различные макеты в разных разделах представления таблиц
- 14. Zend такой же шаблон для разных модулей
- 15. Как настроить несколько макетов в Zend Framework. Например. Публикация/Вход/Различные комбинации модулей
- 16. Использование модулей с Zend Framework
- 17. Используйте различные параметры конфигурации для разных модулей
- 18. Как установить различные макеты для разных фрагментов, встроенных в представление вкладки в android
- 19. Zend Framework 2 несколько модулей
- 20. Zend Framework: Автоматическая загрузка модулей
- 21. Различные макеты в viewpager
- 22. Recyclerview 2 Различные макеты
- 23. Установка Zend Framework 3
- 24. Как использовать различные в Zend Framework 2?
- 25. Как добавить несколько каталогов модулей в Zend Framework?
- 26. Различные схемы URL для Zend Framework
- 27. Варианты использования модулей в Zend Framework
- 28. log4j2 - Различные макеты для разных уровней в одном приложении
- 29. Как использовать представления/макеты в разных модулях
- 30. Zend Framework: Загрузка модулей из другого каталога
Ответ тот же, что и в ZF2 ... https://github.com/EvanDotPro/EdpModuleLayouts проверяет Module.php – tasmaniski