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