Определение страницы с которой была сделана виртуальная копия — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов При создании виртуальной копии, создается еще одна …») |
Stexe (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[category:Написание кастомных макросов]] | [[category:Написание кастомных макросов]] | ||
− | + | '''Актуально для версии 2.9.6'''<br/><br/> | |
− | + | '''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/> | |
− | + | '''Реализация:'''<br/> | |
+ | Виртуальной копия страницы - это страница, которая может иметь свои: псевдостатический адрес, название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям "h1", "title", "Контент" и т.д., то есть источником данных виртуальной копии будет объект исходной страницы. | ||
В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: [http://api.umi-cms.ru/api.umiHierarchy.getObjectInstances.html getObjectInstances] | В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: [http://api.umi-cms.ru/api.umiHierarchy.getObjectInstances.html getObjectInstances] | ||
Строка 9: | Строка 10: | ||
Добавим в файл '''classes/modules/custom.php''' следующий метод: | Добавим в файл '''classes/modules/custom.php''' следующий метод: | ||
<source lang="php"> | <source lang="php"> | ||
− | public function | + | public function getSourcePageId($pageId = false) { |
− | $ | + | if ( !$pageId ) { |
− | $ | + | $pageId = getRequest('param0'); |
+ | } | ||
+ | $hierarchy = umiHierarchy::getInstance(); | ||
//экземпляр страницы | //экземпляр страницы | ||
− | $ | + | $page = $hierarchy->getElement($pageId); |
− | if($ | + | if( $page instanceof umiHierarchyElement ){ |
− | + | //objectId источника данных | |
− | $ | + | $objectId = $page->getObjectId(); |
// список всех страниц, которые используют данный объект | // список всех страниц, которые используют данный объект | ||
− | $ | + | $pageIdsList = $hierarchy->getObjectInstances($objectId); |
− | + | ||
− | return $ | + | if ( isset($pageIdsList[0]) ) { |
− | } | + | return $pageIdsList[0]; |
+ | } | ||
+ | } | ||
+ | return $pageId; | ||
} | } | ||
</source> | </source> | ||
− | + | <h2>TPL-шаблонизатор</h2> | |
− | |||
<pre> | <pre> | ||
− | %custom first_id(%id%)% | + | %custom first_id(%id%)% |
</pre> | </pre> | ||
+ | ,где %id% - id страницы. | ||
+ | <h2>XSLT-шаблонизатор</h2> | ||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<xsl:variable name="first_id" select="document(concat('udata://custom/first_id/' , $page-id))/udata" /> | <xsl:variable name="first_id" select="document(concat('udata://custom/first_id/' , $page-id))/udata" /> | ||
</source> | </source> | ||
$page-id - определенная переменная с id страницы. | $page-id - определенная переменная с id страницы. |
Версия 06:22, 1 июня 2014
Актуально для версии 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 страницы.