Вывод автора страницы — различия между версиями
Материал из Umicms
Ver (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Написание кастомных макросов]] | |
− | ~classes/modules/custom.php | + | '''Актуально для версии 2.9.6'''<br/><br/> |
− | + | '''Задача:''' Вывести информацию об авторе страницы <br/><br/> | |
+ | '''Реализация:''' | ||
+ | |||
+ | |||
+ | В файл ~classes/modules/custom.php добавим определение макроса getPageAuthorInfo(): | ||
+ | |||
<source lang="php"> | <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> | </source> | ||
− | Макрос принимает | + | Макрос принимает два параметра: |
− | + | <ul> | |
− | + | <li> | |
− | + | Первый параметр - id страницы, информацию об авторе которой нужно получить. | |
− | + | </li> | |
− | < | + | <li> |
− | %custom | + | Второй параметр - имя шаблона, по которому будут отображаться результаты, по умолчанию 'author'. |
− | </ | + | </li> |
− | + | </ul> | |
− | + | <h2>TPL-шаблонизатор</h2> | |
− | < | + | Примеры вызова: |
− | %custom | + | <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>