Вывод количества фотографий и фотоальбомов — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) м (переименовал «Вывод количества фотографий во всех подразделах» в «Вывод количества фотографий и фотоальбомов») |
Stexe (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]] | |
− | + | '''Актуально для версии 2.9.6'''<br/><br/> | |
− | + | '''Задача:''' Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.<br/><br/> | |
− | + | '''Реализация:''' | |
− | |||
+ | В файл \classes\modules\custom.php добавим код макросов '''getPhotosInAlbumCount()''' и '''getSubAlbumsCount()''', а также вспомогательного метода '''getPagesCount()'''. | ||
<source lang="php"> | <source lang="php"> | ||
− | + | 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; | ||
+ | |||
+ | } | ||
</source> | </source> | ||
− | + | <ul> | |
− | + | <li>Макрос '''getPhotosInAlbumCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.</li> | |
− | + | <li>Макрос '''getSubAlbumsCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество альбомов в нем.</li> | |
+ | </ul> | ||
+ | <h2>TPL-шаблонизатор</h2> | ||
− | + | <h2>XSLT-шаблонизатор</h2> |
Версия 08:45, 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 родительского фотоальбома, и возвращает количество альбомов в нем.