Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Вывод количества новостей в меню

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


     08.01.2014    Общие вопросы, Общие вопросы по вёрстке, Шаблоны (TPL), Стили (CSS), Общие вопросы по PHP, Модули, Хаки, Ламерские вопросы    4194

вопрос
Добрый вечер, друзья.
Необходим хак, указанный здесь как http://flesha.ru/dle/dlehak/2970-hak-vyvod-kolichestva-novostey-v-menyu.html, принцип прост - что бы в меню у названия категории выводилось кол-во новостей, только для версии DLE 10.1, не подскажете, как можно подобное организовать?

Ответил: rocksmart


В index.php в корне сайта над строкой

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


Вставить

Здесь считаем количество новостей в категориях и кешируем , так как запрос очень тяжелый

$staticcountcnews = (file_exists(ENGINE_DIR . "/cache/staticcountcnews.tmp" )) ? @file_get_contents( ENGINE_DIR . "/cache/staticcountcnews.tmp" ) : '';
if( ! $staticcountcnews ) {
$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"
);
if(count($db->get_row($sql_result))>0){
$staticcountcnews = array();
while($row = $db->get_row($sql_result)){$staticcountcnews[$row['id']] = array('new'=>intval($row['new_']),'all'=>intval($row['allnews_']));}
file_put_contents (ENGINE_DIR . "/cache/staticcountcnews.tmp",serialize($staticcountcnews), LOCK_EX);
@chmod( ENGINE_DIR . "/cache/staticcountcnews.tmp", 0666 );}
$db->free();}
if ($staticcountcnews !== false ) {
$staticcountcnews = unserialize($staticcountcnews);
if ( is_array($staticcountcnews) OR is_int($staticcountcnews) ){
foreach($staticcountcnews as $key => $val){
$show = '';
$show .= intval($staticcountcnews[$key]['all']) ? $staticcountcnews[$key]['all'] : '';
$show .= intval($staticcountcnews[$key]['new']) ? ' /+'.$staticcountcnews[$key]['new'] : '';
$tpl->set('{count-categ-'.$key.'}',$show);
}}}


Далее после строки

$tpl->compile ( 'main' );


Вставить




// для того что бы удалить теги которые не несут информации
$tpl->result['main'] = preg_replace( "#\\{count-categ-(.+?)\\}#i", "",$tpl->result['main']);



Использование

{count-categ-3} //где 3 - ид категории


Пример в шаблоне

<li><a href="#">В мире</a> {count-categ-3}</li>



12 комментариев

vitnet
Эксперт

vitnet - 8 января 2014 10:18 -

Вот отличный вариант от Sander'a http://sandev.pro/portfolio/40-kolichestvo-novostey-v-kategorii.html

DonalD-58
Юзер

DonalD-58 - 8 января 2014 11:59 -

ROCKSMART, абсолютно не рабочий вариант.
Имеются ли какие либо еще выходы?

rocksmart
Юзер

rocksmart - 8 января 2014 12:36 -

Что именно не работает? У меня 10.1 стоит

DonalD-58
Юзер

DonalD-58 - 8 января 2014 12:38 -

Указывая тег {count-categ-3} напротив категории, конечно же заменив ID, остается просто пустое поле, подсчет не ведется.

rocksmart
Юзер

rocksmart - 8 января 2014 12:41 -

А в данной категории есть новости?

DonalD-58
Юзер

DonalD-58 - 8 января 2014 12:45 -

Конечно, в каждой категории по порядку сотен новостей.

DonalD-58
Юзер

DonalD-58 - 8 января 2014 12:45 -

Или он не работает в родительских категориях?

rocksmart
Юзер

rocksmart - 8 января 2014 12:48 -

Вот переписал немного так как была ошибка

$staticcountcnews = (file_exists(ENGINE_DIR . "/cache/staticcountcnews.tmp" )) ? @file_get_contents( ENGINE_DIR . "/cache/staticcountcnews.tmp" ) : '';
if( ! $staticcountcnews ) {
$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"
);
if(count($db->get_row($sql_result))>0){
$staticcountcnews = array();
while($row = $db->get_row($sql_result)){$staticcountcnews[$row['id']] = array('new'=>intval($row['new_']),'all'=>intval($row['allnews_']));}

$staticcountcnews = serialize($staticcountcnews);

file_put_contents (ENGINE_DIR . "/cache/staticcountcnews.tmp",$staticcountcnews, LOCK_EX);
@chmod( ENGINE_DIR . "/cache/staticcountcnews.tmp", 0666 );}
$db->free();}
if ($staticcountcnews !== false ) {
$countCatNews = unserialize($staticcountcnews);
if ( is_array($countCatNews) OR is_int($countCatNews) ){
foreach($countCatNews as $key => $val){
$show = '';
$show .= intval($countCatNews[$key]['all']) ? $countCatNews[$key]['all'] : '';
$show .= intval($countCatNews[$key]['new']) ? ' /+'.$countCatNews[$key]['new'] : '';
$tpl->set('{count-categ-'.$key.'}',$show);
}}}

//echo'<pre>';print_r($countCatNews);echo'</pre>';



раскомментируй нижнюю часть данного кода и посмотри что вывод

DonalD-58
Юзер

DonalD-58 - 8 января 2014 12:51 -

Родительские категории в общем подсчете кол-ва файлов не будет выводится?

rocksmart
Юзер

rocksmart - 8 января 2014 12:56 -

Будет последний мой коммент переписал

DonalD-58
Юзер

DonalD-58 - 8 января 2014 13:08 -

Родительскую категорию не хочет отображать, а подкатегории показывает.
Где то допущена ошибка?

denibox
Юзер

denibox - 12 мая 2016 00:44 -

Может кто поможет как увеличить продолжительность показа новой новости до 24 часов а не скидывался поле 0:00

$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 = '<font color="#CC0000">+'.$row['new_'].'</font>&nbsp;|&nbsp;';};
$t = '[&nbsp;'.$news_now.$row['allnews_'].'&nbsp;]';
$tpl->set('{count_categ_'.$row['id'].'}', $t);
$count_news_of_category .= $row['id'].'#'.$t.'|';
}

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх