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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «__TOC__ == Задача == Необходимо вывести случайное изображение изо всех фотогалерей. == Решение =…»)
 
Строка 1: Строка 1:
__TOC__
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Новости]]
== Задача ==
+
'''Актуально для версии 2.9.6'''<br/><br/>
Необходимо вывести случайное изображение изо всех фотогалерей.
+
'''Задача:''' Выводить путь до изображения случайной фотографии<br/><br/>
 +
'''Реализация:'''
 +
<h2>TPL-шаблонизатор</h2>
  
== Решение ==
+
<h2>XSLT-шаблонизатор</h2>
В данном варианте мы будем использовать выборки с помощью [[umiSelection]]. Кастомный макрос будет возвращать полный путь изображения:
 
  
<source lang="php">
 
public function phtShowRandomPhotoLink() {
 
// Получаем id типа данных
 
$objectTypes = umiObjectTypesCollection::getInstance();
 
$objectTypeId = $objectTypes->getBaseType("photoalbum", "photo");
 
  
// Создаём выборку
 
$sel = new umiSelection;
 
$sel->addObjectType($objectTypeId);
 
$sel->setActiveFilter(true);
 
  
// Получаем результаты
+
В данном варианте мы будем использовать выборки с помощью [[umiSelection]]. Кастомный макрос будет возвращать полный путь изображения:
$res = umiSelectionsParser::runSelection($sel);
 
$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 lang="php">
 +
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 '';
 +
}
 
</source>
 
</source>
  

Версия 09:12, 27 апреля 2014

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

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

Реализация:

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

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


В данном варианте мы будем использовать выборки с помощью umiSelection. Кастомный макрос будет возвращать полный путь изображения:

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 '';
}

Пример использования

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