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

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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"/>