Example #1
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle($this->basicPage->getTitle());
     //2. JAVASCRIPT
     $jsParams['postId'] = $ctxt->getPostId();
     $jsParams['rubricId'] = $ctxt->getRubricId();
     $jsParams['postType'] = $ctxt->getPostType();
     $jsParams['isPostsListPage'] = $ctxt->isPostsListPage();
     $jsParams['isRubricPage'] = $ctxt->isRubricPage();
     $jsParams['isPostPage'] = $ctxt->isPostPage();
     //Разборы, пройденные пользователем
     $passed = TrainManager::inst()->getUserPassedLessons();
     $jsParams['passedLessons'] = empty($passed) ? null : $passed;
     //Структура проекта
     $jsParams['structure'] = NavigationManager::inst()->getStructure();
     $builderCtxt->setJsParams($jsParams);
     //Параметры, зависимые от страницы
     $builderCtxt->setJsParams($this->basicPage->getJsParams());
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParams4Resources($this->basicPage->getSmartyParams4Resources());
     //4. GET SMARTY PARAMS FOR TPL
     $smartyParams['host'] = ServerArrayAdapter::HTTP_HOST();
     $smartyParams['content'] = BasicPagesManager::inst()->getResourcesLinks($this->basicPage->getIdent(), ContentHelper::getContent($this->basicPage));
     return $smartyParams;
 }
Example #2
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle('Моя страница');
     //2. JAVASCRIPT
     $jsParams['param1'] = $ctxt->getPostId();
     $jsParams['param2'] = 'My value';
     $builderCtxt->setJsParams($jsParams);
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParam4Resources('TIMELINE_ENABE', true);
     //4. GET SMARTY PARAMS FOR TPL
     $smartyParams['host'] = ServerArrayAdapter::HTTP_HOST();
     return $smartyParams;
 }
Example #3
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle('Тестовая страница');
     //2. NO JAVASCRIPT
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParam4Resources('MATHJAX_DISABLE', true);
     $builderCtxt->setSmartyParam4Resources('TIMELINE_ENABE', true);
     $builderCtxt->setSmartyParam4Resources('UPLOADIFY_ENABE', true);
     //4. GET SMARTY PARAMS FOR TPL
     //Подсчитаем кол-во тестовых страниц по кол-ву шаблонов
     $SM = PSSmarty::smarty();
     $cnt = 0;
     do {
         ++$cnt;
     } while ($SM->templateExists("test/page{$cnt}.tpl"));
     $content = $this->getContentImpl($requestParams, $SM);
     $smartyParams['cnt'] = $cnt;
     $smartyParams['content'] = $content;
     return $smartyParams;
 }
Example #4
0
 protected function doBuild(\PageContext $ctxt, \PageBuilderContext $builderCtxt, \RequestArrayAdapter $requestParams, \ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle($this->authed ? 'Админка | ' . $this->adminPage->title() : 'xxx');
     //2. JAVASCRIPT
     $builderCtxt->setJsParams($this->authed ? $this->adminPage->getJsParams() : null);
     //3. SMARTY RESOURCES
     if ($this->authed) {
         $builderCtxt->setSmartyParams4Resources($this->adminPage->getSmartyParams4Resources());
         $builderCtxt->setSmartyParam4Resources('IDENT', $this->adminPage->getPageIdent());
         $builderCtxt->setSmartyParam4Resources('TIMELINE_ENABE', true);
     }
     $smartyParams['authed'] = $this->authed;
     if (!$this->authed) {
         return $smartyParams;
     }
     //Запустим неограниченный по времени режим - мало ли, что мы там будем делать:)
     PsUtil::startUnlimitedMode();
     //Получаем содержимое админской страницы
     $content = ContentHelper::getContent($this->adminPage);
     //Добавляем к ней ресурсы
     $content = APagesResources::inst()->getResourcesLinks($this->adminPage->getPageIdent(), $content);
     $smartyParams['page'] = $this->adminPage;
     $smartyParams['content'] = $content;
     $smartyParams['pagesLayout'] = AdminPagesManager::getInstance()->getLayout();
     return $smartyParams;
 }
Example #5
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle('Тестовая страница');
     //2. NO JAVASCRIPT
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParam4Resources('MATHJAX_DISABLE', true);
     $builderCtxt->setSmartyParam4Resources('TIMELINE_ENABE', true);
     //4. GET SMARTY PARAMS FOR TPL
     //Подсчитаем кол-во тестовых страниц по кол-ву шаблонов
     $SM = PSSmarty::smarty();
     $cnt = 0;
     do {
         ++$cnt;
     } while ($SM->templateExists("test/page{$cnt}.tpl"));
     $content = $this->getContentImpl($requestParams, $SM);
     $galls = DirManager::mmedia()->getDirContent('gallery', DirItemFilter::DIRS);
     $smartyParams['cnt'] = $cnt;
     $smartyParams['galls'] = $galls;
     $smartyParams['content'] = $content;
     $smartyParams['processors'] = Handlers::getInstance()->getPostsProcessors();
     return $smartyParams;
 }
