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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
Используем кастомный макрос, который надо прописать в файл
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Написание кастомных макросов]]
~classes/modules/custom.php, после слов
+
'''Актуально для версии 2.9.6'''<br/><br/>
//TODO: Write your own macroses here:
+
'''Задача:''' Вывести информацию об авторе страницы <br/><br/>
<pre>
+
'''Реализация:'''
  public function autorname($id = false) {
 
      if (!$id || !umiHierarchy::getInstance()->getElement($id)) {return "";}   
 
      $c = func_num_args();
 
      $args = func_get_args();
 
      $x =0;
 
      if ($c >1 ) $x = $args[1];
 
        $object = umiHierarchy::getInstance()->getElement($id)->getObject();
 
        $autor_id = $object->getOwnerId();
 
        $object_aut = umiObjectsCollection::getInstance()->getObject($autor_id);
 
        $name = $object_aut->getName();
 
        $fname = $object_aut->getValue("fname");
 
        if ($x == 1){return $fname;}
 
        return $name;
 
  }
 
       
 
</pre>      
 
Макрос принимает один обязательный параметр: id - любой страницы,
 
и второй необязательный параметр, если он =1, то выводится имя
 
автора (владельца) страницы, по умолчанию выводится логин.
 
       
 
пример вызова:
 
<pre>
 
%custom autorname(%id%)%
 
</pre>
 
       
 
или
 
<pre>
 
%custom autorname(%id%,1)%
 
</pre>
 
  
[[Категория:Написание кастомных макросов]]
+
 
 +
В файл ~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>