Количество новостей в меню навигации

Позволяет проставить количество новостей за сегодня и общее количество по конкретной категории или подкатегории в меню навигации или любом другом месте сайта. Есть возможность ставить количество новостей в каком угодно виде. Кроме того можно проставлять количество новостей в подкаталогах любой вложености. Единственное, что нужно знать для этого - это id категории.

Что нового в данной версии, смотрите в полной новости.

Предыдущую версию можно посмотреть http://1024kbytes.com/articles/2322-kolichestvo-novostej-v-menyu-navigacii-dlya-dle.html, а первоначальный вариант
-http://4дле.ru/hacks/1147157833-khak-kolichestvo-novostejj-v-menju.html
Примеры отображения в меню навигации (отображение зависит только от Вашей фантазии)
Количество новостей в меню навигации
Количество новостей в меню навигации



Итак, начнем:
1) В файле index.php, находим

$tpl->set ( '{AJAX}', $ajax );


ВЫШЕ ставим код


/*********Главное меню**********/
$count_news = dle_cache( "count_news_of_category", $config[’skin’] );
if( !$count_news )
{
  //кэш с количеством новостей пуст
    $sql_result = $db->query("select ct.id,
                                 (select count(*) from ". PREFIX ."_post ps where 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 = ct.id AND approve = '1') as allnews_
                          from ". PREFIX ."_category ct"
                          );
    $count_news_of_category = '';
    while($row = $db->get_row($sql_result))
    {  
         $t = $row['new_'].'/'.$row['allnews_'];
         $tpl->set('{count_categ_'.$row['id'].'}', $t);          
         $count_news_of_category .= $row['id'].'#'.$t.'|';
    }
    /**В кэш **/
    create_cache( 'count_news_of_category', $count_news_of_category);
    $db->free();
}
else
{
  //достанем количество новостей из кэша
  $arr_newscount = explode('|', $count_news);
  for ($i = 0; $i <= count($arr_newscount) - 2; $i++)
  {
  $arr_onenews = explode('#', $arr_newscount[$i]);  
  $tpl->set('{count_categ_'.$arr_onenews[0].'}', $arr_onenews[1]);
  }
}
/************************************/



2) Открываем файл ./engine/modules/addnews.php
Ищем строку (вернее, это часть строки):

if( $config['allow_alt_url'] == "yes" )


ВЫШЕ ставим:

clear_cache('count_news_of_category');  



3) Открываем файл /engine/ajax/editnews.php
Ищем строку

clear_cache( 'news_' );


НИЖЕ ставим:

clear_cache('count_news_of_category');  


4) В шаблоне (каком хотите и где хотите) ставите теги на количество новостей.
Тег выглядит так: “{count_categ _2}” (без кавычек), где 2 – это id категории.

Например у меня в шаблоне main.tpl, где я отображаю менюшку, будет выглядит так:

Софт   {count_categ _2}


Отобразиться как "Софт 5/258" (без кавычек).
(о формировании внешнего вида содержимого тега см. ниже)

Кстати, между Софт и 5/258 всегда будет только один пробел, как бы далеко не отодвигать в шаблоне тег. Я решил эту проблему просто – поставил  
&_nbsp;

Тогда в шаблоне будет так:


]Софт&nbsp;&nbsp;&nbsp;{count_categ _2}

(между Софт и 5/258 будет 3 пробела)


Формировании внешнего вида
Внешний вид количества новостей (то, что заменит тег в шаблоне) формируется в строке

$t = $row['new_'].'/'.$row['allnews_'];

вышеуказанного кода (в п.1)
Для данной строки содержимое отобразится так: “8/2358” (без кавычек)

Рассмотрим примеры:
Пример 1:
Если надо скобки – все просто – указанную строку меняем на:

$t = ' ('.$row['new_'].'/'.$row['allnews_']. ' )';

Отобразиться: (8/2358)

Пример 2:

$t = ' ('.$row['allnews_'].'/'.$row['new_']. '+)';

Отобразиться: (2358/8+)

Пример 3:

$t = ' (всего:'.$row['allnews_'].', сегодня:'.$row['new_']. ')';

Отобразиться: (всего: 2358 сегодня: 8)

Если кто-то не хочет заморачиваться с кодом, пишите в личку - сделаю.

Кроме того, есть возможность убрать 0 (ноль), если новостей на сегодня нет.
Для этого, в коде из п.1, ВМЕСТО строки


$t = $row['new_'].'/'.$row['allnews_'];


ставим 2 строки


