Как вывести количество материала для меню "Категории" для InstantCMS 2?

#16 8 января 2018 в 19:52

И как итог предложеный вариант отображается в каждой ячейке

Capitan
Ну поэкспериментируйте с расположением новой строки. Главное, чтобы оно было внутри цикла foreach($items as $item){

да и к томуже почему-то колво фотос умножается на 2

Capitan
Вот это вот substr_count($item['photos'], 'small') просто считает количество слов small в поле photos.
Я понятия не имею, что там за стиль вывода списка у Вас, посмотрите, что в поле photos.
В крайнем случае поделите количество на два. smile
  1. echo substr_count($item['photos'], 'small')/2;
#17 8 января 2018 в 21:06
Не знаю как но получилось
после
  1. <td class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?>">
вставил ваш код и + отсебятину :)
  1.  
  2. <?php if ($field['name'] == 'photo' && $ctype['options']['item_on']){ ?>
  3. <div>
  4. <?php if (isset($item['photos'])){ ?>
  5. <div class="photos_count">
  6. <?php echo substr_count($item['photos'], 'small');?>
  7. </div>
  8. <?php } ?>
  9. <?php } else { ?>
  10. <?php }?>
  11. </div>
  12.  
Но с подсчетом не очень понятно, в некоторых записях правильно считает, в некоторых показывает в два раза больше!
#18 9 января 2018 в 20:14
Товарищи, я понимаю что о многом прошу) можете еще кое-что подсказать, в общем изначально как подсказал выше Ris все работает хорошо.

Теперь задача немного усложнилась.)) в этой instantcms.ru/forum/thread28818-1.html#279681 теме мне подсказали как вывести подкатегории



И как видно на фото, получилось что подкатегории не считает, а главные категории выдает по нулям. А как сделать чтоб в главных общая сумма всех вложенных записей, а в подкатегориях количество записей именно этой подкатегории
На данный момент код вот такой в category_view.tpl.php
  1. <?php if ($subcats && $ctype['is_cats'] && !empty($ctype['options']['is_show_cats'])){ ?>
  2. <div class="gui-panel content_categories<?php if (count($subcats)>8){ ?> categories_small<?php } ?>">
  3. <ul class="<?php echo $ctype['name'];?>_icon">
  4. <?php foreach($subcats as $c){ ?>
  5.  
  6. <?php
  7. $is_ds_view = empty($current_dataset['cats_view']) || in_array($c['id'], $current_dataset['cats_view']);
  8. $is_ds_hide = !empty($current_dataset['cats_hide']) && in_array($c['id'], $current_dataset['cats_hide']);
  9. ?>
  10.  
  11. <li class="<?php echo str_replace('/', '-', $c['slug']);?>">
  12. <a href="<?php $cat_count = cmsCore::getModel('content')->join('con_'.$ctype['name'].'_cats', 'ac', 'i.category_id = ac.id')->filterEqual('category_id', $c['id'])->filterOr('ac.parent_id = i.category_id')->getCount('con_'.$ctype['name'].'', 'id'); echo href_to($base_url . (($dataset && $is_ds_view && !$is_ds_hide) ? '-'.$dataset : ''), $c['slug']); ?>"><?php echo $c['title'].' ('.$cat_count.')'; ?></a>
  13. <?php $subcats2 = cmsCore::getModel('content')->getSubCategories($ctype['name'], $c['id']); ?>
  14. <?php if($subcats2) { ?>
  15. <ul>
  16. <?php foreach ($subcats2 as $c2) { ?>
  17. <li class="<?php echo str_replace('/', '-', $c2['slug']);?>">
  18. <a href="<?php echo href_to($base_url . ''.$dataset, $c2['slug']); ?>"><?php echo $c2['title']; ?></a>
  19. </li>
  20. <?php } ?>
  21. </ul>
  22. <?php } ?>
  23. </li>
  24. <?php } ?>
  25. </ul>
  26. </div>
#19 10 января 2018 в 08:56

И как видно на фото, получилось что подкатегории не считает, а главные категории выдает по нулям. А как сделать чтоб в главных общая сумма всех вложенных записей, а в подкатегориях количество записей именно этой подкатегории

Dan
Попробуйте считать контент в категориях таким образом:
  1. $cat_count = cmsCore::getModel('content')
  2. ->joinLeft('con_articles_cats', 'ac', 'i.category_id = ac.id')->filterGtEqual('ac.ns_left', $c['ns_left'])->filterLtEqual('ac.ns_right', $c['ns_right'])
  3. ->getContentItemsCount($ctype['name']);
#20 10 января 2018 в 09:39
Все. Ris, еще раз спасибо. Кое-что пришлось подправить. Я доволен как слон. hohoВот что получилось.
  1.  
  2. <div class="gui-panel content_categories<?php if (count($subcats)>8){ ?> categories_small<?php } ?>">
  3. <ul class="<?php echo $ctype['name'];?>_icon">
  4. <?php foreach($subcats as $c){ ?>
  5.  
  6. <?php
  7. $is_ds_view = empty($current_dataset['cats_view']) || in_array($c['id'], $current_dataset['cats_view']);
  8. $is_ds_hide = !empty($current_dataset['cats_hide']) && in_array($c['id'], $current_dataset['cats_hide']);
  9. ?>
  10.  
  11. <li class="<?php echo str_replace('/', '-', $c['slug']);?>">
  12. <a href="<?php $cat_count = cmsCore::getModel('content')
  13. ->joinLeft('con_'.$ctype['name'].'_cats', 'ac', 'i.category_id = ac.id')->filterGt('ac.ns_left', $c['ns_left']-1)->filterLt('ac.ns_right', $c['ns_right']+1)
  14. ->getContentItemsCount($ctype['name']); echo href_to($base_url . (($dataset && $is_ds_view && !$is_ds_hide) ? '-'.$dataset : ''), $c['slug']); ?>"><?php echo $c['title'].' ('.$cat_count.')'; ?></a>
  15. <?php $subcats2 = cmsCore::getModel('content')->getSubCategories($ctype['name'], $c['id']); ?>
  16. <?php if($subcats2) { ?>
  17. <ul>
  18. <?php foreach ($subcats2 as $c2) { ?>
  19. <li class="<?php echo str_replace('/', '-', $c2['slug']);?>">
  20.  
  21. <a href="<?php $cat_count = cmsCore::getModel('content')->join('con_'.$ctype['name'].'_cats', 'ac', 'i.category_id = ac.id')->filterEqual('category_id', $c2['id'])->filterOr('ac.parent_id = i.category_id')->getCount('con_'.$ctype['name'].'', 'id'); echo href_to($base_url . ''.$dataset, $c2['slug']); ?>"><?php echo $c2['title'].' ('.$cat_count.')'; ?></a>
  22.  
  23. </li>
  24. <?php } ?>
  25. </ul>
  26. <?php } ?>
  27. </li>
  28. <?php } ?>
  29. </ul>
  30. </div>
  31.  

Осталось все это дело поправить в CSS и нормально.
#21 10 января 2018 в 10:08
Dan, если не секрет, можете показать статистику этой страницы с включенной отладкой в настройках сайта?
1. Количество запросов в бд yadi.sk/i/kUuI3kRN3RKSNm (сами запросы не нужны, только их количество).
2. Time и Mem этой страницы yadi.sk/i/GlDB6SWD3RKSY7
#22 10 января 2018 в 10:13

2. Time и Mem

Loadырь
Time: 0.1056 s Mem: 3.5 Mb
А вот количество запросов как посмотреть я не знаю. scratchэто пока темный лес для меня)
А в чем собственно дело? что-то не так сделал)))
#23 10 января 2018 в 10:21

