Вывод количества фотографий в фотоальбоме

Материал из Umicms
Версия от 11:51, 11 апреля 2014; Stexe (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск


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

Задача: Вывести количество фотографий в фотоальбоме

Реализация:
Напишем custom макрос, который будет возвращать количество фотографий в фотоальбоме.
В файл \classes\modules\custom.php добавим определение макроса getPhotosCount():

/* Возвращает количество фотографий в фотоальбоме
 * Параметр $photoalbumPath - путь до фотоальбома или его id
 */
public function getPhotosCount( $photoalbumPath )
{
   $photoalbumPath = ( $photoalbumPath ? $photoalbumPath : getRequest('param0'));
   
   //По пути до фотоальбома находим id соответствующего элемента
   $photoalbum_id = 0;
   $hierarchy = umiHierarchy::getInstance();
   if ( !is_numeric( $photoalbumPath ) )
   {
	   $photoalbum_id = $hierarchy->getIdByPath( $photoalbumPath );
   }else
   {
	   $photoalbum_id = $photoalbumPath;
   }
   
   //Если тип найденного элемента не фотоальбом, возвращаем 0
   $photoalbum_element = null;
   $photoalbum_element = $hierarchy->getElement( $photoalbum_id );
   if ( !( $photoalbum_element instanceof iUmiHierarchyElement ) )
   {
	   return 0;
   }
   //Получаеем модуль и метод базового типа
   $photoalbum_basetype_module = $photoalbum_element->getModule();
   $photoalbum_basetype_method = $photoalbum_element->getMethod();
   
   if ( $photoalbum_basetype_module !== 'photoalbum' ||
		$photoalbum_basetype_method !== 'album' ){
		return 0;
   }
   
   //Получаем id базового типа фотографий
   $objectTypesCollection = umiObjectTypesCollection::getInstance();
   
   $photo_basetype_id = $objectTypesCollection->getBaseType( 'photoalbum', 'photo' );
   $photo_basetype = $objectTypesCollection->getType( $photo_basetype_id );
   //Получаем id иерархического типа фотографий
   $photo_hierarchy_type_id = $photo_basetype->getHierarchyTypeId();
   
   if ( $photo_basetype_id === false )
   {
	   return 0;
   }
   
   //Получаем количество фотографий в фотоальбоме 
   $photos_count = 0;
   
   $only_active_photos = false;
   $allow_unvisible_photos = true;
   $hierarchy_depth = 0;
   
   $photos_count = $hierarchy->getChildsCount( $photoalbum_id, $only_active_photos, 
					           $allow_unvisible_photos, $hierarchy_depth, 
				                   $photo_hierarchy_type_id );
   //Возвращаем полученный результат
   return $photos_count;
}

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

Для вывода количества фотографий в фотоальбоме можно произвести вызов макроса getPhotosCount() при условии, что вместо %id% будут подставляться id фотоальбомов, следующим образом:

%custom getPhotosCount( %id% )%

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

Для вывода количества фотографий в фотоальбоме можно произвести вызов макроса getPhotosCount() при условии, что вместо @id будут подставляться id фотоальбомов, следующим образом:

<xsl:value-of select="document(concat('udata://custom/getPhotosCount/', @id))/udata"/>