/** * Возвращает ссылку на страницу: * <a href="helpus.php">Поддержать проект</a> * По умолчанию берёт название страницы, но можно передать кастомное. */ public function getHref($content = null, $blank = false, $classes = null, $http = false, $urlParams = null, $sub = null, $title = null) { $PARAMS['href'] = $this->getUrl($http, $urlParams, $sub); $PARAMS['title'] = $title ? $title : $this->name; $PARAMS['class'] = $classes; return PsHtml::a($PARAMS, $content ? $content : $this->name, $blank); }
/** * Метод получает фактический контект для всплывающей страницы. * Сама страница может вернуть или 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()); }
/** * Управление постом */ 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)); }
public function rubricHref($rubric, $content = null, $classes = null) { $rubric = $this->extractRubric($rubric); $content = $content ? $content : $rubric->getName(); $PARAMS['href'] = $this->rubricUrl($rubric); $PARAMS['class'] = $classes; $PARAMS['title'] = $this->rubricTitle($rubric); return PsHtml::a($PARAMS, $content); }
/** * Href-ссылка для отображения содержимого элемента с id=$boxId. * * @param type $extractor - название javascript-класса, занимающегося извлеченеим данных из элемента с id=$boxId * * <a class="ps-bubblehref-move" data-extractor="theorem" href="#post-tr-vectors-thkoll">№1</a> */ public static function aById($boxId, $content, $extractor = null, array $attrs = array(), $blank = false) { self::attrsExtractor($attrs, $boxId, $extractor); if (!array_key_exists('href', $attrs)) { //Не передана ссылка, подставим в качестве якоря код элемента. $blank = false; $attrs['href'] = ensure_starts_with($boxId, '#'); } return PsHtml::a($attrs, $content, $blank); }
/** * Метод возвращает ссылку, открывающую загружаемую страницу. * Для работы загружаемой страницы нужны ресурсы фолдинга этой страницы - они также будут добавлены к ссылке. * * <a title="Новости" class="ip-opener" href="#news"><img alt="news.png" src="/autogen/images/16x16/folding/idents/news.png"></a> * * @param BaseIdentPage or String $item * @param array $params - параметры ссылки * @param type $content - содержимое ссылки. Если нет, то будет подставлена картинка. */ public final function getIdentPageHref(array $params = array(), $content = null) { $this->checkAccess(); $params['class'][] = 'ip-opener'; $params['class'][] = $this->foldedEntity->getUnique(); $params['title'] = $this->getTitle(); $params['href'] = "#" . $this->foldedEntity->getIdent(); //Если не передано содержимое, то добавим картинку $content = $content ? $content : PsHtml::img(array('src' => $this->foldedEntity->getCover())); //Добавим все необходимые ресурсы $content = $this->foldedEntity->getResourcesLinks($content); return PsHtml::a($params, $content); }
public function postHref($post, $content = null, $sub = null, $attrs = null, $blank = false) { $post = $this->extractPost($post, false); if (!$post) { /* Если поста нет, то ругаться не будем - нужно для предпросмотра поста */ return PsHtml::spanErr($this->postTitle() . ' не определён'); } $attrs = to_array($attrs); $attrs['href'] = $this->postUrl($post, $sub); if (!$sub) { $attrs['title'] = $this->postTitle($post); } $content = $content ? $content : $post->getName(); return PsHtml::a($attrs, $content, $blank); }
public function getHrefToPage($page, $customTitle = null, array $getParams = null) { $page = $this->getPage($page); $url = $this->pageUrl($page, $getParams); $title = $customTitle ? $customTitle : $page->title(); $htmlParams = array(); if ($this->isCurrentPage($page)) { $htmlParams['class'] = to_array(array_get_value('class', $htmlParams)); $htmlParams['class'][] = 'current'; } $htmlParams['href'] = $url; return PsHtml::a($htmlParams, $title); }
/** * Метод строит html листочка на дереве дискуссии: * * <li> * .... * <ul> * <li> * .... * </li> * </ul> * </li> * * @param DiscussionMsg $msg */ public final function buildLeaf(DiscussionMsg $msg, $simple = false) { $msgId = $msg->getId(); $author = $msg->getUser(); $isDeleted = $msg->isDeleted(); $isUserComment = $author->isAuthorised(); $isCanConfirm = !$isUserComment && !$msg->isConfirmed() && !$isDeleted && AuthManager::isAuthorizedAsAdmin(); $notKnown = !$msg->isKnown() && $msg->getUserTo() && $msg->getUserTo()->isIt(PsUser::instOrNull()); $msgUnique = $msg->getUnique(); $threadUnique = $this->SETTINGS->getThreadUnique($msg->getThreadId()); //Мы открываем страницу для показа этого комментария $liId = RequestArrayAdapter::inst()->str(GET_PARAM_GOTO_MSG) === $msgUnique ? " id=\"{$msgUnique}\"" : ''; //Классы li $liClasses = array('msg'); if ($isDeleted) { $liClasses[] = 'deleted'; } //Классы Comment $divClasses = array('comment', $msgUnique); if ($isUserComment) { $divClasses[] = 'user_comment'; } if ($isCanConfirm) { $divClasses[] = 'not_confirmed'; } //Данные для Comment $divData['unique'] = $msgUnique; //Имя пользователя $userName = $author->getName() . ($isUserComment ? ' (вы)' : ''); //КНОПКИ УПРАВЛЕНИЯ СВЕРХУ $controlsTop = array(); if (!$simple) { //Кнопки управления сверху $controlsTop[] = PsHtml::a(array('href' => '#'), '#'); if (!$msg->isRoot()) { $controlsTop[] = PsHtml::a(array('href' => '#', 'class' => 'parent'), '↑'); } } //Кнопки голосования if ($this->SETTINGS->isVotable()) { $userCanVote = AuthManager::isAuthorized() && !$isUserComment; $votes = VotesManager::inst()->getVotesCount($threadUnique, $msgId); $likeCtrl = array(); if ($userCanVote) { $vote = VotesManager::inst()->getUserVotes($threadUnique, $msgId, AuthManager::getUserId()); $likeCtrl[] = PsHtml::a(array('class' => 'like ' . ($vote > 0 ? 'active' : 'clickable')), '+1'); $likeCtrl[] = PsHtml::a(array('class' => 'votes' . ($vote == 0 ? '' : ' clickable') . ($votes == 0 ? '' : ($votes > 0 ? ' green' : ' red'))), abs($votes)); $likeCtrl[] = PsHtml::a(array('class' => 'dislike ' . ($vote < 0 ? 'active' : 'clickable')), '−1'); } else { $likeCtrl[] = PsHtml::a(array('class' => 'votes' . ($votes == 0 ? '' : ($votes > 0 ? ' green' : ' red'))), abs($votes)); } $controlsTop[] = PsHtml::span(array('class' => 'vote'), implode('', $likeCtrl)); } $controlsTop = implode('', $controlsTop); //КНОПКИ УПРАВЛЕНИЯ СНИЗУ $controlsBottom = ''; if (!$simple && !$isDeleted) { $controlsBottom = array(); $controlsBottom['id'] = $msgId; if ($isCanConfirm) { $controlsBottom[SmartyFunctions::ACTION_CONFIRM] = 'Принять'; } if (!$msg->isMaxDeepLevel()) { $controlsBottom[SmartyFunctions::ACTION_REPLY] = 'Ответить'; } if ($isUserComment) { $controlsBottom[SmartyFunctions::ACTION_DELETE] = 'Удалить'; } elseif (AuthManager::isAuthorizedAsAdmin()) { $controlsBottom[SmartyFunctions::ACTION_DELETE] = 'Удалить (админ)'; } $controlsBottom = SmartyFunctions::psctrl($controlsBottom); } //Собираем параметры в кучу $params['msg'] = $msg; $params['new'] = $notKnown; $params['builder'] = $this; $params['liId'] = $liId; $params['liClasses'] = implode(' ', $liClasses); $params['divClasses'] = implode(' ', $divClasses); $params['divData'] = PsHtml::data2string($divData); $params['msgId'] = $msgId; $params['simple'] = $simple; $params['avatar'] = $author->getAvatarImg('42x', array('class' => 'small')); $params['userName'] = $userName; $params['controlsTop'] = $controlsTop; $params['controlsBottom'] = $controlsBottom; if ($msg->isTemplated()) { $params['msgCtt'] = TemplateMessages::inst()->decodeTemplateMsg($msg); } else { $params['msgCtt'] = $msg; } return PSSmarty::template('discussion/common/leaf.tpl', $params)->fetch(); }
public function addPath($href, $text) { $this->path[] = PsHtml::a(array('href' => $href), $text); }
public function buildContent() { $navigation = AdminPageNavigation::inst(); $RQ = RequestArrayAdapter::inst(); /** @var FoldedEntity */ $entity = FoldedStorageInsts::getFoldedEntityByUnique($RQ->str('entity'), false); /** @var FoldedResources */ $folding = $entity ? $entity->getFolding() : FoldedStorageInsts::byUnique($RQ->str('folding'), false); $mode = $RQ->str('mode', self::MODE_FOLDINGS_LIST); $PARAMS['mode'] = $mode; $PARAMS['error'] = null; $PARAMS['entity'] = $entity; $PARAMS['folding'] = $folding; $PARAMS['foldings'] = FoldedStorageInsts::listFoldings(); $ftype = $folding ? $folding->getFoldingType() : ''; $fsubtype = $folding ? $folding->getFoldingSubType() : ''; $fident = $entity ? $entity->getIdent() : ''; $flist = $RQ->str('list'); $ftplpath = $RQ->str('tplpath'); //РЕДИРЕКТ if ($mode != self::MODE_FOLDINGS_LIST && !$folding) { PsUtil::redirectTo(self::urlFoldingsList()); } //ВЫПОЛНЕНИЕ switch ($mode) { //СПИСОК ВСЕХ ФОЛДИНГОВ case self::MODE_FOLDINGS_LIST: $navigation->setCurrent('Список фолдингов'); break; //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА case self::MODE_FOLDING_CONTENT: $newIdent = $folding->getNextEntityIdent(); //Форма создания $FORM = FORM_AdminFoldingCreateForm::getInstance(); $FORM->setHidden('folding', $folding->getUnique()); $FORM->setParam(FORM_AdminFoldingCreateForm::PARAM_NEW_FOLDING_IDENT, $newIdent); $FORM->setSmartyParam('folding', $folding); /* @var $TABLE PsTable */ $FORM->setSmartyParam('rec', $folding->getDbRec4Entity($newIdent)); //Форма загрузки $FORM = FORM_AdminFoldingUploadForm::getInstance(); $FORM->setHidden('folding', $folding->getUnique()); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->setCurrent($folding->getEntityName()); break; case self::MODE_FOLDING_LIST_EDIT: $PARAMS['list'] = $flist; //TODO - выкинуто //$PARAMS['listIdents'] = $folding->getPossibleListIdents($flist); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->setCurrent('Редактирование списка ' . $flist); break; case self::MODE_FOLDING_TPLS_LIST: $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->addPath(self::urlFoldingEdit($entity), $fident); $navigation->setCurrent('Информационные шаблоны'); break; case self::MODE_FOLDING_TPL_EDIT: $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident); $tpl = $folding->getInfoTpl($entity->getIdent(), $ftplpath); $PARAMS['tpl'] = $tpl; //Отфетчим содержимое, извлеча из запроса те параметры, которые начинаются на sm_ $PARAMS['content'] = $tpl->fetchNoCache($RQ->getByKeyPrefix('sm_', true)); $FORM = FORM_AdminFoldingInfoTplEditForm::getInstance(); $FORM->setHidden('fentity', $entity->getUnique()); $FORM->setHidden('ftpl', $tpl->getInfoRelPath()); $FORM->setSmartyParam('tpl', $tpl->getDirItem()->getFileContents()); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->addPath(self::urlFoldingEdit($entity), $fident); $navigation->addPath(self::urlFoldingInfoTplsList($entity), 'Информационные шаблоны'); $navigation->setCurrent($tpl->getInfoRelPath()); break; case self::MODE_FOLDING_EDIT: //Ссылка для скачивания спрайтов $download['class'] = 'download'; $download['data'] = array('ftype' => $ftype, 'fsubtype' => $fsubtype, 'fident' => $fident); $PARAMS['download'] = PsHtml::a($download, '[Скачать]'); $spriteImg = $folding->getSprite($fident); $spriteImg = $spriteImg && $spriteImg->getImgDi()->isImg() ? $spriteImg->getImgDi() : null; $PARAMS['sprite'] = $spriteImg ? PsHtml::a(array('href' => $spriteImg->getRelPath()), '[Спрайт]', true) : null; //Информационные шаблоны $PARAMS['patterns'] = ''; if (count($folding->getInfoDiList($fident))) { $patterns['href'] = self::urlFoldingInfoTplsList($entity); $PARAMS['patterns'] = PsHtml::a($patterns, '[Инфо шаблоны]'); } $PARAMS['info'] = ''; try { $prew = $folding->getFoldedEntityPreview($fident); if (is_array($prew)) { $PARAMS['info'] = array_get_value('info', $prew); $PARAMS['content'] = array_get_value('content', $prew); } else { $PARAMS['content'] = $prew; } } catch (Exception $e) { $PARAMS['content'] = ExceptionHandler::getHtml($e); } /* * Подготовим форму редактирования фолдинга */ $FORM = FORM_AdminFoldingEditForm::getInstance(); /* hiddens */ $FORM->setHidden('ftype', $ftype); $FORM->setHidden('fsubtype', $fsubtype); $FORM->setHidden('fident', $fident); $rtypes = $folding->getAllowedResourceTypes(); /* fields */ foreach ($rtypes as $rtype) { $FORM->setParam($rtype, $folding->getResourceDi($fident, $rtype)->getFileContents(false)); } /* smarty */ $FORM->setSmartyParam('types', $rtypes); $FORM->setSmartyParam('covers', $folding->isImagesFactoryEnabled()); /* table */ $TABLE = null; $DBROW = null; if ($folding->getTableName()) { $TABLE = TableExporter::inst()->getTable($folding->getTableName()); //TODO - выкинуто //$DBROW = $TABLE->getFoldingDbRec($folding, $fident); } $FORM->setSmartyParam('table', $TABLE); $FORM->setSmartyParam('row', $DBROW); if (!$DBROW) { $FORM->removeButton(FORM_AdminFoldingEditForm::BUTTON_DELETE_ALL); } /* * Навигация */ $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->setCurrent($fident); break; } PsDefines::setReplaceFormulesWithImages(false); echo $this->getFoldedEntity()->fetchTpl($PARAMS); }