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 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('url', Request::$urlfirst); 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(); // авторизация - везде $this->pageSettings['modules'][] = array( 'users' => array( 'roles' => array( '' => '', ), 'action' => 'show', 'mode' => 'auth', 'params' => array( ), ), ); if (isset($this->pageSettings['modules']) && is_array($this->pageSettings['modules'])) { foreach ($this->pageSettings['modules'] as $fid => $module) { foreach ($module as $moduleName => $additionalSettings) { if (!isset($additionalSettings['roles'][$role])) $this->processModule($moduleName, $additionalSettings); } } } $this->appendCss(); // 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; } }