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

+11
2.06K
Способ не тестировался на высоконагруженных частопосещаемых галереях с кол-вом фоток чуть более чем дофига.

перед правками не забывайте делать бэкапы!!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
0
eoleg eoleg 11 лет назад #
+
полезная мелочь, нужно только указать для какой версии.
0
Cruzka Cruzka 11 лет назад #
делал для 1.10, на 1.10.1 тоже работает
0
Fichter Fichter 11 лет назад #
здравствуйте!
Я не силен в базах данных. Подскажите как правильно выполнить запрос к бд, чтобы в таблицу cms_photo_albums добавить child_ids типа varchar(200)
Заранее спасибо!
0
Dizels Dizels 11 лет назад #
Это можно сделать через phpmyadmin. Откройте вкладку таблицы cms_photo_albums "структура" и после перечисления уже имеющихся полей, будет возможность добавить поле. Выбираете:
1 поле, в конец таблицы и нажимаете ок. Появится окно, где вводите название поля (child_ids), выбираете тип VARCHAR и в ячейке длина\значение укаываете 200.
0
Dizels Dizels 11 лет назад #
У меня вопрос - все проделал как описано, но в уже опубликованных категориях ничего не поменялось. Изменения будут видны только в новых категориях? Или я что-то не так сделал?
0
Dizels Dizels 11 лет назад #
Либо я что-то не так сделал, либо не работает. У меня версия 1.10.1
Вот ссылки на измененные файлы:
http://dfiles.ru/files/l7a7s1uez
http://dfiles.ru/files/kzt1u3oww

прошу понимающих подсказать, что я сделал не так или почему не работает.
0
Nikit Nikit 11 лет назад #
Нам нужна эта правка. Полностью сделали и перепроверили,но вывода кол-ва фотографий из вложенных галерей (альбомов) не получилось. В БД, столбце child_ids -появились во всех альбомах - , 100 (т.е прописывается id - корневой рубрики). Может мы ошибаемся,но нам кажется, что там должна быть цепочка id через запятую. И еще вопрос: БД при записи child_ids ругается,заносим с id,а потом правим на ids. Версия 1.10.1 Подскажите,где посмотреть проблему.
0
AtlantisWeb AtlantisWeb 11 лет назад #
Для тех у кого не работает данный вариант можете попробовать этот.

Еще от автора

Адаптируем стандартный диз 1.10.х под мобильные устройства
Для тех кто не в курсе, Гугл и Яндекс обещают понижать в выдаче сайты с неадаптивным дизайном (которые неудобно просматривать с телефона).
Добавленные статьи из админки не отображаются в ленте активности - фикс
При добавлении статей из админки, не создаются почему-то метки в ленте активности.
Чутка правим поиск по сайту
При поиске по сайту, если ничего не нашлось (а бывает что не находится то что точно есть), то Инстант предлагает поискать в яндексе.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.