Определение страницы с которой была сделана виртуальная копия
Актуально для версии 20
Задача: По id виртуальной копии страницы определять id исходной страницы.
Реализация:
Виртуальной копия страницы - это страница, которая может иметь свои: псевдостатический адрес, название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям "h1", "title", "Контент" и т.д., то есть источником данных виртуальной копии будет объект исходной страницы.
В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: getObjectInstances
Добавим в файл /classes/components/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 getSourcePageId(%id%)%
,где %id% - id страницы.
XSLT-шаблонизатор
<xsl:variable name="first_id" select="document(concat('udata://custom/getSourcePageId/' , $page-id))/udata" />
$page-id - определенная переменная с id страницы.