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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «category:Написание кастомных макросов Если необходимо вывести фотографию случайно выбранн…»)
 
Строка 1: Строка 1:
[[category:Написание кастомных макросов]]
+
[[Категория:Написание кастомных макросов]][[Категория:Верстка в TPL]]
Если необходимо вывести фотографию случайно выбранного объекта каталога, то для этого можно воспользоваться кастомным макросом, в котором относительно раздела каталога будет определен случайный id объекта каталога (может быть и другого типа страница) и потом поставлен вызов макроса data getProperty. В макрос getProperty передадим такие параметры как id полученного объекта каталога и идентификатор поля с изображением. Кастомный макрос пропишем в ~classes/modules/custom.php
+
'''Актуально для версии 2.9.6'''<br/><br/>
 +
'''Задача:''' Выводить содержимое какого-либо поля случайной страницы.<br/><br/>
 +
'''Реализация:'''
 +
 
 +
В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getRandomElementPropValue()''':
 
<source lang="php">
 
<source lang="php">
public function rand($parentId) {
+
public function getRandomElementPropValue($parentId, $propName = false, $template = 'default') {
  if(!$hierarchy = umiHierarchy::getInstance()->getChilds($parentId,false,true,1)) return;
+
if ( !$parentId ) {
  $rand_value = array_rand($hierarchy);
+
$parentId = getRequest('param0');
  return "%data getProperty({$rand_value},'photo')%";                                                                              
+
}
 +
if ( !$propName ) {
 +
$propName = getRequest('param1');
 +
}
 +
$onlyActive = false;
 +
$childElements = array();
 +
$childElements = umiHierarchy::getInstance()->getChildIds($parentId, $onlyActive);
 +
$childElementsCount = count($childElements);
 +
 +
if ( $childElementsCount > 0 ) {
 +
$randomElementIndex = mt_rand (0, $childElementsCount - 1);
 +
$randomElementId = $childElements[$randomElementIndex];
 +
$dataModule = cmsController::getInstance()->getModule('data');
 +
return $dataModule->getProperty($randomElementId, $propName, $template);
 +
}
 +
 
}
 
}
 
</source>
 
</source>
 +
Данный макрос будет работать только при использовании TPL-шаблонизатора.<br/>
 +
Макрос '''getRandomElementPropValue()''' возвращает содержимое поля с идентификатором '''$propName''' случайной страницы по шаблону '''$template''', которая является дочерней по отношению к странице с id = '''$parentId'''.<br/>
  
Пример вызова:
+
Пример вызова макроса:
<source lang="php">
+
<source lang="html4strict">
%custom rang(46)%
+
%custom getRandomElementPropValue('48','h1')%
 
</source>
 
</source>
 
46 – id раздела каталога, в котором находятся объекты каталога.
 

Версия 08:37, 27 апреля 2014

Актуально для версии 2.9.6

Задача: Выводить содержимое какого-либо поля случайной страницы.

Реализация:

В файл \classes\modules\custom.php добавим код custom макроса getRandomElementPropValue():

public function getRandomElementPropValue($parentId, $propName = false, $template = 'default') {
	if ( !$parentId ) {
		$parentId = getRequest('param0');
	}
	if ( !$propName ) {
		$propName = getRequest('param1');
	}
	$onlyActive = false;
	$childElements = array();
	$childElements = umiHierarchy::getInstance()->getChildIds($parentId, $onlyActive);
	$childElementsCount = count($childElements);
	
	if ( $childElementsCount > 0 ) {
		$randomElementIndex = mt_rand (0, $childElementsCount - 1);
		$randomElementId = $childElements[$randomElementIndex];
		$dataModule = cmsController::getInstance()->getModule('data');
		return $dataModule->getProperty($randomElementId, $propName, $template);
	}
	
}

Данный макрос будет работать только при использовании TPL-шаблонизатора.
Макрос getRandomElementPropValue() возвращает содержимое поля с идентификатором $propName случайной страницы по шаблону $template, которая является дочерней по отношению к странице с id = $parentId.

Пример вызова макроса:

%custom getRandomElementPropValue('48','h1')%