/** * Предварительная обработка страницы - самое время выполнить сабмит формы, редирект и остальные подобные вещи */ private final function preProcess(array $buildParams = array()) { ExceptionHandler::registerPretty(); //Проверим и сменим состояние $this->changeState(self::STATE_NOT_INITED, self::STATE_STARTED); $BUILDER_CTXT = PageBuilderContext::getInstance(); //Стартуем контекст $BUILDER_CTXT->setContext(__CLASS__); $this->PROFILER->start(__FUNCTION__); try { //Вызываем предварительную обработку страницы return $this->preProcessImpl($BUILDER_CTXT, RequestArrayAdapter::inst(), ArrayAdapter::inst($buildParams)); } catch (Exception $ex) { $this->PROFILER->stop(false); throw $ex; } }
public static $a = array(); public static function test() { self::$a[] = '1'; } final function __construct($a) { } } class B extends A { } A::test(); A::test(); B::test(); ExceptionHandler::registerPretty(); //print_r(B::$a); PsLibs::inst(); PsConnectionPool::configure(PsConnectionParams::sdkTest()); ps_admin_on(true); $a = array('a' => array('x' => 1, 'y' => 2)); $key = 'M'; $group = 'default'; $group2 = 'default2'; PSCache::inst()->saveToCache($a, $key, $group, 'xxx'); PSCache::inst()->saveToCache(array('a' => 1), '$key', '$group', 'xxx1'); die; echo TestUtils::testProductivity(function () { PSCache::inst()->getFromCache('$key', '$group', null, 'xxx1'); }); print_r(PSCache::inst()->getFromCache($key, $group, array('a'), 'xxx1'));
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()); } }