Количество новостей в категории для DLE
Благодаря хаку Количество новостей в категории для DLE вы сможете слегка расширить возможности скрипта и внести новые функции в ваш сайт. Главная особенность хака заключается в кеширование и благодаря чему хак не создает нагрузку. Сам процесс установки очень прост и у вас не должно возникнуть проблем. Все кто собирается устанавливать хак Количество новостей в категории для DLE просьба отписаться на каких версиях устанавливали. Хак должен работать на DLE 9.7 - 10.х и могу с большой уверенностью сказать, что на dle 10.3 работает, было лично проверено.
Установка:
1) В файле index.php, находим строку:
$tpl->set ( '{AJAX}', $ajax );
Перед этой строки добавляем:
/*********Главное меню**********/
$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 = 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"
);
$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]);
}
}
/************************************/
2) Открываем файл ./engine/modules/addnews.php. Находим строку:
if( $config['allow_alt_url'] == "yes" )
Данная строчка может слегка отличатся в более новых версиях, если не смогли найти, то попробуйте поискать по куску верней строки, например if( $config['allow_alt_url']
Перед этой строки добавляем:
/*********hak poschet novostey**********/
clear_cache('count_news_of_category');
/****************hak poschet novostey***end*****************/
3) Открываем файл /engine/ajax/editnews.php. Ищем строку:
clear_cache( array( 'news_', 'rss', $cprefix ) );
После этой строки добавляем:
/*********hak poschet novostey**********/
clear_cache('count_news_of_category');
/****************hak poschet novostey***end*****************/
Установка завершена!
4) Теперь в шаблон в меню вставляем
{count_categ_2}
где 2 – это id категории.
После добавления, в браузере мы увидим "{Название категории} 5/258".
5) Для того что изменить внешний вид количества новостей достаточно немного подправить код тега
Итак данный код тега:
$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 (ноль), при отсутствии новостей на сегодня .
Для этого, в коде из п.1, ВМЕСТО строчки
$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)” (без кавычек).
UPD: Начиная с DataLife Engine 11.2 и выше данная функция доступна из коробки, мы рекомендуем вам обновить свой сайт до актуальной версии и вам не придется вносить изменения в файлах скрипта.