Помощь Вывод количества постов в категории имеющей подкатегорию

Тема в разделе "DLE", создана пользователем digital7, 24 апр 2013.

Информация :
Актуальная версия DataLife Engine 12.0
( Final Release v.12.0 | Скачать DataLife Engine | Скачать 12.0 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.3 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. digital7

    digital7 Создатель

    Регистр.:
    25 сен 2011
    Сообщения:
    44
    Симпатии:
    7
    Уважаемые знатоки! Есть вроде бы элементарный вопрос, решение которого мне в голову не пришло.

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

    Собственно код запроса

    PHP:
    //Подсчитаем количество новостей в выводимых подкатегориях
            
    $row $db->super_query"SELECT COUNT(*) as count FROM " USERPREFIX "_post WHERE category="$cats[id] . "" );
           
            
    $news_counter $row['count'];

    Код самого модуля:

    PHP:
    <?php
    if(!defined('DATALIFEENGINE'))
    {
      die(
    "Hacking attempt!");
    }
    function 
    CatMenuUrl$id$all_info ) {
        if ( ! 
    $id ) return;
        
    $parent_id $all_info[$id]['parentid'];
        
    $url $all_info[$id]['alt_name'];
        while ( 
    $parent_id ) {
            
    $url $all_info[$parent_id]['alt_name'] . "/" $url;
            
    $parent_id $all_info[$parent_id]['parentid'];
            if ( 
    $all_info[$parent_id]['parentid'] == $all_info[$parent_id]['id'] ) break;
        }
        return 
    $url;
    }
     
    #-----------------------------------------#
     
    if ($do == "cat" and $category != '' and $subaction == '') {
        if( 
    $category) {
           
    foreach ( 
    $cat_info as $key => $cats ) {
            
    $all_info[$key]['id'] = $cats['id'];
            
    $all_info[$key]['parentid'] = $cats['parentid'];
            
    $all_info[$key]['name'] = $cats['name'];
            
    $all_info[$key]['alt_name'] = $cats['alt_name'];
            
    $all_info[$key]['icon'] = $cats['icon'];
            if ( 
    $cats['alt_name'] == $category )
                {
    $id_now $cats[id];}
    }
            foreach ( 
    $cat_info as $key => $cats ) {
            
    $all_info[$key]['id'] = $cats['id'];
            
    $all_info[$key]['parentid'] = $cats['parentid'];
            
    $all_info[$key]['name'] = $cats['name'];
            
    $all_info[$key]['alt_name'] = $cats['alt_name'];
            
    $all_info[$key]['icon'] = $cats['icon'];
           
            
    //Подсчитаем количество новостей в выводимых подкатегориях
            
    $row $db->super_query"SELECT COUNT(*) as count FROM " USERPREFIX "_post WHERE category="$cats[id] . "" );
           
            
    $news_counter $row['count'];
           
           
            if (
    $cats[parentid] == $id_now) { $id_category $cats[id];
    if ( 
    $config['allow_alt_url'] == "yes" )
     
     
    $cat_menu .= "<div class=\"catz\">
     
    <a href=\"" 
    $config['http_home_url'] . get_url($id_category) . "/\" rel=\"index section\">
     
    <div align=\"center\"><img src=\"/uploads/folder.png\" align=\"center\"><br>"
    $cats[name] . "
    (
    $news_counter)
    </a></div></div>"
    ;
               
               
                else 
    $cat_menu.='<li>
                <h3>
                <a  rel=\"index section\" href="'
    .$config['http_home_url'].'index.php?do=cat&amp;category='.$cats[alt_name].'">'.$cats[name]."</a>
                </h3>
                </li>"
    ;
            }
    }       
     
    }
    }
    ?>
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.210
    Симпатии:
    2.239
    такую информацию нужно обновлять при добавлении статей и проверять по крону, а не считать при каждой подгрузке сайта. Таким модулем Вы просто убьёте сайт... У него даже банального кэша нет...

    Сделать модуль то можно, но будет 3-5 запросов на страницу/категорию - оно Вам нужно?

    Мой совет - считать такие вещи по крону + обновлять при добавлении статьи и хранить в отдельном поле. Посчитать тогда будет не сложно, ведь список всех категорий всё равно забирается на любой странице сайта. Это увеличит нагрузку во время выполнения крона и добавления статей, что в овер 100500 раз меньше, чем нагрузка при каждом просмотре.
     
  3. digital7

    digital7 Создатель

    Регистр.:
    25 сен 2011
    Сообщения:
    44
    Симпатии:
    7
    Спасибо что откликнулись на мою проблему!

    Про кэш я в курсе, мне просто интересна реализация