Example #6
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle($this->popupPage->getTitle());
     //2. JAVASCRIPT
     $builderCtxt->setJsParams($this->popupPage->getJsParams());
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParam4Resources('IDENT', $this->popupPage->getIdent());
     $builderCtxt->setSmartyParam4Resources('MATHJAX_DISABLE', true);
     $builderCtxt->setSmartyParams4Resources($this->popupPage->getSmartyParams4Resources());
     //4. GET SMARTY PARAMS FOR TPL
     $smartyParams['page'] = $this->popupPage;
     $smartyParams['content'] = $this->PPM->getPopupPageContent($this->popupPage);
     $smartyParams['header'] = PopupPagesManager::inst()->isShowPageHeader();
     $smartyParams['list'] = $this->popupPage->getIdent() == PP_404::getIdent();
     return $smartyParams;
 }
Example #7
0
 /**
  * Предварительная обработка страницы - самое время выполнить сабмит формы, редирект и остальные подобные вещи
  */
 private final function postProcess()
 {
     //Проверим и сменим состояние
     $this->changeState(self::STATE_STARTED, self::STATE_FINISHED);
     //Устанавливаем контекст
     $BUILDER_CTXT = PageBuilderContext::getInstance();
     //Проверим, что наш контекст не был сброшен
     check_condition(__CLASS__ == $BUILDER_CTXT->getContextIdent(), 'Unexpected ' . get_class($BUILDER_CTXT) . ': ' . $BUILDER_CTXT->getContextIdent());
     //Получим параметры страницы
     $pagePrams = new PageParams($BUILDER_CTXT->finalizeTplContent(null));
     //Сброим контекст, он нам больше не нужен
     $BUILDER_CTXT->dropContext();
     try {
         //Вызываем завершающую обработку страницы
         $result = $this->postProcessImpl($pagePrams, RequestArrayAdapter::inst());
         //Останавливаем профайлер
         $sec = $this->PROFILER->stop();
         //Отлогируем
         $this->LOGGER->info('Page build done in {} sec', $sec->getTime());
         //Вернём
         return $result;
         //---
     } catch (Exception $ex) {
         $this->PROFILER->stop(false);
         throw $ex;
     }
 }
Example #8
0
 protected function getFoldedContext()
 {
     return PageBuilderContext::getInstance();
 }
Example #9
0
 public final function includePanel($panelName)
 {
     if (array_key_exists($panelName, $this->includedPanels)) {
         return $this->includedPanels[$panelName];
     }
     check_condition($this instanceof PanelFolding, "Фолдинг {$this} не может работать с панелями");
     check_condition(in_array($panelName, PsUtil::getClassConsts($this, 'PANEL_')), "Панель [{$panelName}] не может быть предоставлена фолдингом {$this}");
     //Сразу отметим, что панель была запрошена, так как может возникнуть ошибка
     $this->includedPanels[$panelName] = '';
     /*
      * Уникальный код панели - тот самый, через который потом можно будет 
      * достучаться до параметров панели из javascript.
      */
     $panelUnique = $this->getUnique($panelName);
     //Стартуем профайлер
     $this->profilerStart(__FUNCTION__ . "({$panelName})");
     /** @var PluggablePanel */
     $panel = $this->buildPanel($panelName);
     //Мог вернуться и null, тогда ничего не подключаем
     if ($panel == null) {
         //Останавливаем профайлер без сохранения
         $this->profilerStop(false);
         return '';
     }
     //Останавливаем профайлер
     $this->profilerStop();
     check_condition($panel instanceof PluggablePanel, "Возвращена некорректная панель {$panelUnique}. Ожидался обект типа PluggablePanel, получен: " . PsUtil::getClassName($panel));
     //Html content
     $this->includedPanels[$panelName] = trim($panel->getHtml());
     //Js params
     $jsParams = $panel->getJsParams();
     if (!isTotallyEmpty($jsParams)) {
         PageBuilderContext::getInstance()->setJsParamsGroup(PsConstJs::PAGE_JS_GROUP_PANELS, $panelUnique, $jsParams);
     }
     //Smarty resources params
     $smartyParams4Resources = $panel->getSmartyParams4Resources();
     if (is_array($smartyParams4Resources) && !empty($smartyParams4Resources)) {
         PageBuilderContext::getInstance()->setSmartyParams4Resources($smartyParams4Resources);
     }
     return $this->includedPanels[$panelName];
 }
