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; }
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; }
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; }
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; }
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; }
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; }
/** * Предварительная обработка страницы - самое время выполнить сабмит формы, редирект и остальные подобные вещи */ 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; } }
protected function getFoldedContext() { return PageBuilderContext::getInstance(); }
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]; }
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()); } }