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

Отображение количества новостей каждой категории в главном меню

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

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


выше его ставим код


/*********Навигация******************************************/
$sql_result = $db->query("select ct.name, 
                                 ct.alt_name, 
                                 ct.posi,
                                 (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
                          order by ct.posi"
                          );

$main_menu='';
while($row = $db->get_row($sql_result))
{
    $main_menu.='<div><a href="'.$config['http_home_url'].$row['alt_name'].'" >'.$row['name']."&nbsp;&nbsp;&nbsp;".$row['new_']."/".$row['allnews_']."</a></div>";
}
$tpl->set('{main_menu}', $main_menu);
/******************************************************************/


2) Пункт меню формируется в коде


$main_menu.='<div><a href="'.$config['http_home_url'].$row['alt_name'].'" >'.$row['name']."&nbsp;&nbsp;&nbsp;".$row['new_']."/".$row['allnews_']."</a></div>";


где
- $config['http_home_url'] возвращает значение "http://ваш_домен/" (без кавычек)
- $row['alt_name'] - название категории латиницей (например: soft)
- переменная $row['name'] - название категории кирилицей (например: Софт)
- $row['new_'] - количество новостей данной категории за сегодня
- $row['allnews_'] - общее количество новостей по данной категории

В код можно вставить класс, согласно которому, будет отображаться менюшка. Например


$main_menu.='<div><a href="'.$config['http_home_url'].$row['alt_name'].'" class="navigation">'.$row['name']."&nbsp;&nbsp;&nbsp;".$row['new_']."/".$row['allnews_']."</a></div>";


В приведенном примере ссылка будет вида

_http://ваш_домен/soft

3) О сортировке пунктов меню.
В админке в разделе "Категории", можно увидеть напротив каждой категории значение Position. Вот в каком порядке проставите эти значения, в таком и покажет в менюшке.

4) Открываем шаблон /templates/ваш_шаблон/main.tpl

В нужном месте ставим {main_menu}

5) работающее меню можно посмотреть на _http://1024kbytes.com

6) тестировалось на DLE7.5

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


Читайте также
  1. kand2004
    4 августа 2009 01:15
    Есть продолжение хака, где появилась возможность добавлять количество новостей в меню с любым количеством подкатегорий, любой вложености

    Смотрите на
    _http://1024kbytes.com/articles/2322-kolichestvo-novostej-v-menyu-navigacii-dlya

    -dle.html
  2. Neo-dimon
    18 апреля 2010 22:36
    У меня 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"
    );
    Вообщем кто может подскажите что сделать чтобы все работало
  3. mcmweb
    27 февраля 2012 14:18
    Для DLE 9.5 Думаю на всех версиях будет работать.
    кто умеет пусть почистит и подправит !

    1) В файле index.php, находим

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


    выше его ставим код



    /*********Главное меню**********/
    $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.'|';
    }

    /************************************/


    Дальше в мею на главной вставляем это {count_categ_3} куда нужно !

    Например, для категории с id=3, тег на количество новостей за сегодня будет выглядеть так {count_categ_3}


    Выглядит так когда есть новое:
    (255/+6)

    И так когда нет:

    (22)

    Переделка из двух версий - Количество новостей в меню навигации для DLE , и Количество новостей в меню навигации (третья версия)

    Бага неточного подсчета количества новостей, если новость в нескольких категориях. НЕТ
  4. gashan19
    21 июня 2012 16:14
    не верьте mcmweb, он навернет вашу базу данных!!!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


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

Авторизация