Вывод количества фотографий в фотоальбоме — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 2: | Строка 2: | ||
'''Актуально для версии 2.9.6'''<br/><br/> | '''Актуально для версии 2.9.6'''<br/><br/> | ||
− | '''Задача:''' <br/><br/> | + | '''Задача:''' Вывести количество фотографий в фотоальбоме<br/><br/> |
− | '''Реализация:''' | + | '''Реализация:''' <br/> |
+ | Напишем 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> | ||
− | + | Для вывода количества фотографий в фотоальбоме можно произвести вызов макроса getPhotosCount() при условии, что вместо %id% будут подставляться id фотоальбомов, следующим образом: | |
+ | <source lang="xml"> | ||
+ | %custom getPhotosCount( %id% )% | ||
+ | </source> | ||
<h2>XSLT-шаблонизатор</h2> | <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"/>