Вывод количества новостей в категории на сайте DLE

Очень полезный скрипт - фича которая выводит количество новостей из категории на сайте в любом месте за пределами страницы статистики. Этот вариант нестандартный, так как разработчик не предусматривает изначально данный функционал из коробки.

Если вы ранее пользовались данный скриптом, потом обновили движок. Вам необходимо проделать эту процедуру каждый раз после обновления, так как при обновлении система переписывает эти файлы заново кроме файлов шаблона. Ниже представлен скрин категорий после обновления до ремонта этой фичи заново.

Нам нужен файл /engine/modules/main.php

Открываем его и ищем строку (~ 703-я стока в версии 14,1):

$tpl->compile ( 'main' );

Выше вставляем это

// Вывод колличества новостей начало

$tpl->copy_template = preg_replace_callback( "#{cat_all\:(.+?)}#is", function($data) use ($db, $config)
{
    return catCountFunction($data, $config, $db);
}, $tpl->copy_template );
$tpl->copy_template = preg_replace_callback( "#{cat_today\:(.+?)}#is", function($data) use ($db, $config)
{
    return catCountFunction($data, $config, $db, true);
    
}, $tpl->copy_template );  

// Вывод колличества новостей конец над $tpl->compile ( 'main' );

Теперь нам нужен файл /engine/modules/functions.php

Открываем его и ищем строку (~ 2583-я стока в версии 14,1):

function get_url($id) {

Выше вставляем это

// Вывод колличества новостей начало

function catCountFunction($cat_id, $config, $db, $curdate = false)
{
    $cat_ids = array();
    if(substr_count($cat_id[1], ","))
        $cat_ids = explode(",", $db->safesql(trim(strip_tags(stripslashes($cat_id[1])))));
    else
        $cat_ids[] = is_numeric($cat_id[1]) ? intval($cat_id[1]) : false;
    if(!count($cat_ids)) return;

    $cache_cat_news = false;
    $cache_cat_news = dle_cache("news_acn" . intval($curdate), $config['skin'] . implode($cat_ids), false);
    
    if ($config['allow_multi_category'])
        $cat_query = "category regexp '[[:<:]](" . implode ( '|', $cat_ids ) . ")[[:>:]]'";
    else
        $cat_query = "category IN ('" . implode ( "','", $cat_ids ) . "')";
    if (!$cache_cat_news)
    {
        if($curdate == false)
            $row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$cat_query}");
        else
            $row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$cat_query} AND date LIKE '".date("Y-m-d")."%'");
        $newscount = ($row['count'] > 0) ? intval($row['count']) : false;
        if($newscount)
            $cache_cat_news = $newscount;
        create_cache("news_acn" . intval($curdate), $cache_cat_news, $config['skin'] . implode($cat_ids), false);
    } 

    return ($cache_cat_news > 0 ? (($curdate == true) ? "+" : "") . $cache_cat_news : "");
}

// Вывод колличества новостей конец над function get_url($id) {

Как это использовать?

Теперь нам доступны такие теги

{cat_all:1} - Где 1 это номер категории. Так же можно писать категории через заятую.

{cat_all:1} или {cat_all:1,2,3,4} - выведет количество новостей за все время с этих категорий.

{cat_today:1} или {cat_today:1,2,3,4} - выведет количество новостей за сегодня с этих категорий.

Вот пример использования в коде

<ul>
<li class="cat-item"><a href="/novosti/" title="Новости">Новости</a> <span>{cat_all:1}</span></li>
<li class="cat-item"><a href="/analitika/" title="Аналитика">Аналитика</a> <span>{cat_all:4}</span></li>
<li class="cat-item"><a href="/istorii/" title="Истории">Истории</a> <span>{cat_all:3}</span></li> 
<li class="cat-item"><a href="/trendy/" title="Тренды">Тренды</a> <span>{cat_all:2}</span></li>                          
</ul>

В итоге мы имеем вид работы скрипта.

Сообщить об ошибке

Поделиться этим постом:

Отзывы и комментарии (0)