/** * Метод получает фактический контект для всплывающей страницы. * Сама страница может вернуть или IdentPageFilling, и тогда содержимое * будет обработано за неё. Или непосредственно IdentPageContent, * если ей самой нужно обработать содержимое (например - акции). * * @return ClientBoxContent */ public final function getContent() { if ($this->cbContent) { return $this->cbContent; } $this->checkAccess(); $this->profilerStart(__FUNCTION__); $filling = null; try { $filling = $this->getClientBoxFilling(); check_condition($filling instanceof ClientBoxFilling, "Элемент [{$this->ident}] обработан некорректно"); } catch (Exception $ex) { $this->profilerStop(false); return $this->cbContent = new ClientBoxContent(PsHtml::divErr(ExceptionHandler::getHtml($ex))); } //Построим заголовок $HEAD_PARAMS['class'][] = 'box-header'; if ($filling->isCover()) { $HEAD_PARAMS['class'][] = 'covered'; $HEAD_PARAMS['style']['background-image'] = 'url(' . $this->foldedEntity->getCover()->getRelPath() . ')'; } $HEAD_CONTENT = $filling->getHref() ? PsHtml::a(array('href' => $filling->getHref()), $filling->getTitle()) : $filling->getTitle(); $HEAD = PsHtml::html2('h3', $HEAD_PARAMS, $HEAD_CONTENT); $BOX_CONTENT = $this->foldedEntity->fetchTplWithResources($filling->getSmartyParams()); $BOX = PsHtml::div(array(), $HEAD . $BOX_CONTENT); $this->profilerStop(); return $this->cbContent = new ClientBoxContent($BOX, $filling->getJsParams()); }
/** * Функция производит финализацию страницы, показываемой пользователю, добавляя к ней элемент с содержащимися в нём ссылками. */ public function appendLibItemsToPageContent($CONTENT) { $matches = array(); $data = PsConstJs::BUBBLE_LOADER_FOLDING_DATA; $pattern = "/data-{$data}=\"(.+?)\"/si"; preg_match_all($pattern, $CONTENT, $matches); $matches = array_unique(array_get_value(1, $matches, array())); $items = array(); foreach ($matches as $unique) { $entity = Handlers::getInstance()->getFoldedEntityByUnique($unique, false); if ($entity && $entity->getFolding()->isItByType(LibResources::LIB_FOLDING_TYPE)) { $items[$entity->getUnique()] = $entity->getFolding()->getBubble($entity->getIdent()); } } $has = count($items) > 0; if ($this->LOGGER->isEnabled()) { $this->LOGGER->info(); $this->LOGGER->info('Библиотечные элементы, добавленные на страницу:'); if ($has) { foreach ($items as $unique => $lib) { $this->LOGGER->info("\t{$unique}"); } } else { $this->LOGGER->info("\t-- Нет --"); } } return $CONTENT . ($has ? PsHtml::div(array('id' => PsConstJs::BUBBLE_LOADER_FOLDING_STORE_ID), implode('', $items)) : ''); }
public function html() { $path = $this->path; if ($this->current) { $path[] = PsHtml::span(array(), $this->current); } return empty($path) ? '' : PsHtml::div(array('class' => 'ps-page-nav'), implode('', $path)); }
function smarty_block_box($params, $content, Smarty_Internal_Template &$smarty) { if ($content) { $params['class'] = to_array(array_get_value('class', $params)); $params['class'][] = 'psbox'; return PsHtml::div($params, PsHtml::div(array('class' => 'psboxctt'), $content)); } }
/** * Управление постом */ function smarty_modifier_post_header_controls($post) { $post = $post instanceof PostContentProvider ? $post->getPost() : $post; $pp = Handlers::getInstance()->getPostsProcessorByPostType($post->getPostType()); /* * Собираем кнопки управления */ $buttons = array(); $hintClasses = 'hint--top hint--info hint--rounded'; //Печать поста $attrs = array(); $title = 'Версия для печати'; $attrs['href'] = '#print'; $attrs['title'] = $title; $attrs['data'] = array('hint' => $title); $attrs['class'] = $hintClasses; $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'print', true); $buttons[] = PsHtml::a($attrs, $content); //Оригинальный вид поста if (PsDefines::isReplaceFormulesWithImages()) { $attrs = array(); $title = 'Просмотр ' . ps_strtolower($pp->postTitle(null, 2)) . ' без замены формул на картинки'; $attrs['href'] = '#originalView'; $attrs['title'] = $title; $attrs['data'] = array('hint' => $title); $attrs['class'] = $hintClasses; $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'formula', true); $buttons[] = PsHtml::a($attrs, $content); } //Быстрый просмотр постов (перелистывание) $attrs = array(); $title = 'Предыдущий/следующий ' . ps_strtolower($pp->postTitle(null, 1)); $attrs['href'] = '#prevNextView'; $attrs['title'] = $title; $attrs['data'] = array('hint' => $title); $attrs['class'] = $hintClasses; $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'prev_next', true); $buttons[] = PsHtml::a($attrs, $content); //Предыдущий пост $prevPost = $pp->getPrevPost($post->getId(), false); if ($prevPost) { $attrs = array(); $attrs['data']['hint'] = $pp->postTitle($prevPost); $attrs['class'] = $hintClasses; $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'prev_s', true); $buttons[] = $pp->postHref($prevPost, $content, null, $attrs); } //Следующий пост $nextPost = $pp->getNextPost($post->getId(), false); if ($nextPost) { $attrs = array(); $attrs['data']['hint'] = $pp->postTitle($nextPost); $attrs['class'] = $hintClasses; $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'next_s', true); $buttons[] = $pp->postHref($nextPost, $content, null, $attrs); } return PsHtml::div(array('class' => PsConstJs::POST_HEAD_CONTROLS), implode(' ', $buttons)); }
function smarty_block_text($params, $content, Smarty_Internal_Template &$smarty) { if (!$content) { return; } $content = nl2br(trim($content)); $params['class'] = array_get_value('class', $params, '') . ' text'; return PsHtml::div($params, $content); }
public static function post_anons_placeholder($post) { if ($post instanceof PostContentProvider) { $post = $post->getPost(); } $params['class'] = $post->getPostType() . '-anons-placeholder'; $params['data'] = array('id' => $post->getId()); return PsHtml::div($params, 'Идёт построение списка...'); }
protected function postProcessImpl(PageParams $pageParams, \RequestArrayAdapter $requestParams) { $SMARTY_PARAMS['JS_DEFS'] = PageBuilder::inst()->buildJsDefs($pageParams); $SMARTY_PARAMS_PAGE = $pageParams->getSmartyParams4Resources(); $SMARTY_PARAMS = array_merge($SMARTY_PARAMS, $SMARTY_PARAMS_PAGE); $resources = PSSmarty::template('page/environment/wordpress/wp_page_resources_footer.tpl', $SMARTY_PARAMS)->fetch(); $resources = trim($resources); $this->LOGGER->infoBox('PAGE_RESOURCES_FOOTER', $resources); echo PsHtml::div(array(), $resources); }
public function wrapBlockImgBox($imageId, array $attrs, $content) { $imageId = trim($imageId); $num = $this->getNextImgNum($imageId, true); if ($imageId) { $attrs['id'] = $this->getImgElId($imageId); } $content = str_replace(PsConst::NUM_REPLCASE_MACROS, PsConstJs::numeratorItemIndex(self::CSS_NUMERATOR_IMG, $num), trim($content)); return PsHtml::div($attrs, $content); }
public static function field($label, $field, $hint = null) { //Добавим двоеточие здесь, чтобы оно вошло в hint (ели он передан) $label = $label ? "{$label}:" : ''; if ($label && $hint) { $label = PsHtml::hint($label, $hint, PsHtml::HINT_POS_RIGHT, PsHtml::HINT_TYPE_INFO); } $label = $label ? "<label>{$label}</label>" : ''; return PsHtml::div(array('class' => 'field'), $label . $field); }
/** * Метод производит поиск ссылок на всплывающие баблы и извлекает массив: * идентификатор_бабла => <div>Содержимое бабла</div> */ private function getBubbles($CONTENT) { $items = array(); $this->extractUsedBubbleItems($CONTENT, $items); $has = count($items) > 0; if ($this->LOGGER->isEnabled()) { $this->LOGGER->info(); $this->LOGGER->info('Элементы всплывающих подсказок, добавленные на страницу:'); if ($has) { foreach ($items as $unique => $bubble) { $this->LOGGER->info("\t{$unique}"); } } else { $this->LOGGER->info("\t-- Нет --"); } } return $has ? PsHtml::div(array('id' => PsConstJs::BUBBLE_LOADER_FOLDING_STORE_ID), implode('', $items)) : ''; }
/** * Строит id-card с информацией о данном пользователе */ public function getIdCard() { return PsHtml::div(array('class' => 'user_info'), $this->getIdCardContent()); }
protected function getClientBoxFilling() { $comments = AdminManager::inst()->getPostsWithUncheckedCommentsHtml(); $comments = $comments ? $comments : PsHtml::div(array('class' => 'no_items'), 'Нет новых комментариев'); return new ClientBoxFilling('Новые комментарии:', false, null, array('comments' => $comments)); }
/** * Функция, которая будет вызвана после фетчинга шаблона для оборачивания * содержимого в специальный элемент. */ protected function wrapContent($content, array $params = array()) { $params['id'] = $this->getFoldedEntity()->getUnique(); $params['class'][] = PsUtil::getClassConsts(get_called_class(), 'CSS_'); return PsHtml::div($params, $content); }
/** * Метод обрабатывает блочные формулы, заключённые в {f}...{/f}, * но не являющиеся формулами TeX (не \[...\]). */ public static function processBlockFormula($content) { return PsHtml::div(array('class' => 'block_formula'), normalize_string($content)); }
/** * Метод форматирует скек, добовляя к нему предыдущий эксепшн, если есть. */ public static function formatStackHtml(Exception $ex) { $prev = $ex->getPrevious() instanceof Exception ? $ex->getPrevious() : null; return PsHtml::div(array('class' => 'message'), get_class($ex) . ': ' . $ex->getMessage()) . PsHtml::div(array('class' => 'stack'), self::formatTraceMessagesHtml($ex)) . ($prev ? PsHtml::div(array('class' => 'prevoius'), self::formatStackHtml($prev)) : ''); }
/** * Див-обёртка для хранения содержимого bubble. * <div class="lib-s-BP_FM2_einstein lib-bubble">...</div> * И баблы, показываемые на странице, и баблы, загружаемые через ajax - все отображаются в этой обёртке. */ public static function extractFoldedEntityBubbleDiv($unique) { $entity = FoldedStorageInsts::getFoldedEntityByUnique($unique, false); if (!$entity || !$entity->getFolding() instanceof BubbledFolding) { return null; } //Добавим классы для контейнера bubble, чтобы мы могли его найти на странице $params['class'][] = $entity->getUnique(); $params['class'][] = $entity->getFolding()->getFoldingType() . '-bubble'; $bubble = $entity->getFolding()->getBubble($entity->getIdent()); $clear = PsHtml::div(array('class' => 'clearall')); return PsHtml::div($params, $bubble . $clear); }
/** * Метод возвращает контроллер для постраничного переключения постов. * Сам он будет построен силами javascript, наша задача только добавить <div> со всем данными. */ public function getPagingController() { $pagingsCnt = $this->getPagingsCnt(); $pagingNum = $this->getPagingNum(); $baseUrl = $this->getCurrentPageBaseUrl(); if ($pagingsCnt && $pagingsCnt > 1 && $pagingNum && $baseUrl) { return PsHtml::div(array('class' => 'ps-switcher', 'data' => array('max' => $pagingsCnt, 'cur' => $pagingNum, 'url' => $baseUrl))); } return ''; }
private function insert($FNAME, ArrayAdapter $params, $content) { $IMG['data'] = $params->has('data') ? $params->get('data') : $params->getByKeyPrefix('data_', true); $IMG['class'] = $params->get(array('cl', 'class')); $IMG['style'] = $params->get(array('st', 'style')); $IMG['title'] = $params->get('title'); /* * Если alt задан, но пуст - таким его и оставим. * Скорее всего нам такое поведение и нужно. Например в галлереях alt используется для подсказки. * Нам не нужно в качестве подсказки показывать название картинки. */ if ($params->has('alt')) { $IMG['alt'] = $params->get('alt'); } if ($params->hasNoEmpty('map')) { $IMG['usemap'] = '#' . $params->get('map'); } $isPopup = ends_with($FNAME, 'imgp'); //Массив фактических картинок $IMAGES = array(); if ($content && !$isPopup) { //Есть содержимое } else { $IMAGES = to_array($this->getImages($params, $FNAME)); check_condition($IMAGES, "В блок [{$FNAME}] не переданы картинки для отображения."); } if ($isPopup) { //Всплывающая картинка $popupImgSrc = $IMAGES[0] instanceof DirItem ? $IMAGES[0]->getRelPath() : $IMAGES[0]; if ($content == '.') { echo PsBubble::previewImgBubble($popupImgSrc); } else { echo PsBubble::spanImgBubble($content, $popupImgSrc); } return; //--- } //Параметры $id = $params->str(array('id', 'num')); $text = $params->str('text'); $isBlock = $content || count($IMAGES) > 1 || $id || $text || ends_with($FNAME, array('imgb', 'imgn')); if (!$isBlock) { $IMG['src'] = $IMAGES[0]; echo PsHtml::img($IMG); return; //--- } //Блочная картинка //Определим номер картинки. Если это imgn, то нумерация форсированно отключена. $inc = ends_with($FNAME, 'imgn') ? null : FoldedContextWatcher::getInstance()->getImageNumeratorContext(false); //Определим текст подписи под картинкой. $num = $inc ? ' ' . PsConst::NUM_REPLCASE_MACROS : ''; $text = trim($num || $text ? "<b>Рис.{$num}</b> {$text}" : ''); $text = $text ? "<p>{$text}</p>" : ''; //Строим див с картинками $DIV['class'] = array('block_img'); if (!$content) { foreach ($IMAGES as $src) { $IMG['src'] = $src; $content .= PsHtml::img($IMG); } } $content .= $text; echo $inc ? $inc->wrapBlockImgBox($id, $DIV, $content) : PsHtml::div($DIV, $content); }
public function tasksHtml() { $res = ''; foreach ($this->TASKS as $task) { $taskIdent = $this->taskIdent($task); $task['ident'] = $taskIdent; $text = $this->taskToString($task); $PARAMS['data'] = $task; $PARAMS['class'] = $taskIdent; $res .= PsHtml::div($PARAMS, $text); } return $res; }