Вывод количества фотографий и фотоальбомов — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 8: | Строка 8: | ||
public function getPhotosInAlbumCount ($parentId) { | public function getPhotosInAlbumCount ($parentId) { | ||
$maxDepth = 99; | $maxDepth = 99; | ||
− | return self::getPagesCount ($parentId, 'photoalbum-photo', $maxDepth); | + | return self::getPagesCount($parentId, 'photoalbum-photo', $maxDepth); |
} | } | ||
public function getSubAlbumsCount ($parentId) { | public function getSubAlbumsCount ($parentId) { | ||
− | return self::getPagesCount ($parentId, 'photoalbum-album', 1); | + | return self::getPagesCount($parentId, 'photoalbum-album', 1); |
} | } | ||
Строка 44: | Строка 44: | ||
</ul> | </ul> | ||
<h2>TPL-шаблонизатор</h2> | <h2>TPL-шаблонизатор</h2> | ||
+ | Примеры вызовов: | ||
+ | <source lang="html4strict"> | ||
+ | %custom getPhotosInAlbumCount(%pid%)% | ||
+ | %custom getPhotosInAlbumCount('22')% | ||
+ | %custom getSubAlbumsCount(%pid%)% | ||
+ | %custom getSubAlbumsCount('22')% | ||
+ | </source> | ||
<h2>XSLT-шаблонизатор</h2> | <h2>XSLT-шаблонизатор</h2> | ||
+ | Примеры вызовов: | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', page/@id))/udata"/> | ||
+ | <xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', '22'))/udata"/> | ||
+ | <xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', page/@id))/udata"/> | ||
+ | <xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', '22'))/udata"/> | ||
+ | </source> |
Текущая версия на 08:49, 28 апреля 2014
Актуально для версии 2.9.6
Задача: Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.
Реализация:
В файл \classes\modules\custom.php добавим код макросов getPhotosInAlbumCount() и getSubAlbumsCount(), а также вспомогательного метода getPagesCount().
public function getPhotosInAlbumCount ($parentId) {
$maxDepth = 99;
return self::getPagesCount($parentId, 'photoalbum-photo', $maxDepth);
}
public function getSubAlbumsCount ($parentId) {
return self::getPagesCount($parentId, 'photoalbum-album', 1);
}
protected function getPagesCount($parentId, $hierarchyTypeModuleMethod, $depth) {
if ( !$parentId ) {
$parentId = getRequest('param0');
}
if ( !$depth || !is_numeric($depth) ) {
$depth = 0;
}
list($typeModule, $typeMethod) = explode('-', $hierarchyTypeModuleMethod);
$hierarchyTypesColl = umiHierarchyTypesCollection::getInstance();
$hierarchyType = $hierarchyTypesColl->getTypeByName($typeModule, $typeMethod);
if ( $hierarchyType instanceof iumiHierarchyType ) {
$hierarchyTypeId = $hierarchyType->getId();
$hierarchy = umiHierarchy::getInstance();
$onlyActive = false;
$withUnVisible = true;
$childsCount = $hierarchy->getChildsCount($parentId, $onlyActive, $withUnVisible, $depth, $hierarchyTypeId);
return intval( $childsCount );
}
return 0;
}
- Макрос getPhotosInAlbumCount() в качестве параметра принимает единственный параметр $parentId - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.
- Макрос getSubAlbumsCount() в качестве параметра принимает единственный параметр $parentId - id родительского фотоальбома, и возвращает количество альбомов в нем.
TPL-шаблонизатор
Примеры вызовов:
%custom getPhotosInAlbumCount(%pid%)%
%custom getPhotosInAlbumCount('22')%
%custom getSubAlbumsCount(%pid%)%
%custom getSubAlbumsCount('22')%
XSLT-шаблонизатор
Примеры вызовов:
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', page/@id))/udata"/>
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', '22'))/udata"/>
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', page/@id))/udata"/>
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', '22'))/udata"/>