Вывод автора страницы — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 11: Строка 11:
 
* Возвращает данные об авторе страницы
 
* Возвращает данные об авторе страницы
 
* @param integer $pageId id страницы
 
* @param integer $pageId id страницы
* @param string $template шаблон отображения результатов макроса
+
* @param string $template шаблон отображения результатов макроса, по умолчанию 'author'
 
* @return Array данные автора
 
* @return Array данные автора
 
*/  
 
*/  
Строка 57: Строка 57:
 
</li>
 
</li>
 
<li>
 
<li>
Второй параметр - имя шаблона, по которому будут отображаться результаты.
+
Второй параметр - имя шаблона, по которому будут отображаться результаты, по умолчанию 'author'.
 
</li>
 
</li>
 
</ul>
 
</ul>
 
<h2>TPL-шаблонизатор</h2>
 
<h2>TPL-шаблонизатор</h2>
Пример вызова:
+
Примеры вызова:
 
<source lang="html4strict">
 
<source lang="html4strict">
%%
+
%custom getPageAuthorInfo( '2' )%
 +
</source>
 +
<source lang="html4strict">
 +
%custom getPageAuthorInfo( %id% )%
 
</source>
 
</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>
 
<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>