А вот количество запросов как посмотреть я не знаю

Dan
Нажмите на слово "Отладка", рядом с Time: 0.1056 s Mem: 3.5 Mb

А в чем собственно дело?

Dan
Спортивный интерес. Сдаётся мне, что количество запросов у вас прямопропорционально количеству категорий.
#24 10 января 2018 в 10:31

Loadырь, ну 24. на категории 14 запросов
Каков диагноз?))) Я понимаю что типа надо делать чтоб меньше было запросов в базу, быстрее грузились страницы и т.д. Но я как то пока на юзабилити ориентируюсь, а там скил подрастет — поправлю как надо)
#25 10 января 2018 в 11:06

Каков диагноз?)))

Dan
Сами судите, сейчас у вас 18 категорий из них 14 — подкатегории и соответственно к каждой из них по запросу в БД.
Что будет когда у вас станет 100 подкатегорий?
#26 10 января 2018 в 11:18

Что будет когда у вас станет 100 подкатегорий

Loadырь
п… ц будет)) я понимаю. но 100 подкатегорий точно не будет. может еще штук 5 прибавится, но основная структура уже такая.
как говорил выше я пока не знаю, как решить это, но надеюсь что потом дойдут до этого руки. Если знаете как, то отпишитесь smileя по крайней мере буду знать к кому если что обратиться
ну или напишите сюда решение zst
#27 10 января 2018 в 14:22
а кто не даёт кэшировать?)
#28 10 января 2018 в 15:04

а кто не даёт кэшировать?)

ideasdigger
что это, как это? scratchнаверно это будет потом отдельной веткой, темой.
#29 10 января 2018 в 15:07
Еще вариант — сделать в таблицах категорий колумн content_count и писать туда количество контента в категории и дочерних категориях.
#30 10 января 2018 в 16:31

Еще вариант — сделать в таблицах категорий колумн content_count и писать туда количество контента в категории и дочерних категориях.

Ris
это, кстати. вполне рабочий вариант. Обновлять значение при редактировании категории и при добавлении материала. Если материал в черновике, то считаем его после одобрения. При удалении тоже.
Компонент и 2 хука.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.