Способ не тестировался на высоконагруженных частопосещаемых галереях с кол-вом фоток чуть более чем дофига.
перед правками не забывайте делать бэкапы!!11
Итак, проблема аналогична проблеме вывода количества статей во вложенных категориях: не выводит кол-во фоток во вложенных фотогалереях.
Как решил проблему я:
1. создаём колонку в таблице cms_photo_albums:
в таблицу cms_photo_albums добавить child_ids типа varchar(200)
2. правим файл
/admin/components/photos/backend.php — для сохранения категорий детей при правке категорий галереи через админку
в двух местах, после строки
$album['parent_id'] = cmsCore::request('parent_id', 'int');
вставляем код
//!---ищем детей
//1 уровень
$sql1 = "SELECT id FROM cms_photo_albums WHERE parent_id = '".cmsCore::request('item_id', 'int')."'";
$result1 = $inDB->query($sql1);
$innercats="";
if ($inDB->num_rows($result1)) {
while($innercat1 = $inDB->fetch_assoc($result1)){
$innercats = $innercats.", ".(int)$innercat1['id'];
}
}
$album['child_ids'] = $innercats;
итак. у нас теперь в базе есть (будут) перечислены вложенные категории в таблице
3. вывод. правим файл
/core/classes/photo.class.php
находим функцию
public function getAlbums($parent_id=0, $differ='', $recurse=false){
перед ней добавляем новую
// ============================================================================ //
/**
* Возвращает кол-во фоток в перечисленных через запятую альбомах ($parents_ids)
* @return array $albums
*/
public function getChildAlbumsPhotocount($parents_ids){
$sql = "SELECT count(*) FROM cms_photo_files WHERE album_id IN (".$parents_ids.")";
$result = $this->inDB->query($sql);
}
и чуть ниже в функции
public function getAlbums($parent_id=0, $differ='', $recurse=false){
замените блок
while ($album = $this->inDB->fetch_assoc($result)){
$album['file'] = $album['iconurl'] ? $album['iconurl'] : ($album['file'] ? $album['file'] : 'no_image.png');
$album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
$albums[] = $album;
}
на
while ($album = $this->inDB->fetch_assoc($result)){
$album['file'] = $album['iconurl'] ? $album['iconurl'] : ($album['file'] ? $album['file'] : 'no_image.png');
$album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
if($parent_id>0)
{
$child=$album['id'];
if(!empty($album['child_ids'])) $child.=", ".$album['child_ids']; $album['content_count']=$this->getChildAlbumsPhotocount($child);
}
$albums[] = $album;
}
вроде ничего не забыл.
не забывайте делать бэкапы!!11