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

Материал из Umicms
Версия от 03:47, 29 августа 2011; VITL' (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов При создании виртуальной копии, создается еще одна …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск


При создании виртуальной копии, создается еще одна страница, которая может иметь свой alt_name, значение поля Название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям h1, title, content и т.д., т.е. у страницы будет тот же самый object-id, что и у исходной страницы. object-id страницы можно определить добавив в адресной строке браузера .xml: /admin/content/edit/12/.xml

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


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

  public function first_id($id) {
     $page_id = (int) $id;
     $h = umiHierarchy::getInstance();
     //экземпляр страницы
     $element = $h->getElement($page_id);
     if($element){
     // object_id источника данных
         $object_id = $element->getObjectId();
         // список всех страниц, которые используют данный объект
         $arr_id = $h->getObjectInstances($object_id);
         // первая страница, это страница с наименьшим page_id, т.е. исходная страница
         return $arr_id[0];
     }else  return $page_id;    
  }

В tpl-шаблоне вызов будет следующий:

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

В xsl-шаблоне:

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

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