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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Как можно вывести количество фотографий, содержащихся в фотоальбоме? Для фотоальбома сра…»)
 
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
Как можно вывести количество фотографий, содержащихся в фотоальбоме?
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория: Написание кастомных макросов]]
  
Для фотоальбома сработает следующая конструкция:
+
'''Актуально для версии 2.9.6'''<br/><br/>
 +
'''Задача:''' Вывести количество фотографий в фотоальбоме<br/><br/>
 +
'''Реализация:''' <br/>
 +
Напишем custom макрос, который будет возвращать количество фотографий в фотоальбоме.<br/> В файл \classes\modules\custom.php добавим определение макроса getPhotosCount():
  
% photoalbum album(% id%, 'total')%
+
<source lang="php">
 
+
/* Возвращает количество фотографий в фотоальбоме
а в ~/tpls/photoalbum/total.tpl написать что-то вроде:
+
* Параметр $photoalbumPath - путь до фотоальбома или его id
 
+
*/
$FORMS['album_block'] = "(% total% фотографий)";
+
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>
 +
Для вывода количества фотографий в фотоальбоме можно произвести вызов макроса getPhotosCount() при условии, что вместо %id% будут подставляться id фотоальбомов, следующим образом:
 +
<source lang="xml">
 +
%custom getPhotosCount( %id% )%
 +
</source>
 +
<h2>XSLT-шаблонизатор</h2>
 +
Для вывода количества фотографий в фотоальбоме можно произвести вызов макроса getPhotosCount() при условии, что вместо @id будут подставляться id фотоальбомов, следующим образом:
 +
<source lang="xml">
 +
<xsl:value-of select="document(concat('udata://custom/getPhotosCount/', @id))/udata"/>
 +
</source>

Текущая версия на 11:51, 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-шаблонизатор

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

%custom getPhotosCount( %id% )%

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

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

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