Example #1
0
 /**
  * Preview a layout with module.
  * 
  * @return Object
  */
 public function dispLayoutPreviewWithModule()
 {
     $content = '';
     $layoutSrl = Context::get('layout_srl');
     $module = Context::get('module_name');
     $mid = Context::get('target_mid');
     $skin = Context::get('skin');
     $skinType = Context::get('skin_type');
     try {
         // admin check
         // this act is admin view but in normal view because do not load admin css/js files
         $logged_info = Context::get('logged_info');
         if ($logged_info->is_admin != 'Y') {
             throw new Exception(Context::getLang('msg_invalid_request'));
         }
         // if module is 'ARTiCLE' and from site design setting, make content directly
         if ($module == 'ARTICLE' && !$mid) {
             $oDocumentModel = getModel('document');
             $oDocument = $oDocumentModel->getDocument(0, true);
             $t = Context::getLang('article_preview_title');
             $c = '';
             for ($i = 0; $i < 4; $i++) {
                 $c .= '<p>';
                 for ($j = 0; $j < 20; $j++) {
                     $c .= Context::getLang('article_preview_content') . ' ';
                 }
                 $c .= '</p>';
             }
             $attr = new stdClass();
             $attr->title = $t;
             $attr->content = $c;
             $attr->document_srl = -1;
             $oDocument->setAttribute($attr, FALSE);
             Context::set('oDocument', $oDocument);
             if ($skinType == 'M') {
                 $templatePath = _XE_PATH_ . 'modules/page/m.skins/' . $skin;
                 $templateFile = 'mobile';
             } else {
                 $templatePath = _XE_PATH_ . 'modules/page/skins/' . $skin;
                 $templateFile = 'content';
             }
             $oTemplate = TemplateHandler::getInstance();
             $content = $oTemplate->compile($templatePath, $templateFile);
         } else {
             $content = $this->procRealModule($module, $mid, $skin, $skinType);
         }
         Context::set('content', $content);
         // find layout
         if ($layoutSrl) {
             if ($layoutSrl == -1) {
                 $site_srl = $oModule ? $oModule->module_info->site_srl : 0;
                 $designInfoFile = sprintf(_XE_PATH_ . 'files/site_design/design_%s.php', $site_srl);
                 include $designInfoFile;
                 if ($skinType == 'M') {
                     $layoutSrl = $designInfo->mlayout_srl;
                 } else {
                     $layoutSrl = $designInfo->layout_srl;
                 }
             }
             $oLayoutModel = getModel('layout');
             $layoutInfo = $oLayoutModel->getLayout($layoutSrl);
             // If there is no layout, pass it.
             if ($layoutInfo) {
                 // Adhoc...
                 // Input extra_vars into $layout_info
                 if ($layoutInfo->extra_var_count) {
                     foreach ($layoutInfo->extra_var as $var_id => $val) {
                         if ($val->type == 'image') {
                             if (strncmp('./files/attach/images/', $val->value, 22) === 0) {
                                 $val->value = Context::getRequestUri() . substr($val->value, 2);
                             }
                         }
                         $layoutInfo->{$var_id} = $val->value;
                     }
                 }
                 // Set menus into context
                 if ($layoutInfo->menu_count) {
                     foreach ($layoutInfo->menu as $menu_id => $menu) {
                         // set default menu set(included home menu)
                         if (!$menu->menu_srl || $menu->menu_srl == -1) {
                             $oMenuAdminController = getAdminController('menu');
                             $homeMenuCacheFile = $oMenuAdminController->getHomeMenuCacheFile();
                             if (file_exists($homeMenuCacheFile)) {
                                 include $homeMenuCacheFile;
                             }
                             if (!$menu->menu_srl) {
                                 $menu->xml_file = str_replace('.xml.php', $homeMenuSrl . '.xml.php', $menu->xml_file);
                                 $menu->php_file = str_replace('.php', $homeMenuSrl . '.php', $menu->php_file);
                                 $layoutInfo->menu->{$menu_id}->menu_srl = $homeMenuSrl;
                             } else {
                                 $menu->xml_file = str_replace($menu->menu_srl, $homeMenuSrl, $menu->xml_file);
                                 $menu->php_file = str_replace($menu->menu_srl, $homeMenuSrl, $menu->php_file);
                             }
                         }
                         $menu->php_file = FileHandler::getRealPath($menu->php_file);
                         if (FileHandler::exists($menu->php_file)) {
                             include $menu->php_file;
                         }
                         Context::set($menu_id, $menu);
                     }
                 }
                 Context::set('layout_info', $layoutInfo);
             }
         }
     } catch (Exception $e) {
         $content = '<div class="message error"><p id="preview_error">' . $e->getMessage() . '</p></div>';
         Context::set('content', $content);
         $layoutSrl = 0;
     }
     // Compile
     $oTemplate = TemplateHandler::getInstance();
     Context::clearHtmlHeader();
     if ($layoutInfo) {
         $layout_path = $layoutInfo->path;
         $editLayoutTPL = $this->getRealLayoutFile($layoutSrl);
         $editLayoutCSS = $this->getRealLayoutCSS($layoutSrl);
         if ($editLayoutCSS != '') {
             Context::addCSSFile($editLayoutCSS);
         }
         $layout_file = 'layout';
         $oModuleModel = getModel('module');
         $part_config = $oModuleModel->getModulePartConfig('layout', $layoutSrl);
         Context::addHtmlHeader($part_config->header_script);
     } else {
         $layout_path = './common/tpl';
         $layout_file = 'default_layout';
     }
     $layout_tpl = $oTemplate->compile($layout_path, $layout_file, $editLayoutTPL);
     Context::set('layout', 'none');
     // Convert widgets and others
     $oContext = Context::getInstance();
     Context::set('layout_tpl', $layout_tpl);
     $this->setTemplatePath($this->module_path . 'tpl');
     $this->setTemplateFile('layout_preview');
 }