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

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

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

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

Реализация:

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

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


В файл ~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)->getObject()->getValue($field)) return;
		    return $value_field;
    }
    
    return ""; 

  }

Пример вызова макроса: %custom valueParent(%pid%, 2, h1)%

%pid% - В данном случае id текущей страницы, относительно которой будем брать родительскую страницу.

2 - уровень вложенности родительской страницы от корня сайта.

1 - самый верхний уровень (основные родительские страницы в структуре сайта)

h1 - идентификатор поля, значение которого надо получить. Если третьим параметром передан "url", то будет получена ссылка на страницу родителя.