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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «__TOC__ == Задача == Необходимо вывести случайное изображение изо всех фотогалерей. == Решение =…»)
 
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
__TOC__
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]
== Задача ==
+
'''Актуально для версии 2.9.6'''<br/><br/>
Необходимо вывести случайное изображение изо всех фотогалерей.
+
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/>
 +
'''Реализация:'''
  
== Решение ==
+
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):
В данном варианте мы будем использовать выборки с помощью [[umiSelection]]. Кастомный макрос будет возвращать полный путь изображения:
 
  
 
<source lang="php">
 
<source lang="php">
public function phtShowRandomPhotoLink() {
+
public function getLinkToRandomPhoto() {
// Получаем id типа данных
+
$photos = new selector('pages');
$objectTypes = umiObjectTypesCollection::getInstance();
+
$photos->types('object-type')->name('photoalbum', 'photo');
$objectTypeId = $objectTypes->getBaseType("photoalbum", "photo");
+
$photos->order('rand');
 
+
$randomPhoto = $photos->first;
// Создаём выборку
+
$sel = new umiSelection;
+
if ( $randomPhoto instanceof iumiHierarchyElement ) {
$sel->addObjectType($objectTypeId);
+
$imagePath = $randomPhoto->getValue('photo')->getFilePath();
$sel->setActiveFilter(true);
+
$imagePath = preg_replace('/^\./', '', $imagePath, 1);
 
+
return $imagePath;
// Получаем результаты
+
}
$res = umiSelectionsParser::runSelection($sel);
+
return '';
$cnt = umiSelectionsParser::runSelectionCounts($sel);
+
}
 
 
// Получаем случайный id из результатов выборки
 
$phtId = $res[mt_rand(0, $cnt - 1)];
 
 
// Получаем объект фотографии
 
$objects = umiObjectsCollection::getInstance();
 
$phtObject = $objects->getObject($phtId);
 
 
 
// Проверяем, получили мы объект или нет
 
if($phtObject instanceof umiObject){
 
// Получаем значение поля 'photo'
 
$link = $phtObject->getValue('photo');
 
} else {
 
return false;
 
}
 
 
 
return "http://%domain%".$link;
 
}
 
 
 
 
</source>
 
</source>
 
+
Макрос '''getLinkToRandomPhoto(''') возвращает путь до изображения случайной фотографии (элемент иерархии).
== Пример использования ==
+
<h2>TPL-шаблонизатор</h2>
 
+
Пример вызова макроса:
 
<source lang="html4strict">
 
<source lang="html4strict">
   <img src="%custom phtShowRandomPhotoLink()%" alt="photo" title="random photo" />
+
   <img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" />
 +
</source>
 +
<h2>XSLT-шаблонизатор</h2>
 +
Пример вызова макроса:
 +
<source lang="xml">
 +
  <img src="{document('udata://custom/getLinkToRandomPhoto')/udata}" alt="photo" title="random photo" />
 
</source>
 
</source>
 
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]
 

Текущая версия на 09:21, 27 апреля 2014

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

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

Реализация:

В данном случае мы будем использовать механизм формирования выборок selector.
В файл \classes\modules\custom.php добавим код custom макроса getLinkToRandomPhoto():

public function getLinkToRandomPhoto() {
	$photos = new selector('pages');
	$photos->types('object-type')->name('photoalbum', 'photo');
	$photos->order('rand');
	$randomPhoto = $photos->first;
	
	if ( $randomPhoto instanceof iumiHierarchyElement ) {
		$imagePath = $randomPhoto->getValue('photo')->getFilePath();
		$imagePath = preg_replace('/^\./', '', $imagePath, 1);
		return $imagePath;
	}
	return '';
}

Макрос getLinkToRandomPhoto() возвращает путь до изображения случайной фотографии (элемент иерархии).

TPL-шаблонизатор

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

  <img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" />

XSLT-шаблонизатор

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

  <img src="{document('udata://custom/getLinkToRandomPhoto')/udata}" alt="photo" title="random photo" />