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, он навернет вашу базу данных!!!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Закажи аниматора на детский праздник! Выбери персонажа прямо сейчас
euphoria.biz


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

Авторизация