public function process() { global $current_user; /* @var $current_user CurrentUser */ XMLClass::$pageNode = XMLClass::createNodeFromObject($this->pageSettings, false, 'page', false); XMLClass::appendNode(XMLClass::$pageNode, $this->pageName); XMLClass::$pageNode->setAttribute('current_url', Request::$url); XMLClass::$pageNode->setAttribute('page_url', Config::need('www_path') . '/' . Request::$pageName . '/'); XMLClass::$pageNode->setAttribute('prefix', Config::need('www_path') . '/'); if ($current_user->authorized) { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject($current_user->getXMLInfo(), false, 'current_user', false); } else { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject(array(), false, 'current_user', false); } XMLClass::$pageNode->appendChild(XMLClass::$CurrentUserNode); // втыкаем модули страницы $role = $current_user->getRole(); if (isset($this->pageSettings['modules']) && is_array($this->pageSettings['modules'])) { foreach ($this->pageSettings['modules'] as $moduleName => $additionalSettings) { if (isset($additionalSettings['roles'][$role])) { $this->processModule($moduleName, $additionalSettings); } } } // xml дерево создано, теперь генерируем xslt шаблон // выдаем html //Request::$responseType = 'xml'; switch (Request::$responseType) { case 'xml': case 'xmlc': return XMLClass::dumpToBrowser(); break; case 'xsl': case 'xslc': $xslTemplateClass = new XSLClass($this->pageSettings['xslt']); $xslTemplateClass->setTemplates($this->xsltFiles); return $xslTemplateClass->dumpToBrowser(); break; case 'html': $xslTemplateClass = new XSLClass($this->pageSettings['xslt']); $xslTemplateClass->setTemplates($this->xsltFiles); $html = $xslTemplateClass->getHTML(XMLClass::$xml); if ($xslTemplateClass->fetched_from_cache) { // чтобы знать, что файл из кеша Log::logHtml('xslt template GOT from cache'); } if ($xslTemplateClass->puted_into_cache) { // чтобы знать, что файл из кеша Log::logHtml('xslt template PUT to cache'); } return $html; break; default: return XMLClass::dumpToBrowser(); break; } }
public function process() { global $current_user; /* @var $current_user CurrentUser */ if ($pid = Request::get('pid')) { Statistics::setPartnerCookie($pid); } XMLClass::$pageNode = XMLClass::createNodeFromObject(array(), false, 'page', false); XMLClass::appendNode(XMLClass::$pageNode, ''); XMLClass::$accessNode = XMLClass::createNodeFromObject(AccessRules::getRules(), false, 'access', true); XMLClass::appendNode(XMLClass::$accessNode, ''); XMLClass::$pageNode->setAttribute('current_url', Request::$url); if ($mn = $this->getMessageNode()) { XMLClass::$pageNode->appendChild($mn); } XMLClass::$pageNode->setAttribute('prefix', Config::need('www_path') . '/'); XMLClass::$varNode = XMLClass::$xml->createElement('variables'); foreach (Request::$get_normal as $f => $v) { if (is_numeric($f)) { // cachebreaker? XMLClass::$varNode->setAttribute('n' . $f, $f); } else { XMLClass::$varNode->setAttribute($f, $v); } } XMLClass::$pageNode->appendChild(XMLClass::$varNode); XMLClass::$rootNode->appendChild(XMLClass::$xml->importNode(StructureParser::toXML(), 1)); if ($current_user->authorized) { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject($current_user->getXMLInfo(), false, 'current_user', true); } else { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject(array(), false, 'current_user', false); } XMLClass::$pageNode->appendChild(XMLClass::$CurrentUserNode); // втыкаем модули страницы $role = $current_user->getRole(); foreach ($this->modules as $module) { $this->processModule($module['name'], $module); } if ($pageTitle = StructureParser::getTitle()) { $this->buildPageTitle($pageTitle); } switch (Request::$responseType) { case 'xml': case 'xmlc': return XMLClass::dumpToBrowser(); break; case 'xsl': case 'xslc': $xslTemplateClass = new XSLClass($this->xsltFileName); return $xslTemplateClass->dumpToBrowser(); break; case 'html': $xslTemplateClass = new XSLClass($this->xsltFileName); $html = $xslTemplateClass->getHTML(XMLClass::$xml); return $html; break; default: return XMLClass::dumpToBrowser(); break; } }
public function getResultXML() { if ($this->xmlPart !== false) { return $this->xmlPart; } $this->xmlPart = XMLClass::createNodeFromObject(array('data' => $this->data, 'settings' => $this->settings), false, 'module'); if ($this->xHTMLCachingEnabled) { Log::timingplus('BaseModule:xHTML generating #' . $this->moduleName); // процессим кусок XML с шаблоном, чтобы получить xHTML // шаблон, который отпроцессит только наш модуль - null.xsl $XSLClass = new XSLClass(LibPages::$pages[Request::$pageName]['xslt'], $xHTML = true); $arr = array($this->moduleName => $this->getXSLTFileName(true)); // и шаблон модуля $XSLClass->setTemplates($arr); // создаем документ $xml = new DOMDocument('1.0', 'UTF-8'); $xml->loadXML("<xml version=\"1.0\" encoding=\"utf-8\" >" . "<root></root></xml>"); $rootNode = $xml->getElementsByTagName("root")->item(0); // нода page также нужна для корректной обработки шаблонаы $pageNode = $xml->importNode(XMLClass::$pageNode); $rootNode->appendChild($pageNode); // вставляем в него ноду с данными модуля $xHTMLnode = $xml->importNode($this->xmlPart, true); $rootNode->appendChild($xHTMLnode); $xHTMLnode->setAttribute('name', $this->moduleName); // теперь полученный xml процессим с шаблоном $xHTML = $XSLClass->getHTML($xml); // полученный xHTML нужно вбить в XML ноду "module" $xHTMLdoc = new DOMDocument('1.0', 'UTF-8'); $xHTMLdoc->loadHTML($xHTML); $xpath = new DOMXPath($xHTMLdoc); $part = $xpath->query('body')->item(0); $part = $xHTMLdoc->importNode($part, true); // в part лежит HTML код // копируем его в новую ноду $NewElement = XMLClass::$xml->createElement('module'); // Clone the attributes: foreach ($part->attributes as $attribute) { $NewElement->setAttribute($attribute->name, $attribute->value); } foreach ($part->childNodes as $child) { $NewElement->appendChild(XMLClass::$xml->importNode($child, true)); } $this->xmlPart = $NewElement; Log::timingplus('BaseModule:xHTML generating #' . $this->moduleName); } $this->putInCache(); return $this->xmlPart; }
public function getResultXML() { if ($this->xmlPart !== false) { return $this->xmlPart; } $this->xmlPart = XMLClass::createNodeFromObject($this->data, false, 'module'); $this->putInCache(); return $this->xmlPart; }