energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file DocumentController.class.php

Documentation is available at DocumentController.class.php

  1.  
  2. /**
  3.  * Класс DocumentController.
  4.  *
  5.  * @package energine
  6.  * @subpackage core
  7.  * @author 1m.dm
  8.  * @copyright Energine 2006
  9.  */
  10.  
  11. /**
  12.  * Отвечает за подготовку среды и запуск работы объекта Document.
  13.  *
  14.  * @package energine
  15.  * @subpackage core
  16.  * @author 1m.dm
  17.  * @final
  18.  */
  19. final class DocumentController extends Object {
  20.     /**
  21.      * 
  22.      * @var Transformer 
  23.      */
  24.     private static $transformer;
  25.     /**
  26.      * 
  27.      * @var DocumentController 
  28.      */
  29.     private static $instance;
  30.  
  31.     /**
  32.      * Конструктор класса.
  33.      *
  34.      * @access public
  35.      * @return void 
  36.      */
  37.     public function __construct({
  38.         parent::__construct();
  39.     }
  40.  
  41.     /**
  42.      * Возвращает единый для всей системы экземпляр класса DocumentController
  43.      *
  44.      * @access public
  45.      * @static
  46.      * @return DocumentController 
  47.      */
  48.     static public function getInstance({
  49.         if (!isset(self::$instance)) {
  50.             self::$instance new DocumentController();
  51.         }
  52.         return self::$instance;
  53.     }
  54.  
  55.     /**
  56.      * Подготавливает среду для работы, создаёт объект Document и передаёт
  57.      * ему управление. После отработки объекта Document, запускает трансформацию
  58.      * XML-документа страницы в выходной формат.
  59.      *
  60.      * @access public
  61.      * @return void 
  62.      */
  63.     public function run({
  64.         $request Request::getInstance();
  65.         $language Language::getInstance();
  66.         $language->setCurrent($language->getIDByAbbr($request->getLang()true));
  67.  
  68.         //unset($sitemap);
  69.         $document new Document($request->getPath());
  70.         $documentDescription Sitemap::getInstance()->getDocumentInfo($document->getID())
  71.         $document->loadComponents($documentDescription['templateID']);
  72.         
  73.         // уберём за собой
  74.         unset($request$language$documentDescription);
  75.         
  76.        /*
  77.         * Если в каком-либо компоненте происходит ошибка, не позволяющая ему
  78.         * продолжить работу, генерируется фиктивное исключение, с помощью
  79.         * которого прерывается работа компонента. В дальнейшем, при вызове
  80.         * метода Document::build, происходит обработка всех возникших ошибок.
  81.         */
  82.         try {
  83.             $document->runComponents();
  84.         }
  85.         catch (DummyException $dummyException{}
  86.         $document->build();
  87.         
  88.         $this->transform($document);
  89.     }
  90.     /**
  91.      * Возвращает объект  - XSLT трансформатор
  92.      *
  93.      * @return Transformer 
  94.      */
  95.     public function getTransformer(){
  96.         if(!isset(self::$transformer)){
  97.             self::$transformer new Transformer();
  98.         }
  99.  
  100.         return self::$transformer;
  101.     }
  102.  
  103.  
  104.     /**
  105.      * Трансформирует XML-документ страницы в выходной формат,
  106.      * и выводит результат клиенту.
  107.      *
  108.      * @param $document Document
  109.      * @access private
  110.      * @return void 
  111.      */
  112.     private function transform($document{
  113.         $response Response::getInstance();
  114.         $dom_document $document->getResult();
  115.         if (!($dom_document instanceof DOMDocument)) {
  116.             throw new SystemException('ERR_BAD_DOCUMENT'SystemException::ERR_CRITICAL);
  117.         }
  118.  
  119.         if ((isset($_GET['debug']&& $this->getConfigValue('site.debug')) || $this->getConfigValue('site.asXML')) {
  120.             $result = trim($dom_document->saveXML());
  121.             $response->setHeader('Content-Type''text/xml; charset=UTF-8');
  122.         }
  123.         else {
  124.             $result $this->getTransformer()->transform($dom_document);
  125.               $response->setHeader('Content-Type''text/html; charset=UTF-8'false);
  126.         }
  127.  
  128.         $response->write($result);
  129.     }
  130. }
В создании документации нам помог: phpDocumentor