Вывод автора страницы — различия между версиями
Материал из Umicms
VITL' (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Написание кастомных макросов]] | |
− | + | '''Актуально для версии 2.9.6'''<br/><br/> | |
− | + | '''Задача:''' Вывести информацию об авторе страницы <br/><br/> | |
− | < | + | '''Реализация:''' |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | ||
− | |||
− | </ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[ | + | |
+ | В файл ~classes/modules/custom.php добавим определение макроса getPageAuthorInfo(): | ||
+ | |||
+ | <source lang="php"> | ||
+ | /** | ||
+ | * Возвращает данные об авторе страницы | ||
+ | * @param integer $pageId id страницы | ||
+ | * @param string $template шаблон отображения результатов макроса, по умолчанию 'author' | ||
+ | * @return Array данные автора | ||
+ | */ | ||
+ | public function getPageAuthorInfo($pageId = false, $template = 'author') { | ||
+ | if ( !$pageId ) { | ||
+ | $pageId = getRequest('param0'); | ||
+ | } | ||
+ | $umiHierarchy = umiHierarchy::getInstance(); | ||
+ | //Получаем экземпляр класса UmiHierarchyElement страницы с id = $pageId | ||
+ | $pageElement = $umiHierarchy->getElement( $pageId ); | ||
+ | |||
+ | if ( !( $pageElement instanceof iUmiHierarchyElement ) ) { | ||
+ | return ''; | ||
+ | } | ||
+ | //Получаем объект страницы (источник данных) | ||
+ | $pageSourceObject = $pageElement->getObject(); | ||
+ | //Получаем id владельца объекта | ||
+ | $authorId = $pageSourceObject->getOwnerId(); | ||
+ | $umiObjectsCollection = umiObjectsCollection::getInstance(); | ||
+ | $authorObject = $umiObjectsCollection->getObject( $authorId ); | ||
+ | |||
+ | if ( !( $authorObject instanceof iUmiObject ) ) { | ||
+ | return ''; | ||
+ | } | ||
+ | //Получаем необходимые данные автора страницы | ||
+ | $authorLogin = $authorObject->getName(); | ||
+ | $authorFname = $authorObject->getValue( "fname" ); | ||
+ | $authorLastName = $authorObject->getValue( "lname" ); | ||
+ | |||
+ | $authorInfo = array(); | ||
+ | $authorInfo['id'] = $authorId; | ||
+ | $authorInfo['login'] = $authorLogin; | ||
+ | $authorInfo['name'] = $authorFname; | ||
+ | $authorInfo['lastname'] = $authorLastName; | ||
+ | |||
+ | list( $authorDataBlock ) = def_module::loadTemplates('content/'.$template, 'author_data'); | ||
+ | return def_module::parseTemplate($authorDataBlock, $authorInfo); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Макрос принимает два параметра: | ||
+ | <ul> | ||
+ | <li> | ||
+ | Первый параметр - id страницы, информацию об авторе которой нужно получить. | ||
+ | </li> | ||
+ | <li> | ||
+ | Второй параметр - имя шаблона, по которому будут отображаться результаты, по умолчанию 'author'. | ||
+ | </li> | ||
+ | </ul> | ||
+ | <h2>TPL-шаблонизатор</h2> | ||
+ | Примеры вызова: | ||
+ | <source lang="html4strict"> | ||
+ | %custom getPageAuthorInfo( '2' )% | ||
+ | </source> | ||
+ | <source lang="html4strict"> | ||
+ | %custom getPageAuthorInfo( %id% )% | ||
+ | </source> | ||
+ | |||
+ | В директории tpls\content\ создадим файл author.tpl и добавим в него следующее содержимое: | ||
+ | <source lang="html4strict"> | ||
+ | <?php | ||
+ | $FORMS = array(); | ||
+ | $FORMS['author_data'] = <<<END | ||
+ | <div> | ||
+ | <h3>Автор</h3> | ||
+ | <span>%name% %lastname%</span> | ||
+ | </div> | ||
+ | END; | ||
+ | ?> | ||
+ | </source> | ||
+ | <h2>XSLT-шаблонизатор</h2> | ||
+ | Примеры вызова: | ||
+ | <source lang="xml"> | ||
+ | <xsl:apply-templates select="document('udata://custom/getPageAuthorInfo/2')"/> | ||
+ | </source> | ||
+ | <source lang="xml"> | ||
+ | <xsl:apply-templates select="document(concat('udata://custom/getPageAuthorInfo/', page/@id))"/> | ||
+ | </source> | ||
+ | Добавим шаблон отображения результатов макроса: | ||
+ | <source lang="xml"> | ||
+ | <xsl:template match="udata[@module='custom'][@method='getPageAuthorInfo']"> | ||
+ | <div> | ||
+ | <h3>Автор</h3> | ||
+ | <span><xsl:value-of select="concat(name, ' ', lastname)"/></span> | ||
+ | </div> | ||
+ | </xsl:template> | ||
+ | </source> |
Текущая версия на 11:34, 21 апреля 2014
Актуально для версии 2.9.6
Задача: Вывести информацию об авторе страницы
Реализация:
В файл ~classes/modules/custom.php добавим определение макроса getPageAuthorInfo():
/**
* Возвращает данные об авторе страницы
* @param integer $pageId id страницы
* @param string $template шаблон отображения результатов макроса, по умолчанию 'author'
* @return Array данные автора
*/
public function getPageAuthorInfo($pageId = false, $template = 'author') {
if ( !$pageId ) {
$pageId = getRequest('param0');
}
$umiHierarchy = umiHierarchy::getInstance();
//Получаем экземпляр класса UmiHierarchyElement страницы с id = $pageId
$pageElement = $umiHierarchy->getElement( $pageId );
if ( !( $pageElement instanceof iUmiHierarchyElement ) ) {
return '';
}
//Получаем объект страницы (источник данных)
$pageSourceObject = $pageElement->getObject();
//Получаем id владельца объекта
$authorId = $pageSourceObject->getOwnerId();
$umiObjectsCollection = umiObjectsCollection::getInstance();
$authorObject = $umiObjectsCollection->getObject( $authorId );
if ( !( $authorObject instanceof iUmiObject ) ) {
return '';
}
//Получаем необходимые данные автора страницы
$authorLogin = $authorObject->getName();
$authorFname = $authorObject->getValue( "fname" );
$authorLastName = $authorObject->getValue( "lname" );
$authorInfo = array();
$authorInfo['id'] = $authorId;
$authorInfo['login'] = $authorLogin;
$authorInfo['name'] = $authorFname;
$authorInfo['lastname'] = $authorLastName;
list( $authorDataBlock ) = def_module::loadTemplates('content/'.$template, 'author_data');
return def_module::parseTemplate($authorDataBlock, $authorInfo);
}
Макрос принимает два параметра:
- Первый параметр - id страницы, информацию об авторе которой нужно получить.
- Второй параметр - имя шаблона, по которому будут отображаться результаты, по умолчанию 'author'.
TPL-шаблонизатор
Примеры вызова:
%custom getPageAuthorInfo( '2' )%
%custom getPageAuthorInfo( %id% )%
В директории tpls\content\ создадим файл author.tpl и добавим в него следующее содержимое:
<?php
$FORMS = array();
$FORMS['author_data'] = <<<END
<div>
<h3>Автор</h3>
<span>%name% %lastname%</span>
</div>
END;
?>
XSLT-шаблонизатор
Примеры вызова:
<xsl:apply-templates select="document('udata://custom/getPageAuthorInfo/2')"/>
<xsl:apply-templates select="document(concat('udata://custom/getPageAuthorInfo/', page/@id))"/>
Добавим шаблон отображения результатов макроса:
<xsl:template match="udata[@module='custom'][@method='getPageAuthorInfo']">
<div>
<h3>Автор</h3>
<span><xsl:value-of select="concat(name, ' ', lastname)"/></span>
</div>
</xsl:template>