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

Материал из Umicms
Перейти к:навигация, поиск
Строка 4: Строка 4:
 
'''Задача:''' Вывести количество фотографий в фотоальбоме<br/><br/>
 
'''Задача:''' Вывести количество фотографий в фотоальбоме<br/><br/>
 
'''Реализация:''' <br/>
 
'''Реализация:''' <br/>
Напишем custom макрос получения количества фотографий в фотоальбоме.<br/> В файл \classes\modules\custom.php добавим определение макроса getPhotosCount():
+
Напишем custom макрос, который будет возвращать количество фотографий в фотоальбоме.<br/> В файл \classes\modules\custom.php добавим определение макроса getPhotosCount():
 +
 
 +
<source lang="php">
 +
/* Возвращает количество фотографий в фотоальбоме
 +
* Параметр $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;
 +
}
 +
</source>
 
<h2>TPL-шаблонизатор</h2>
 
<h2>TPL-шаблонизатор</h2>
  
 
<h2>XSLT-шаблонизатор</h2>
 
<h2>XSLT-шаблонизатор</h2>

Версия 11:46, 11 апреля 2014


Актуально для версии 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-шаблонизатор

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