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

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

Версия 11:25, 21 апреля 2014

Актуально для версии 2.9.6

Задача: Вывести информацию об авторе страницы

Реализация:


В файл ~classes/modules/custom.php добавим определение макроса getPageAuthorInfo():

/**
* Возвращает данные об авторе страницы
* @param integer $pageId id страницы
* @param string $template шаблон отображения результатов макроса
* @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 страницы, информацию об авторе которой нужно получить.
  • Второй параметр - имя шаблона, по которому будут отображаться результаты.

TPL-шаблонизатор

Пример вызова:

%%

XSLT-шаблонизатор