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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: « category:Написание кастомных макросов При создании виртуальной копии, создается еще одна …»)
 
Строка 1: Строка 1:
 
  [[category:Написание кастомных макросов]]
 
  [[category:Написание кастомных макросов]]
 
+
'''Актуально для версии 2.9.6'''<br/><br/>
При создании виртуальной копии, создается еще одна страница, которая может иметь свой alt_name, значение поля Название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям h1, title, content и т.д., т.е. у страницы будет тот же самый object-id, что и у исходной страницы. object-id страницы можно определить добавив в адресной строке браузера .xml:
+
'''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/>
'''/admin/content/edit/12/.xml'''
+
'''Реализация:'''<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 first_id($id) {
+
   public function getSourcePageId($pageId = false) {
     $page_id = (int) $id;
+
     if ( !$pageId ) {
     $h = umiHierarchy::getInstance();
+
          $pageId = getRequest('param0');
 +
    }
 +
     $hierarchy = umiHierarchy::getInstance();
 
     //экземпляр страницы
 
     //экземпляр страницы
     $element = $h->getElement($page_id);
+
     $page = $hierarchy->getElement($pageId);
     if($element){
+
     if( $page instanceof umiHierarchyElement ){
    // object_id источника данных
+
        //objectId источника данных
         $object_id = $element->getObjectId();
+
         $objectId = $page->getObjectId();
 
         // список всех страниц, которые используют данный объект
 
         // список всех страниц, которые используют данный объект
         $arr_id = $h->getObjectInstances($object_id);
+
         $pageIdsList = $hierarchy->getObjectInstances($objectId);
         // первая страница, это страница с наименьшим page_id, т.е. исходная страница
+
          
         return $arr_id[0];
+
         if ( isset($pageIdsList[0]) ) {
     }else  return $page_id;     
+
            return $pageIdsList[0];
 +
        }
 +
     }
 +
    return $pageId;     
 
   }
 
   }
 
</source>
 
</source>
 
+
<h2>TPL-шаблонизатор</h2>
В tpl-шаблоне вызов будет следующий:
 
 
<pre>
 
<pre>
%custom first_id(%id%)%, где %id% - id страницы.
+
%custom first_id(%id%)%
 
</pre>
 
</pre>
 +
,где %id% - id страницы.
 +
<h2>XSLT-шаблонизатор</h2>
  
В xsl-шаблоне:
 
 
<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 страницы.