Получение значений полей у родительских страниц любого уровня — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: « category:Написание кастомных макросов Используем кастомный макрос, который пропишем в фай…»)
 
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[category:Написание кастомных макросов]]
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Написание кастомных макросов]]
Используем кастомный макрос, который пропишем в файл  
+
'''Актуально для версии 2.9.6'''<br/><br/>
~classes/modules/custom.php, после слов
+
'''Задача:''' Реализовать функционал получения значения полей родительских страниц любого уровня вложенности.<br/><br/>
//TODO: Write your own macroses here.
+
'''Реализация:''' <br/>
 +
 
 +
 
 +
 
 +
 
 +
В файл '''~classes/modules/custom.php''' добавим определение custom макроса valueParent():
 +
 
  
 
<source lang="php">
 
<source lang="php">
  public function valueParent($id,$level,$field){
+
public function valueParent($id, $level, $field) {
        $hierarchy = umiHierarchy::getInstance();
+
$hierarchy = umiHierarchy::getInstance();
    if ($idParents = $hierarchy->getAllParents($id)){
+
if ($idParents = $hierarchy->getAllParents($id)) {
        if(!array_key_exists($level,$idParents)) return;
+
if (!array_key_exists($level, $idParents))
        $idParent = $idParents[$level];
+
return "";
   
+
$idParent = $idParents[$level];
    if ($field == "url"){
+
 
    $content_inst = cmsController::getInstance()->getModule("content");
+
if ($field == "url") {
      return $content_inst->get_page_url($idParent);
+
$content_inst = cmsController::getInstance()->getModule("content");
    }
+
return $content_inst->get_page_url($idParent);
    if(!$value_field = $hierarchy->getElement($idParent)->getObject()->getValue($field)) return;
+
}
    return $value_field;
+
if (!$value_field = $hierarchy->getElement($idParent)->getValue($field))
    }
+
return "";
   
+
return $value_field;
    return "";
+
}
  
  }
+
return "";
 +
}
 
</source>
 
</source>
 
 
Пример вызова макроса: %custom valueParent(%pid%, 2, h1)%
 
  
 +
Макрос '''valueParent()''' возвращает значение поля с идентификатором '''$field''', страницы которая находится на $'''level''' уровне вложенности в иерархии и является родительской по отношению к странице с id = '''$id'''.
 +
 +
<h2>TPL-шаблонизатор</h2>
 +
 +
Пример вызова макроса:
 +
<source lang="html4strict">
 +
%custom valueParent(%pid%, 2, h1)%
 +
</source>
 +
<ul>
 +
<li>
 +
Параметр '''$id''':
 
%pid% - В данном случае id текущей страницы, относительно которой будем брать
 
%pid% - В данном случае id текущей страницы, относительно которой будем брать
 
родительскую страницу.
 
родительскую страницу.
 
+
</li>
 +
<li>Параметр '''$level''':
 
2 - уровень вложенности родительской страницы от корня сайта.  
 
2 - уровень вложенности родительской страницы от корня сайта.  
  
 
1 - самый верхний уровень (основные родительские страницы в структуре сайта)
 
1 - самый верхний уровень (основные родительские страницы в структуре сайта)
 
+
</li>
 +
<li>Параметр '''$field''':
 
h1 - идентификатор поля, значение которого надо получить.
 
h1 - идентификатор поля, значение которого надо получить.
 
Если третьим параметром передан "url", то будет получена ссылка на страницу
 
Если третьим параметром передан "url", то будет получена ссылка на страницу
 
родителя.
 
родителя.
 +
</li>
 +
</ul>
 +
<h2>XSLT-шаблонизатор</h2>
 +
Пример вызова макроса:
 +
<source lang="xml">
 +
<xsl:value-of select="document(concat('udata://custom/valueParent/', page/@id,'/2/h1'))/udata"/>
 +
</source>

Текущая версия на 05:54, 27 апреля 2014

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

Задача: Реализовать функционал получения значения полей родительских страниц любого уровня вложенности.

Реализация:



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


public function valueParent($id, $level, $field) {
	$hierarchy = umiHierarchy::getInstance();
	if ($idParents = $hierarchy->getAllParents($id)) {
		if (!array_key_exists($level, $idParents))
			return "";
		$idParent = $idParents[$level];

		if ($field == "url") {
			$content_inst = cmsController::getInstance()->getModule("content");
			return $content_inst->get_page_url($idParent);
		}
		if (!$value_field = $hierarchy->getElement($idParent)->getValue($field))
			return "";
		return $value_field;
	}

	return "";
}

Макрос valueParent() возвращает значение поля с идентификатором $field, страницы которая находится на $level уровне вложенности в иерархии и является родительской по отношению к странице с id = $id.

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

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

%custom valueParent(%pid%, 2, h1)%
  • Параметр $id: %pid% - В данном случае id текущей страницы, относительно которой будем брать родительскую страницу.
  • Параметр $level: 2 - уровень вложенности родительской страницы от корня сайта. 1 - самый верхний уровень (основные родительские страницы в структуре сайта)
  • Параметр $field: h1 - идентификатор поля, значение которого надо получить. Если третьим параметром передан "url", то будет получена ссылка на страницу родителя.

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

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

<xsl:value-of select="document(concat('udata://custom/valueParent/', page/@id,'/2/h1'))/udata"/>