Технический сбой

Сайт временно работает в режиме только для чтения, идут восстановительные работы. Приносим свои извинения за неудобства.
DLE FAQ » Все вопросы » Общие вопросы » Вывод количества новостей в меню
Дизайн сайта разработка меню для кейтеринга.

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


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

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

vitnet - -

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

DonalD-58
Юзер

DonalD-58 - -

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

rocksmart
Юзер

rocksmart - -

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

DonalD-58
Юзер

DonalD-58 - -

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

rocksmart
Юзер

rocksmart - -

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

DonalD-58
Юзер

DonalD-58 - -

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

DonalD-58
Юзер

DonalD-58 - -

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

rocksmart
Юзер

rocksmart - -

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

$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 - -

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

rocksmart
Юзер

rocksmart - -

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

DonalD-58
Юзер

DonalD-58 - -

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

denibox
Юзер

denibox - -

Может кто поможет как увеличить продолжительность показа новой новости до 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.'|';
}

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

наверх