Определение страницы с которой была сделана виртуальная копия

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

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

Задача: По id виртуальной копии страницы определять id исходной страницы.

Реализация:
Виртуальной копия страницы - это страница, которая может иметь свои: псевдостатический адрес, название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям "h1", "title", "Контент" и т.д., то есть источником данных виртуальной копии будет объект исходной страницы.

В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: getObjectInstances


Добавим в файл classes/modules/custom.php следующий метод:

  public function getSourcePageId($pageId = false) {
     if ( !$pageId ) {
          $pageId = getRequest('param0');
     }
     $hierarchy = umiHierarchy::getInstance();
     //экземпляр страницы
     $page = $hierarchy->getElement($pageId);
     if( $page instanceof umiHierarchyElement ){
         //objectId источника данных
         $objectId = $page->getObjectId();
         // список всех страниц, которые используют данный объект
         $pageIdsList = $hierarchy->getObjectInstances($objectId);
         
         if ( isset($pageIdsList[0]) ) {
             return $pageIdsList[0];
         }
     }
     return $pageId;    
  }

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

%custom first_id(%id%)%

,где %id% - id страницы.

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

<xsl:variable name="first_id" select="document(concat('udata://custom/first_id/' , $page-id))/udata" />

$page-id - определенная переменная с id страницы.