Хак Вывод кол-ва новостей для категорий + условия

tensey

:)
Прошёл марафон
Регистрация
10 Июл 2017
Сообщения
74
Реакции
44
Баллы
18
Скрипт реализует возможность выводить количество новостей в любой конкретной категории в любом месте на странице.

Преимущества скрипта:
— Реализованы условия больше, меньше, равно =<>
— Получает кол-во новостей для каждой категории одним запросом
— Подключение в одном месте (т.е. не надо подключать скрипт через include отдельно для каждой категории)
— Использует кэш (префикс news_)

Как подключить:
Файл из архива пихаем в папку /engine/modules/ и в файле main.php перед строкой echo $tpl->result['main']; прописываем include ENGINE_DIR . '/modules/cm.catcount.php';

Как использовать:
{catcount:12}
— выведет кол-во новостей в категории с ID 12
[catcount:12 > 100] в категории 12 больше 100 новостей [/catcount:12]
[catcount:12 = 100]
в категории 12 ровно 100 новостей [/catcount:12]
[catcount:12 < 100]
в категории 12 меньше 100 новостей [/catcount:12]

P.S.
Скрипт на живом сайте не тестировал!
PHP:
function cm_catcount( $matches ) {

    global $cat_info_count;
    if ( $matches[2] == '=' ) return ( $cat_info_count[$matches[1]] == $matches[3] ) ? $matches[4] : '' ;
        elseif( $matches[2] == '<' ) return ( $cat_info_count[$matches[1]] < $matches[3] ) ? $matches[4] : '' ;
            elseif( $matches[2] == '>' ) return ( $cat_info_count[$matches[1]] > $matches[3] ) ? $matches[4] : '';
                else return false;
}

if ( !$cache = dle_cache( 'news_cm_categories_count', $config['skin'], false ) ) {
    $count = $db->query("SELECT c.id AS id, (SELECT COUNT(*) FROM " . PREFIX . "_post AS p WHERE p.category REGEXP '[[:<:]]' + c.id + '[[:>:]]') AS count FROM " . PREFIX . "_category AS c");
    while ( $row = $db->get_array($count) ) $cat_info_count[$row['id']] = $row['count'];
    create_cache( 'news_cm_categories_count', serialize($cat_info_count), $config['skin'], false );
} else $cat_info_count = unserialize($cache);

foreach ($cat_info_count as $id => $count) $tpl->result['main'] = str_replace("{catcount:{$id}}", $count, $tpl->result['main']);

$tpl->result['main'] = preg_replace_callback("#\[catcount:([0-9]+)[\s]*?([=<>])[\s]*?([0-9]+)\](.*?)\[\/catcount:[0-9]+\]#is", "cm_catcount", $tpl->result['main']);
скачать
 
Сверху Снизу