/** * Основной метод, выполняющий загрузку содержимого тестовой страницы */ private function getContentImpl(RequestArrayAdapter $params, Smarty $smarty) { //Силовые упражнения $exId = $params->int('ex_id'); if ($exId) { //$ex = GymManager::getInstance()->getExercise($exId); $tplPath = "gym/exercises/{$exId}.tpl"; return $smarty->templateExists($tplPath) ? $smarty->fetch($tplPath) : null; } //Специальные страницы $pageType = $params->str('pagetype'); if ($pageType) { $smParams = array(); switch ($pageType) { case 'smarty': foreach (array('blocks', 'functions', 'modifiers') as $type) { $items = DirManager::smarty('plugins/' . $type)->getDirContentFull(null, PsConst::EXT_PHP); /* @var $item DirItem */ foreach ($items as $item) { //Название $name = explode('.', $item->getName()); $name = $name[1]; //Первый комментарий $tokens = token_get_all($item->getFileContents()); $comment = array(T_COMMENT, T_DOC_COMMENT); $fileComment = ''; foreach ($tokens as $token) { if (in_array($token[0], $comment)) { $fileComment = trim($token[1]); break; } } $smParams[$type][] = array('name' => $name, 'comment' => $fileComment); } } break; case 'doubleimg': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES); $sorted = array(); /* @var $img DirItem */ foreach ($images as $img) { $ident = $img->getSize() . 'x' . $img->getImageAdapter()->getWidth() . 'x' . $img->getImageAdapter()->getHeight(); $sorted[$ident][] = $img; } $result = array(); /* @var $img DirItem */ foreach ($sorted as $ident => $imgs) { if (count($imgs) > 1) { $result[$ident] = $imgs; } } $smParams = array('images' => $result); break; case 'testmethods': $smParams['methods'] = TestManagerCaller::getMethodsList(); break; case 'imgbysize': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES, array('GymExercises')); DirItemSorter::inst()->sort($images, DirItemSorter::BY_SIZE); $smParams = array('images' => $images); break; case 'formules': $formules = TexImager::inst()->getAllFormules(); $totalSize = 0; /* @var $formula DirItem */ foreach ($formules as $formula) { $totalSize += $formula->getSize(); $formula->setData('class', 'TeX'); } DirItemSorter::inst()->sort($formules, DirItemSorter::BY_SIZE); $smParams = array('formules' => $formules, 'formules_size' => $totalSize); break; } $content = $smarty->fetch("test/page_{$pageType}.tpl", $smParams); if ($pageType) { switch ($pageType) { case 'patterns': $out = array(); preg_match_all("/===(.*?)===/", $content, $out, PREG_PATTERN_ORDER); $params = array(); for ($i = 0; $i < count($out[0]); $i++) { $full = $out[0][$i]; $ctt = $out[1][$i]; $params[$full] = "<div class=\"demo-head\">{$ctt}</div>"; } $content = PsStrings::replaceMap($content, $params); } } return $content; } //Тестовая страница $num = $params->int('num'); $num = $num ? $num : 1; return $smarty->fetch("test/page{$num}.tpl"); }
protected function __construct() { ExternalPluginsManager::Smarty(); /** * Начиная с версии 5.4 в функции htmlentities параметр encoding был изменён на UTF-8, * до этого момента после применения данного метода к тексту шаблона мы будем получать кракозябру. */ SmartyCompilerException::$escape = is_phpver_is_or_greater(5, 4); $this->smarty = new Smarty(); $this->smarty->compile_check = true; $this->smarty->force_compile = false; // $this->smarty->caching = TRUE; $SMARTY_BASE_PATH = DirManager::smarty()->absDirPath(); /* * УПРАВЛЯЮЩИЕ ДИРЕКТОРИИ */ $this->smarty->setTemplateDir($SMARTY_BASE_PATH . '/templates/'); $this->smarty->setCompileDir($SMARTY_BASE_PATH . '/templates_c/'); $this->smarty->setCacheDir($SMARTY_BASE_PATH . '/cache/'); $this->smarty->setConfigDir($SMARTY_BASE_PATH . '/configs/'); /* * ПЛАГИНЫ */ //1. Функции $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/content/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/mmedia/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/gym/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/replacements/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/discussion/comments/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/discussion/feedback/'; //2. Модификаторы $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/content/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/discussion/comments/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/discussion/feedback/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/rubric/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/post/'; //3. Блочные функции $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/blocks/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/blocks/content/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/blocks/text/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/blocks/child/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/blocks/post/'; /* * ADMIN */ $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/functions/admin/'; $plugins_dir[] = $SMARTY_BASE_PATH . '/plugins/modifiers/admin/'; $this->smarty->addPluginsDir($plugins_dir); /* * Импортируем константы некоторых классов, чтобы на них можно было ссылаться через * {$smarty.const.CONST_NAME} */ PsConstJs::defineAllConsts(); /* * Подключим фильтры */ new SmartyFilters($this->smarty); /* * Зарегистрируем наши функции */ /* @var $plugin AbstractSmartyPlugin */ foreach (Classes::getDirClasses(__DIR__, 'plugins/impl', 'AbstractSmartyPlugin') as $plugin) { $plugin->registerPlugins($this->smarty); } }