Вывод количества фотографий в фотоальбоме
Материал из Umicms
Актуально для версии 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"/>