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

Материал из Umicms
Версия от 09:10, 17 мая 2010; Ver (обсуждение | вклад) (Новая страница: «__TOC__ == Задача == Необходимо вывести случайное изображение изо всех фотогалерей. == Решение =…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача

Необходимо вывести случайное изображение изо всех фотогалерей.

Решение

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

		public function phtShowRandomPhotoLink() {
			// Получаем id типа данных
			$objectTypes = umiObjectTypesCollection::getInstance();
			$objectTypeId = $objectTypes->getBaseType("photoalbum", "photo");

			// Создаём выборку
			$sel = new umiSelection;
			$sel->addObjectType($objectTypeId);
			$sel->setActiveFilter(true);

			// Получаем результаты
			$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;
		}

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

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