Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы Вывод количества новостей в меню

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


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

вопрос
Добрый вечер, друзья.
Необходим хак, указанный здесь как 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
218

2174 | 930

vitnet - 8 января 2014 10:18 - Эксперт

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

DonalD-58
12

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

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

rocksmart
64

307 | 115

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

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

DonalD-58
12

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

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

rocksmart
64

307 | 115

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

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

DonalD-58
12

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

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

DonalD-58
12

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

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

rocksmart
64

307 | 115

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
12

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

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

rocksmart
64

307 | 115

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

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

DonalD-58
12

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

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

denibox
16

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.'|';
}

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

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