• Автор:

    Flesha
  • Добавлено:

    дек 04, 2012
  • Комментариев:

    3
  • Просмотров:

    3847

Хак Вывод количества новостей в меню

Хак Вывод количества новостей в меню

Подсчет количества новостей в категории плюс добавленные за сегодня.

Что интересного в хаке:
1) кэширование количества новостей;
2) возможность убирать «0», если новостей за сегодня по категории нет;
3) исправлен баг неточного подсчета количества новостей, если новость в нескольких категориях.

Установка:
1. В файле index.php находим:
$tpl->set ( '{AJAX}', $ajax );


И выше вставляем такой код, если хотим чтоб количество выводилось так - [ +6 | 20]:
$sql_result = $db->query("select ct.id,
(select count(*) from ". PREFIX ."_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id) AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
(select count(*) from ". PREFIX ."_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id) AND approve = '1') as allnews_
from ". PREFIX ."_category ct"
);
$count_news_of_category = '';
while($row = $db->get_row($sql_result))
{
if( $row['new_'] == '0') {$news_now = '';} else {$news_now = '<font color="#CC0000">+'.$row['new_'].'</font>&nbsp;|&nbsp;';};
$t = '[&nbsp;'.$news_now.$row['allnews_'].'&nbsp;]';
$tpl->set('{count_categ_'.$row['id'].'}', $t);
$count_news_of_category .= $row['id'].'#'.$t.'|';
}


Или выше вставляем такой код, если хотим чтоб количество выводилось так - (255/+6):
$sql_result = $db->query("select ct.id,
(select count(*) from ". PREFIX ."_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id) AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
(select count(*) from ". PREFIX ."_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ',)' ) or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id) AND approve = '1') as allnews_
from ". PREFIX ."_category ct"
);
$count_news_of_category = '';
while($row = $db->get_row($sql_result))
{
if( $row['new_'] == '0') {$news_now = ')';} else {$news_now = '/+'.$row['new_'].')';};
$t = '('.$row['allnews_'].$news_now;
$tpl->set('{count_categ_'.$row['id'].'}', $t);
$count_news_of_category .= $row['id'].'#'.$t.'|';
}


2. В меню вставляем куда нужно:
{count_categ_1}


Где 1 - id номер соответсвующий в меню категории или подкатегории.
Проскакивает 1 запрос на БД при просмотре любой страницы! Очень удобно если хотите организовать файловый архив, где новости добавляются чаще чем на блогах.
Вернуться

Комментарии:


  1. xatin → 10 февраля 2015 11:41
    А как сделать, что бы только показывалось сколько добавилось новостей? а не его количество.
  2. Сергей Мелика → 3 декабря 2015 20:23
    Подскажите пожалуйста а как реализовать данный хак в dle 10,4.
    Сегодня установил 10,4.
    Раньше стоял на dle 9,4 всё работало, но в версии 10,4 файл index.php не такой как в 9,4 и куда добавлять код не понятно!
    1. Сергей Мелика → 3 декабря 2015 20:41
      Нашел! нужно код записывать не в index.php а в engine/modules/main.php
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.