Показать в родительской галерее кол-во фоток вложенных галерей

минихак для 1.10

#1 9 ноября 2012 в 03:18
Способ не тестировался на высоконагруженных частопосещаемых галереях с кол-вом фоток чуть более чем дофига.

перед правками не забывайте делать бэкапы!!11

Итак, проблема аналогична проблеме вывода количества статей во вложенных категориях: не выводит кол-во фоток во вложенных фотогалереях.

Как решил проблему я:

1. создаём колонку в таблице cms_photo_albums:

  1. в таблицу cms_photo_albums добавить child_ids типа varchar(200)
2. правим файл /admin/components/photos/backend.php — для сохранения категорий детей при правке категорий галереи через админку

в двух местах, после строки
  1. $album['parent_id'] = cmsCore::request('parent_id', 'int');
вставляем код
  1. //!---ищем детей
  2. //1 уровень
  3. $sql1 = "SELECT id FROM cms_photo_albums WHERE parent_id = '".cmsCore::request('item_id', 'int')."'";
  4.  
  5. $result1 = $inDB->query($sql1);
  6.  
  7. $innercats="";
  8.  
  9. if ($inDB->num_rows($result1)) {
  10. while($innercat1 = $inDB->fetch_assoc($result1)){
  11. $innercats = $innercats.", ".(int)$innercat1['id'];
  12. }
  13. }
  14. $album['child_ids'] = $innercats;
итак. у нас теперь в базе есть (будут) перечислены вложенные категории в таблице

3. вывод. правим файл /core/classes/photo.class.php

находим функцию
  1. public function getAlbums($parent_id=0, $differ='', $recurse=false){
перед ней добавляем новую

  1. // ============================================================================ //
  2. /**
  3.   * Возвращает кол-во фоток в перечисленных через запятую альбомах ($parents_ids)
  4.   * @return array $albums
  5.   */
  6. public function getChildAlbumsPhotocount($parents_ids){
  7. $sql = "SELECT count(*) FROM cms_photo_files WHERE album_id IN (".$parents_ids.")";
  8.  
  9. $result = $this->inDB->query($sql);
  10.  
  11. return mysql_result($result,0);
  12.  
  13. }
и чуть ниже в функции
  1. public function getAlbums($parent_id=0, $differ='', $recurse=false){
замените блок
  1. while ($album = $this->inDB->fetch_assoc($result)){
  2.  
  3. $album['file'] = $album['iconurl'] ? $album['iconurl'] : ($album['file'] ? $album['file'] : 'no_image.png');
  4. $album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
  5. $albums[] = $album;
  6.  
  7. }
на

  1. while ($album = $this->inDB->fetch_assoc($result)){
  2.  
  3. $album['file'] = $album['iconurl'] ? $album['iconurl'] : ($album['file'] ? $album['file'] : 'no_image.png');
  4. $album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
  5. if($parent_id>0)
  6. {
  7. $child=$album['id'];
  8. if(!empty($album['child_ids'])) $child.=", ".$album['child_ids'];
  9. $album['content_count']=$this->getChildAlbumsPhotocount($child);
  10. }
  11. $albums[] = $album;
  12.  
  13. }
вроде ничего не забыл.

не забывайте делать бэкапы!!11
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.