/** * Initialize the theme by selecting a theme using the adapters and updating the view resolver */ public function init() { //if already initialized then return if ($this->currentTheme) { return true; } //find the current theme that should be used $theme = $this->selectCurrentTheme(); if (!$theme) { return false; } //get theme configuration $config = $this->getThemeConfig($theme); if (!$config) { return false; } $viewResolver = $this->serviceManager->get('ViewResolver'); $themeResolver = new \Zend\View\Resolver\AggregateResolver(); if (isset($config['template_map'])) { $viewResolverMap = $this->serviceManager->get('ViewTemplateMapResolver'); $viewResolverMap->add($config['template_map']); $mapResolver = new \Zend\View\Resolver\TemplateMapResolver($config['template_map']); $themeResolver->attach($mapResolver); } if (isset($config['template_path_stack'])) { $viewResolverPathStack = $this->serviceManager->get('ViewTemplatePathStack'); $viewResolverPathStack->addPaths($config['template_path_stack']); $pathResolver = new \Zend\View\Resolver\TemplatePathStack(array('script_paths' => $config['template_path_stack'])); $defaultPathStack = $this->serviceManager->get('ViewTemplatePathStack'); $pathResolver->setDefaultSuffix($defaultPathStack->getDefaultSuffix()); $themeResolver->attach($pathResolver); } $viewResolver->attach($themeResolver, 100); return true; }
/** * Set the Layout based on themes-scheme */ public function setLayout(MvcEvent $e) { $app = $e->getParam('application'); $sm = $app->getServiceManager(); $config = $sm->get('dxapp_module_options'); $mobileDetect = $sm->get('dxMobileDetect'); $viewModel = $e->getViewModel(); $template = 'layout/layout'; //$viewModel->getTemplate(); $frontendThemex = $config->getFrontendTheme(); $templateMaps = $config->getTemplateMaps(); $frontendThemes = $config->getFrontendThemes(); //array('dxdefault'); $viewResolver = $sm->get('ViewResolver'); $viewThemeResolver = new \Zend\View\Resolver\AggregateResolver(); $templateMapResolver = new \Zend\View\Resolver\TemplateMapResolver(); $pathResolver = new \Zend\View\Resolver\TemplatePathStack(); $asseticConfiguration = array(); if (!in_array($frontendThemex, $frontendThemes)) { $frontendThemes[] = $frontendThemex; } foreach ($frontendThemes as $frontendTheme) { if (isset($templateMaps['front'][$frontendTheme]['view_manager']['template_map'])) { $templateMapResolver->add($templateMaps['front'][$frontendTheme]['view_manager']['template_map']); } if (isset($templateMaps['front'][$frontendTheme]['view_manager']['template_path_stack'])) { $pathResolver->addPaths($templateMaps['front'][$frontendTheme]['view_manager']['template_path_stack']); $defaultPathStack = $sm->get('ViewTemplatePathStack'); $pathResolver->setDefaultSuffix($defaultPathStack->getDefaultSuffix()); $viewThemeResolver->attach($pathResolver); } if (isset($templateMaps['front'][$frontendTheme]['assetic_configuration'])) { $asseticConfiguration = \Dxapp\Utility\ArrayManager::merge($asseticConfiguration, $templateMaps['front'][$frontendTheme]['assetic_configuration']); } } $viewThemeResolver->attach($templateMapResolver); $viewResolver->attach($viewThemeResolver, 100); if (!empty($asseticConfiguration)) { $as = $sm->get('dxThemeAssets'); $response = $e->getResponse(); if (!$response) { $response = new Response(); $e->setResponse($response); } $router = $e->getRouteMatch(); $as->setThemeAssets($asseticConfiguration); if ($router) { $as->setRouteName($router->getMatchedRouteName()); $as->setControllerName($router->getParam('controller')); $as->setActionName($router->getParam('action')); } $as->renderThemeAssets(); $as->initLoadedModules($this->getLoadedModules()); $as->setupRenderer($sm->get('ViewRenderer')); } $section = $config->getApplicationSection(); if ($section == 'admin') { if (FALSE === strpos($template, 'admin-')) { $template = str_replace('/', '/admin-', $template); } } $viewModel->setTemplate($template); }