8Dle
Авторизация

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

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

Вот на днях бороздя просторы нета нарыл такой вот интересный на мой взгляд хак для DLE. К сожалению автор мне не известен.

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

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

УСТАНОВКА для версий DLE8.2-8.5

1) Создаем новый php файл, и вставить в него следущий код:
<?php

/********* Количество новостей в главном меню  **********/
$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 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))
    {   
         $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]); 
  }
}
/************************************/


?>


Сохроняем его под именем news_count.php в engine/modules/

2) Открываем index.php
находим:
require_once ROOT_DIR . '/engine/init.php';

ниже вставляем:
require_once ROOT_DIR . '/engine/modules/news_count.php';

3) Открываем файл ./engine/modules/addnews.php
находим:
$thistime = date( "Y-m-d H:i:s", $added_time );

ниже вставляем:
clear_cache('count_news_of_category');


4) Открываем /engine/ajax/editnews.php
находим:
clear_cache( 'news_' );


ниже вставляем:
clear_cache('count_news_of_category');

5) В шаблоне main.tpl ставите теги на количество новостей.
Тег выглядит так: {count_categ_2}, где 2 – это id категории.
Например у меня в шаблоне main.tpl, где я отображаю менюшку, будет выглядит так:
[url=http://1024kbytes.com/programms/]Софт   {count_categ_2}[/url]


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

Формировании внешнего вида
Внешний вид количества новостей (то, что заменит тег в шаблоне) формируется в файле news_count.php который мы делали на первом этапе.
В строке №16:
$t = $row['new_'].'|'.$row['allnews_'];


Для данной строки содержимое отобразится так: 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 (ноль), если новостей на сегодня нет.
Для этого, в коде, ВМЕСТО строки
$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)

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
  1. TeberDini™
    14 ноября 2010 04:16
  2. TeberDini™
    23 декабря 2010 03:12
    Попробовал, на девятке не работает, в index.php require_once ROOT_DIR . '/engine/modules/news_count.php'; моросит, подскажите у кого получилось под 9-ку поставить данный хак
  3. xoxa99
    28 января 2011 08:05
    да, подскажите как сделать на 9
    http://youtubetemplates.ru
  4. xak_86
    28 марта 2011 00:39
    У себя зделал... все работает ... СПС... winked
  5. Vlad
    29 марта 2011 22:52
    Если база и посещалка большая то может повестить сервак.
    Мне повесил.
    Проблема с сайтом? Модуль или хак не работает?
    За $ установлю любой модуль/хак/шаблон.
    Вопросы по DLE - ко мне, не бесплатно.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация