Определение страницы с которой была сделана виртуальная копия — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов При создании виртуальной копии, создается еще одна …») |
(нет различий)
|
Версия 03:47, 29 августа 2011
При создании виртуальной копии, создается еще одна страница, которая может иметь свой 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 страницы.