Определение страницы с которой была сделана виртуальная копия
Материал из Umicms
При создании виртуальной копии, создается еще одна страница, которая может иметь свой 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 страницы.