if( $row['new_'] == '0') {$news_now = '(';} else {$news_now = '('.$row['new_'].'/';};
$t = $news_now.$row['allnews_'].')';


Если новости есть, отобразится: “(8/2358)” (без кавычек).
Если новостей за сегодня нет, отобразится: “(2358)” (без кавычек).

Хак тестился на 7.5 версии DLE.

Вот, в принципе и все.
Возможно, кому-то покажется код неудобочитаемым или еще что-то не так - пишите, комментируйте - буду исправлять.
И последнее - хак совершенно бесплатный :-)

Всем удачи!
Другие новости по теме:

Категория: Хаки ----- Просмотров: 3855 ----- Комментариев: 26

Вернуться

  • Группа: User
  • ICQ: 817135
  • Регистрация: 12.12.2008
  • Комментариев: 321
  • Публикаций: 0
^
Хмм... спасибо, на каком-нить ГС поставлю)

--------------------
  • Группа: User
  • ICQ: --
  • Регистрация: 28.06.2009
  • Комментариев: 72
  • Публикаций: 1
^
подкатегории считает?
  • teroor

  • 4 сентября 2009 02:49
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Всё работает на 8.2
  • kand2004

  • 4 сентября 2009 08:37
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Цитата: heidality
подкатегории считает?


Конечно! Подкатегории любой вложенности.

Рабочий вариант можно посмотреть на http://1024kbytes.com


Цитата: teroor
Всё работает на 8.2

Спасибо, что потестил!
  • Влад

  • 4 сентября 2009 10:01
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
При отключенном ЧПУ работает?
  • kand2004

  • 4 сентября 2009 10:30
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Цитата: Влад
При отключенном ЧПУ работает?


Чесно говоря - не пробовал
  • llipek

  • 4 сентября 2009 11:24
  • Группа: User
  • ICQ: --
  • Регистрация: 28.01.2009
  • Комментариев: 91
  • Публикаций: 0
^
ммм...сенкс, как раз юзвери просили))

--------------------
  • Влад

  • 4 сентября 2009 13:28
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
kand2004, попробуй, в прошлой версии не считал кол-во новых новостей при отключенном ЧПУ.


... Блин и щас не считает
  • kand2004

  • 4 сентября 2009 15:56
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^

Цитата: Влад
в прошлой версии не считал кол-во новых новостей при отключенном ЧПУ.... Блин и щас не считает


недоработка... ибо мне не надо было. Вижу, что есть необходимость - доделаю.
  • Группа: User
  • ICQ: --
  • Регистрация: 28.06.2009
  • Комментариев: 72
  • Публикаций: 1
^
+1 за то что подкатегории считает.
  • Aktteon

  • 5 сентября 2009 01:01
  • Группа: User
  • ICQ: --
  • Регистрация: 5.08.2009
  • Комментариев: 6
  • Публикаций: 0
^
А у меня не заработал. Двиг 8.2. Вместо кол-ва новостей показывает ххххххххх {count_categ _2}
Это первый хак который я не смог заставить работать. Все делал несколько раз строго по пунктам.

P.S. Все таки поставил этот хак, правда пришлось убрать кеширование и сделать так, чтобы кол-во новостей выводилось в правой стороне меню.
__________________
|Софт________(256)|
|Фильмы______(356)|

Примерно так меню выглядит у меня.
  • kand2004

  • 6 сентября 2009 17:17
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Друзья, в описании есть один баг.... Так как новость я не могу редактировать, то сообщу тут...
В описании указано имя тега {count_categ _2}, что неправильно. Надо {count_categ_2} (без пробела между categ и _2)



  • adept78

  • 10 сентября 2009 20:57
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
kand2004
+1
за поправку
  • Steve

  • 13 сентября 2009 03:30
  • Группа: User
  • ICQ: --
  • Регистрация: 5.05.2009
  • Комментариев: 9
  • Публикаций: 0
^
Под категории второго уровня не читает
Пример
VIDEO (10)--|Фильмы(150)|----|Боевики(100)
|Фантастика (50)
  • kand2004

  • 16 сентября 2009 20:29
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Цитата: Steve
Под категории второго уровня не читаетПримерVIDEO (10)--|Фильмы(150)|----|Боевики(100) |Фантастика (50)


