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; }
/** * Вызов от имени клиента (одни из n) */ public function executeFromClient() { //Не будем выполнять процесс а ajax контексте, так как ajax должен быстро отрабатывать if (PageContext::inst()->isAjax()) { return $this->executed; } return $this->executeImpl(EXTERNAL_PROCESS_CALL_DELAY, __FUNCTION__); }
public function buildPanel($panelName) { $CTXT = PageContext::inst(); if ($CTXT->isPostsListPage() || $CTXT->isRubricPage()) { return $this->getScPanel($CTXT->getPostType(), $CTXT->isRubricPage() ? $CTXT->getRubric() : null); } return null; }
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; }
public function getTitle() { $ctxt = PageContext::inst(); if ($ctxt->isPostPage()) { $pp = $ctxt->getPostProcessor(); $post = $ctxt->getPost(); return $pp->postTitle() . ' | ' . $post->getName(); } if ($ctxt->isRubricPage()) { $rp = $ctxt->getRubricsProcessor(); $rub = $ctxt->getRubric(); return $rp->rubricTitle() . ' | ' . $rub->getName(); } return $ctxt->getPage()->getName(); }
function smarty_function_paging_controller($params, $smarty) { $pp = PageContext::inst()->getPostProcessor(); echo $pp ? $pp->getPagingController() : null; }
protected function getCurrentPagePostsIds($pagingNum) { return PageContext::inst()->isIt($this->getRubricPage()) ? $this->dbBean()->getPagingPostsIds($pagingNum, $this->getCurrentRubric()->getId()) : parent::getCurrentPagePostsIds($pagingNum); }
/** * ArticleContext constructor. */ public function __construct() { parent::__construct(); $this->article_page = new ArticlePage(); }
protected function getCurrentPagePostsIds($pagingNum) { return PageContext::inst()->isIt($this->getPostsListPage()) ? $this->dbBean()->getPagingPostsIds($pagingNum) : null; }
<?php require_once dirname(__DIR__) . '/sdk/MainImport.php'; //Подключим его здесь, так как он ещё понадобится в админских приложениях require_once 'actions/AbstractAjaxAction.php'; //Подключим путь для класслоадера //Autoload::inst()->addBaseDir('ajax'); //Поставим признак ajax-запроса PageContext::inst()->setAjaxContext(); function check_user_session_marker($marker) { if (!AuthManager::checkUserSessionMarker($marker)) { json_error('Передан некорректный маркер сессии'); } } function json_error($error) { exit(json_encode(array('err' => $error))); } function json_success($data) { exit(json_encode(array('res' => $data))); } /** * Выполнение ajax действия * * @param AjaxClassProvider $provider */ function execute_ajax_action(AbstractAjaxAction $action = null) { /* Для безопасности не будем писать детали обработки */
/** * MyAccountContext constructor. */ public function __construct() { parent::__construct(); $this->my_account_page = new MyAccountPage(); }
/** * Основной метод, выполняющий построение страницы */ public final function buildPage() { //Может ли данная страница вообще быть построена check_condition($this->builderIdent, "{$this} не может быть построена"); //Проверим, установлена ли эта страница, как текущая check_condition(WebPages::isCurPage($this), "{$this} не установлена, как текущая, и не может быть построена"); //Если у пользователя нет доступа к данной странице - выполним редирект if (!$this->hasAccess()) { $this->redirectHere(); } //Теперь провалидируем установленный контекст $ctxt = PageContext::inst(); check_condition($this->isIt($ctxt->getPage()), PsUtil::getClassName($ctxt) . ' проинициализирован некорректно'); //Строим страницу PageBuilder::inst()->buildPage(); }
/** * Основной метод, выполняющий построение страницы */ public final function buildPage() { //Проверим, установлена ли эта страница, как текущая check_condition(WebPages::isCurPage($this), "{$this} не установлена, как текущая, и не может быть построена"); //Если у пользователя нет доступа к данной странице - выполним редирект if (!$this->hasAccess()) { $this->redirectHere(); } //Теперь провалидируем установленный контекст $ctxt = PageContext::inst(); check_condition($this->isIt($ctxt->getPage()), PsUtil::getClassName($ctxt) . ' проинициализирован некорректно'); $redirectPage = self::inst(is_numeric($this->pageCodeBase) ? $this->pageCodeBase : BASE_PAGE_INDEX); if ($ctxt->isRubricPage() && !$ctxt->getRubric()) { $redirectPage->redirectHere(); } if ($ctxt->isPostPage() && !$ctxt->getPost()) { $redirectPage->redirectHere(); } if ($ctxt->isPopupPage() && !PopupPagesManager::inst()->isValidPageRequested()) { $redirectPage->redirectHere(); } PageBuilder::inst()->buildPage(); }
/** * В процессе закрытия данного класса мы напишем полный список изменённых сущностей */ public function onDestruct() { foreach (array('ACTION_FOLDING_' => 'Фолдинги', 'ACTION_ENTITY_' => 'Сущности') as $CONST_PREFIX => $name) { $this->LOGGER->infoBox($name); foreach (PsUtil::getClassConsts($this, $CONST_PREFIX) as $action) { $idents = array_get_value($action, $this->ACTIONS, array()); $count = count($idents); $this->LOGGER->info(); $this->LOGGER->info($action . ':'); if ($count > 0) { for ($i = 0; $i < $count; $i++) { $this->LOGGER->info("\t" . (1 + $i) . '. ' . $idents[$i][0] . ($idents[$i][1] ? ' [' . $idents[$i][1] . ']' : '')); } } else { $this->LOGGER->info("\t -- Нет --"); } } } /** * Распечатаем карту зависимости сущностей фолдинга. * Операция настолько тяжёлая, что в режиме ajax также будем избегать её выполнение. */ if (PsDefines::isDevmode() && !PageContext::inst()->isAjax()) { $this->LOGGER->infoBox('Карта зависимости сущностей фолдингов:'); foreach ($this->getDependsOnMap() as $who => $fromWhoArr) { $this->LOGGER->info("\t{$who}:"); foreach ($fromWhoArr as $fromWho) { $this->LOGGER->info("\t\t{$fromWho}"); } } } }
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()); } }
/** * LoginContext constructor. */ public function __construct() { parent::__construct(); $this->login_page = new LoginPage(); }