Source for file Document.class.php
Documentation is available at Document.class.php
* @copyright Energine 2006
* Зарезервированный сегмент URL для single-режима
* Путь к директории с конфигурационными шаблонами
* @var int идентификатор документа
* @var int идентификатор языка документа
* @var Language информация о языках системы
* @var Sitemap карта сайта
* @var ComponentManager менеджер компонентов
* @var DOMDocument результирующий DOM-документ
* @var int права пользователя на документ
* @var array свойства документа
* @var AuthUser экземпляр класса AuthUser
* @var array информация о документе
* @see Sitemap::getDocumentInfo()
* Перечень компонентов layout'а
* Перечень компонентов content'а
* Массив констант для перевода
// получаем идентификатор документа
if (isset ($segments[0]) && $segments[0] == self::SINGLE_SEGMENT) $segments = array();
// получаем права пользователя на документ
// получаем информацию о документе
//Если его нет в перечне страниц значит он IsDisabled
//Если URL редиректа не пустой - осуществляем редирект по нему
// загружаем компоненты страницы
//$this->loadComponents($this->documentInfo['templateID']);
// устанавливаем свойства документа
if(($verifyCode = $this->getConfigValue('google.verify')) && !empty($verifyCode)){
* Возвращает идентификатор документа.
public function getID() {
* Возвращает идентификатор языка документа.
* Запускает построение компонентов страницы и возвращает результат в виде
* собранного DOM-документа страницы.
public function build() {
$this->doc = new DOMDocument('1.0', 'UTF-8');
$dom_root = $this->doc->createElement('document');
$dom_root->setAttribute('debug', $this->getConfigValue('site.debug'));
$this->doc->appendChild($dom_root);
$dom_documentProperties = $this->doc->createElement('properties');
foreach ($this->properties as $propName => $propValue) {
$dom_property = $this->doc->createElement('property', str_replace('&', '&', $propValue));
$dom_property->setAttribute('name', $propName);
if ($propName == 'title') {
$dom_property->setAttribute('alt', $this->documentInfo['HtmlTitle']);
$dom_documentProperties->appendChild($dom_property);
$dom_root->appendChild($dom_documentProperties);
$langProperty = $this->doc->createElement('property', $this->getLang());
$langProperty ->setAttribute('name', 'lang');
$dom_documentProperties->appendChild($langProperty);
$dom_layout = $this->doc->createElement('layout');
$dom_layout->setAttribute('file', $this->documentInfo['layoutFileName']);
$dom_content = $this->doc->createElement('content');
$dom_content->setAttribute('file', $this->documentInfo['contentFileName']);
$dom_root->appendChild($dom_layout);
$dom_root->appendChild($dom_content);
$component = $componentInfo['component'];
$componentResult = false;
if ($this->getRights() >= $component->getMethodRights() && $component->enabled()) {
$componentResult = $component->build();
$componentResult = $this->doc->importNode(
$componentResult->documentElement,
$componentResult->insertBefore($dom_errors, $componentResult->firstChild);
if ($componentInfo['file'] == $this->documentInfo['layoutFileName']) {
$dom_layout->appendChild($componentResult);
elseif ($componentInfo['file'] == $this->documentInfo['contentFileName']) {
$dom_content->appendChild($componentResult);
$dom_root->appendChild($componentResult);
$dom_root->appendChild($dom_errors);
$dom_translations = $this->doc->createElement('translations');
$dom_root->appendChild($dom_translations);
$dom_translation = $this->doc->createElement('translation', $this->translate($const));
$dom_translation->setAttribute('const', $const);
$dom_translation->setAttribute('component', $componentName);
$dom_translations->appendChild($dom_translation);
* Определяет компоненты страницы и загружает их в менеджер компонентов.
* @param int $templateID идентификатор шаблона страницы
* @todo Полный рефакторинг!
// получаем информацию о шаблоне страницы
$res = $this->dbh->select('share_templates', true, array('tmpl_id' => $templateID));
list ($templateInfo) = $res;
// определяем и загружаем описания content- и layout- частей страницы
$this->documentInfo['layoutFileName'] = self::TEMPLATES_DIR. 'layout/'. $templateInfo['tmpl_layout'];
$this->documentInfo['contentFileName'] = self::TEMPLATES_DIR. 'content/'. $templateInfo['tmpl_content'];
// вызывается ли какой-либо компонент в single режиме?
if (sizeof($actionParams) > 1 && $actionParams[0] == self::SINGLE_SEGMENT) {
* Устанавливаем смещение пути на количество существующих
* сегментов + 1 зарезирвированный сегмент + 1 сегмент
if ($actionParams[1] == 'pageToolBar') {
// существует ли запрошенный компонент среди компонентов страницы?
* Добавляем к набору компонентов страницы
* обязательные стандартные компоненты:
* Запускает работу всех компонентов страницы.
$component = $componentInfo['component'];
* Запускаем определение текущего действия компонента
* и загрузку конфигурационной информации.
//$component->getAction();
// если у пользователя достаточно прав - запускаем работу компонента
if ($this->getRights() >= $component->getMethodRights()) {
* Возвращает результирующий DOM-документ.
* Возвращает объект текущего пользователя.
* Возвращает права пользователя на документ.
* Устанавливает значение свойства документа.
* @param string $propName
* @param string $propValue
* Возвращает значение свойства документа.
* @param string $propName
* Удаляет свойство документа.
* @param string $propName
* Возвращает абсолютный путь
public function getSiteRoot() {
return dirname($_SERVER['SCRIPT_FILENAME']);
* Добавляет константу перевода к документу
return ($this->getConfigValue('site.debug'))?isset ($_REQUEST['editMode']):isset ($_POST['editMode']);
|