Example #10
0
 public final function buildPage(array $buildParams = array())
 {
     header('Content-Type: text/html; charset=utf-8');
     ExceptionHandler::registerPretty();
     //Запросим адаптер, чтобы сбросить параметры в сессии
     UnloadArrayAdapter::inst();
     // Подготовим необходимые классы
     $CTXT = PageContext::inst();
     $PAGE = $CTXT->getPage();
     $BUILDER = $this->getPageBuilder($CTXT->getPageType());
     $PROFILER = $BUILDER->getProfiler();
     $RESOURCES = null;
     $TITLE = null;
     $CONTENT = null;
     if ($PROFILER) {
         // Начинаем профилирование
         $PROFILER->start($CTXT->getRequestUrl());
     }
     try {
         //Подготовим объекты, которые будем передавать построителю страницы
         $RQ_PARAMS = RequestArrayAdapter::inst();
         $BUILD_PARAMS = ArrayAdapter::inst($buildParams);
         $BUILDER_CTXT = PageBuilderContext::getInstance();
         //Стартуем контекст
         $BUILDER_CTXT->setContextWithFoldedEntity($BUILDER->getFoldedEntity());
         //Вызываем предварительную обработку страницы
         $BUILDER->preProcessPage($CTXT, $RQ_PARAMS, $BUILD_PARAMS);
         // Оповещаем слушателей
         /* @var $listener PagePreloadListener */
         foreach (Handlers::getInstance()->getPagePreloadListeners() as $listener) {
             $listener->onPagePreload($PAGE);
         }
         //Билдер строит страницу, наполняя контекст. Нам от него нужны будут только данные из контекста
         $PARAMS = $BUILDER->buildPage($CTXT, $BUILDER_CTXT, $RQ_PARAMS, $BUILD_PARAMS);
         //Остановим контекст
         $BUILDER_CTXT->dropContext();
         //Загрузим параметры
         $TITLE = $PARAMS->getTitle();
         $CONTENT = $PARAMS->getContent();
         // Подключаем все необходимые ресурсы
         $RESOURCES = $this->buildResources($PARAMS, $CTXT);
         //Проведём финализацию страницы, чтобы различные менеджеры могли добавить к ней свои данные
         $CONTENT = PageFinaliserFoldings::finalize($this->LOGGER, $CONTENT);
     } catch (Exception $ex) {
         $TITLE = trim($TITLE) . ' (произошла ошибка)';
         $CONTENT = ExceptionHandler::getHtml($ex);
     }
     //Непосредственное построение страницы.
     $PAGE_PARAMS['RESOURCES'] = $RESOURCES;
     $PAGE_PARAMS['TITLE'] = $TITLE;
     $PAGE_PARAMS['CONTENT'] = $CONTENT;
     //ПОДСТАВЛЯЕМ ВСЕ ПАРАМЕТРЫ СТРАНИЦЫ В БАЗОВЫЙ ШАБЛОН
     $PAGE_CONTENT = PSSmarty::template('page/page_pattern.tpl', $PAGE_PARAMS)->fetch();
     $this->LOGGER->infoBox('HTML PAGE', $PAGE_CONTENT);
     //ФИНАЛИЗАЦИЯ СТРАНИЦЫ - ВЫЧИСЛИМ РЕСУРСЫ, КОТОРЫЕ НУЖНО ОТКЛЮЧИТЬ
     $PAGE_CONTENT = PageFinaliserRegExp::finalize($this->LOGGER, $PAGE_CONTENT);
     //НОРМАЛИЗАЦИЯ СТРАНИЦЫ - УДАЛИМ ДВОЙНЫЕ ПРОБЕЛЫ И ПЕРЕНОСЫ
     if (PsDefines::isNormalizePage()) {
         $PAGE_CONTENT = PageNormalizer::finalize($this->LOGGER, $PAGE_CONTENT);
     }
     //ВСТАВИМ ASIS ПАРАМЕТРЫ, ТАК КАК БОЛЕЕ SMARTY ФИЛЬТРЫ ВЫЗЫВАТЬСЯ НЕ БУДУТ
     $PAGE_CONTENT = $this->replaceAsIsValues($PAGE_CONTENT);
     $this->LOGGER->infoBox('PAGE WITH ASIS REPLACED', $PAGE_CONTENT);
     //BOOOM :)
     echo $PAGE_CONTENT;
     if ($PROFILER) {
         // Заканчиваем профилирование
         $PROFILER->stop();
         PageOpenWatcher::updateUserPageWatch($CTXT->getRequestUrl());
     }
 }