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

Материал из Umicms
Перейти к:навигация, поиск
 
Строка 1: Строка 1:
 
  [[category:Написание кастомных макросов]]
 
  [[category:Написание кастомных макросов]]
'''Актуально для версии 2.9.6'''<br/><br/>
+
'''Актуально для версии 20'''<br/><br/>
 
'''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/>
 
'''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/>
 
'''Реализация:'''<br/>
 
'''Реализация:'''<br/>
Строка 8: Строка 8:
  
  
Добавим в файл '''classes/modules/custom.php''' следующий метод:
+
Добавим в файл '''/classes/components/custom.php''' следующий метод:
 
<source lang="php">
 
<source lang="php">
  public function getSourcePageId($pageId = false) {
+
public function getSourcePageId($pageId = false) {
    if ( !$pageId ) {
+
if ( !$pageId ) {
          $pageId = getRequest('param0');
+
$pageId = getRequest('param0');
    }
+
}
    $hierarchy = umiHierarchy::getInstance();
+
$hierarchy = umiHierarchy::getInstance();
    //экземпляр страницы
+
//экземпляр страницы
    $page = $hierarchy->getElement($pageId);
+
$page = $hierarchy->getElement($pageId);
    if( $page instanceof umiHierarchyElement ){
+
if ( $page instanceof umiHierarchyElement ){
        //objectId источника данных
+
//objectId источника данных
        $objectId = $page->getObjectId();
+
$objectId = $page->getObjectId();
        // список всех страниц, которые используют данный объект
+
// список всех страниц, которые используют данный объект
        $pageIdsList = $hierarchy->getObjectInstances($objectId);
+
$pageIdsList = $hierarchy->getObjectInstances($objectId);
       
+
 
        if ( isset($pageIdsList[0]) ) {
+
if ( isset($pageIdsList[0]) ) {
            return $pageIdsList[0];
+
return $pageIdsList[0];
        }
+
}
    }
+
}
    return $pageId;     
+
return $pageId;     
  }
+
}
 
</source>
 
</source>
 
<h2>TPL-шаблонизатор</h2>
 
<h2>TPL-шаблонизатор</h2>

Текущая версия на 14:57, 18 апреля 2019

Актуально для версии 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 страницы.