/** * Renders a template fragment within a variable scope distinct from the * calling View object. * * If no arguments are passed, returns the helper instance. * * If the $model is an array, it is passed to the view object's assign() * method. * * If the $model is an object, it first checks to see if the object * implements a 'toArray' method; if so, it passes the result of that * method to to the view object's assign() method. Otherwise, the result of * get_object_vars() is passed. * * @param string $name Name of view script * @param array $model Variables to populate in the view * @return string|Partial * @throws Exception\RuntimeException */ public function __invoke($moduleName = null, $name = null, $model = null) { if (0 == func_num_args()) { return $this; } $view = $this->cloneView(); if (isset($this->partialCounter)) { $view->partialCounter = $this->partialCounter; } $module = $this->serviceLocator->getServiceLocator()->get('modulemanager')->getModule($moduleName); if (!$module) { return ''; } $object = new \ReflectionObject($module); $modulePath = dirname($object->getFileName()); if (!$modulePath) { return ''; } $modulePath .= DIRECTORY_SEPARATOR . 'view'; $resolver = new \Zend\View\Resolver\TemplatePathStack(); $resolver->addPaths(array($modulePath)); $view->setResolver($resolver); if (!empty($model)) { if (is_array($model)) { $view->vars()->assign($model); } elseif (is_object($model)) { if (null !== ($objectKey = $this->getObjectKey())) { $view->vars()->offsetSet($objectKey, $model); } elseif (method_exists($model, 'toArray')) { $view->vars()->assign($model->toArray()); } else { $view->vars()->assign(get_object_vars($model)); } } } return $view->render($name); }
<?php return array('service_manager' => array('factories' => array('MailHtmlGenerator' => function ($sm) { $config = $sm->get('Config'); $mail = new \EmailHtmlGenerator\Service\MailHtmlGenerator(); $transport = new \Zend\Mail\Transport\Sendmail(); $mail->setTransport($transport); $viewRenderer = new \Zend\View\Renderer\PhpRenderer(); $resolver = new \Zend\View\Resolver\AggregateResolver(); $viewRenderer->setResolver($resolver); $viewsMap = new \Zend\View\Resolver\TemplatePathStack(); $viewsMap->addPaths($config['view_manager']['template_path_stack']); $resolver->attach($viewsMap); $mail->setViewRenderer($viewRenderer); return $mail; })));
/** * 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); }