Насколько я понял, проблема в том, что в главной категории не посчитало общее количество, что находится в подкатегориях? Того, что хак должен это делать, нет в описании.
Хак просто считает новости в категориях не зависимо от того, главная это категория или подкатегория n-го уровня. Например, у Вас в категории VIDEO всего 10 новостей (т.е. журналист не удосужился подобрать подкатегорию к фильму, а просто бомбанул новость в главную категорию)
Задачи считать общее количество новостей в подкатегориях не было :-)
  • zmey555

  • 27 сентября 2009 19:08
  • Группа: User
  • ICQ: --
  • Регистрация: 27.09.2009
  • Комментариев: 4
  • Публикаций: 0
^
kand2004,подскажи пожалуйста,поставил я твой хак,все вроде нормально!Поставил я себе на сайт по-второму примеру Формирования внешнего вида,тоесть так
$t = ' ('.$row['allnews_'].'/'.$row['new_']. '+)';
,но отображаеться все по-обычному как было с самого начала!!!Что делаю не так??? sad
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Супер мега респект тебе kand2004!!! Поставилось без проблем и все отлично работает!!! fellow
А можно ли сделать так, чтобы кол-во новых новостей отображалось др. цветом (например красным) и чтоб при наведении на новые новости отображались названия этих новостей в всплывающем окошке, как в хинтбоксе (:.. это так, на заметку ..:)


Цитата: KAND2004
Возможно, кому-то покажется код неудобочитаемым или еще что-то не так - пишите, комментируйте - буду исправлять.

Вот и первый недостаток обнаружил... если при публикации выбрать несколько категорий (например: антивирус и защита), то в навигации он покажет, что добавлена только одна новость (например: антивирус 1/+1, защита 0/0)... а должно быть, и там и там по единице!!!

kand2004, если ты сможешь это как то исправить - заплюсую! wink


Цитата: KAND2004
Задачи считать общее количество новостей в подкатегориях не было

А было бы неплохо... fellow
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Цитата: zmey555
но отображаеться все по-обычному как было с самого начала!!!Что делаю не так???

Попробуй кэш почистить...
  • darkgod

  • 25 октября 2009 09:55
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Молодца! Хороший хак... как раз то что мне нужно было! Спасибо!
  • Korsar

  • 26 октября 2009 01:31
  • Группа: Модератор
  • ICQ: 176377
  • Регистрация: 24.05.2008
  • Комментариев: 118
  • Публикаций: 5
^
DLE 8.2 всё проверил, отображается просто {count_categ _2}
  • sinatra

  • 13 ноября 2009 15:29
  • Группа: User
  • ICQ: --
  • Регистрация: 2.10.2009
  • Комментариев: 20
  • Публикаций: 1
^
Korsar,
убери пробел после categ

что не понравилось:
1) считает только из определенной категории (вложенные подкатегории не учитывает)
2) если выбрано несколько категорий, учитывает только первую из всех

если бы это исправить, то за такой хак не жалко и забашлять, а так..
  • MTS32

  • 13 ноября 2009 17:52
  • Группа: User
  • ICQ: 2929550
  • Регистрация: 16.06.2009
  • Комментариев: 32
  • Публикаций: 0
^
у меня проблема я непойму куда вставлять коды в main.tpl помогите пожалуста recourse

--------------------
  • Bezyan

  • 19 января 2010 01:59
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Почему у меня выводится статистика только по общим новостям, а за сегодня нет статистики?? дле 8,2
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
Цитата: sinatra
1) считает только из определенной категории (вложенные подкатегории не учитывает)


да, есть такое. Только количество конкретной категории или подкатегории

Цитата: sinatra
2) если выбрано несколько категорий, учитывает только первую из всех

посмотрите тут - баг исправлен
http://1024kbytes.com/articles/3673-xak-dlya-dle-kolichestvo-novostej-v-menyu.ht
ml


Цитата: MTS32
у меня проблема я непойму куда вставлять коды в main.tpl помогите пожалуста

просто еще раз внимательно прочитайте инструкцию и все получится :)

Цитата: Bezyan
Почему у меня выводится статистика только по общим новостям, а за сегодня нет статистики?

значит, что-то пропустили в инструкции. Пожалуйста, проверьте еще раз
  • Группа: Гости
  • ICQ: --
  • Регистрация: --
  • Комментариев: 0
  • Публикаций: 0
^
У меня dle 8.2 и этот хак некорректно работает, при загрузке главной странице после выполнения всех вышеуказанных действий выдает ошибку ображения к базе данных и ссылается на строку:

$sql_result = $db->query("select ct.id,
(select count(*) from ". PREFIX ."_post ps where 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 = ct.id AND approve = '1') as allnews_
from ". PREFIX ."_category ct"
);
Вообщем кто может подскажите что сделать чтобы все работало