Пример #1
0
 /**
  * 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'])) {
         $mapResolver = new \Zend\View\Resolver\TemplateMapResolver($config['template_map']);
         $themeResolver->attach($mapResolver);
     }
     if (isset($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;
 }
Пример #2
0
 /**
  * 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);
 }