• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

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

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>";
        }
}       
 
}
}
?>
 
такую информацию нужно обновлять при добавлении статей и проверять по крону, а не считать при каждой подгрузке сайта. Таким модулем Вы просто убьёте сайт... У него даже банального кэша нет...

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

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

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