Вывод автора страницы
Материал из Umicms
Версия от 11:34, 21 апреля 2014; Stexe (обсуждение | вклад)
Актуально для версии 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>