Вывод автора страницы

Материал из 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>