С Новым годом! Форум программистов, компьютерный форум, киберфорум
DataLife Engine (DLE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/57: Рейтинг темы: голосов - 57, средняя оценка - 4.60
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72

Вывод счетчика категорий (количество новостей в категории)

13.08.2015, 20:29. Показов 12058. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане. я случайно натолкнулся на сайт Шаблоны для DLE. И мне очень понравился такой момент который они реализовали

Как можно такое реализовать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2015, 20:29
Ответы с готовыми решениями:

Вывод новостей только из одной категории
Как в сайдбаре, в части "популярное" настроить вывод новостей только из категории "1 Сезон". Подскажите пожалуйста как это можно...

Вывод ссылок на категории новостей и заголовка
Доброго времени суток! Дело в том, что я сейчас верстаю сайт на DLE, и этот сайт мой второй на данной CMS, поэтому я вынужден просить у вас...

Как реализовать вывод новостей в определенные категории?
есть категории в левом сайтбаре и в шапке:Авторы,мероприятия,новости. как сделать вывод новостей в эти категории? если {content} не...

12
грОмотей
 Аватар для maxvel0007
239 / 175 / 17
Регистрация: 01.04.2011
Сообщений: 1,435
16.08.2015, 12:24
В файле index.php находим:
PHP
1
$tpl->set ( '{AJAX}', $ajax );
Выше добавить:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$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 = '/+'.$row['new_'].')';};
$t = '('.$row['allnews_'].$news_now;
$tpl->set('{count_categ_'.$row['id'].'}', $t);
$count_news_of_category .= $row['id'].'#'.$t.'|';
}
В меню вставляем куда нужно:
HTML5
1
{count_categ_1}
1
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72
16.08.2015, 12:46  [ТС]
я решил немного иначе, у меня стоит CMS DLE 10.5
И вот так я решил задачу:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function countcatnews( $matches=array() ) {
        global $db, $is_logged, $member_id, $xf_inited, $cat_info, $config, $user_group, $category_id, $_TIME, $lang, $smartphone_detected, $dle_module, $allow_comments_ajax, $PHP_SELF, $news_date, $banners, $banner_in_news, $url_page, $user_query, $custom_news;
        $thisdate = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60)) );
        $where_date = " AND date < '" . $thisdate . "'";
        if ( !count($matches) ) return "";
        $param_str = trim($matches[1]);    
        $aviable = array();
        $count = 0;
        if( preg_match( "#catid=['\"](.+?)['\"]#i", $param_str, $match ) ) {
            $aviable = explode( ',', $match[1] );
            $SQL = $db->query ( "SELECT * FROM " . PREFIX . "_post  WHERE category regexp '[[:<:]](" . implode ( '|', $aviable ) . ")[[:>:]]'".$where_date." and approve=1");
            $count = $row = $db->num_rows();
        }
        return $count;
    }
    if (stripos ( $tpl->copy_template, "{catcount" ) !== false) {
        $tpl->copy_template = preg_replace_callback ( "#\\{catcount(.+?)\\}#i", "countcatnews", $tpl->copy_template );
    }
{catcount catid="1,2,3,..."} возвращает количество новостей в категории

Добавлено через 1 минуту
и в таком случаи тега такая очень гибкая, позволит подсчитать новостей в нескольких категориях так и в какой то определенной категории
0
грОмотей
 Аватар для maxvel0007
239 / 175 / 17
Регистрация: 01.04.2011
Сообщений: 1,435
17.08.2015, 16:07
Цитата Сообщение от dimitron Посмотреть сообщение
я решил немного иначе
Главное суть уловили
0
2 / 2 / 1
Регистрация: 16.08.2013
Сообщений: 11
08.01.2016, 16:35
А как сделать тоже самое, но только новости за 24 часа, чтобы подсчет был из всех категорий к которой относится новость, а не только первой, как это во многих подобных модулях?
0
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72
08.01.2016, 21:47  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function countcatnews( $matches=array() ) {
        global $db, $is_logged, $member_id, $xf_inited, $cat_info, $config, $user_group, $category_id, $_TIME, $lang, $smartphone_detected, $dle_module, $allow_comments_ajax, $PHP_SELF, $news_date, $banners, $banner_in_news, $url_page, $user_query, $custom_news;
        $thisdate = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60)) );
 
// вот тут условие выбирает все до текущей даты, ну а если нужно за сегодня там просто ставим = вместо <
        $where_date = " AND date = '" . $thisdate . "'";
 
 
 
        if ( !count($matches) ) return "";
        $param_str = trim($matches[1]);    
        $aviable = array();
        $count = 0;
        if( preg_match( "#catid=['\"](.+?)['\"]#i", $param_str, $match ) ) {
            $aviable = explode( ',', $match[1] );
            $SQL = $db->query ( "SELECT * FROM " . PREFIX . "_post  WHERE category regexp '[[:<:]](" . implode ( '|', $aviable ) . ")[[:>:]]'".$where_date." and approve=1");
            $count = $row = $db->num_rows();
        }
        return $count;
    }
    if (stripos ( $tpl->copy_template, "{catcount" ) !== false) {
        $tpl->copy_template = preg_replace_callback ( "#\\{catcount(.+?)\\}#i", "countcatnews", $tpl->copy_template );
    }
0
2 / 2 / 1
Регистрация: 16.08.2013
Сообщений: 11
08.01.2016, 22:13
Почему то выводит 0, вывод тем же тегом? {catcount catid="14"}

Добавлено через 3 минуты
И ещё пара вопросов, как этот скрипт кэшируется, и возможно ли сделать так, если значение равно "0" то его просто не показывать, и ещё добавить знак к значению (например так: +5), сории за подобные вопросы, в php не очень разбираюсь, только учусь)

Добавлено через 7 минут
Вот ещё для примера нашёл похожий рабочий вариант, показывает всего и за сутки, единственное что мне в нем нужно, это добавить к значению (которое за сутки) "+", и если значение равно нулю, то его скрыть. Если кто то поможет, буду очень благодарен.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    /*********Главное меню**********/
$count_news = dle_cache( "count_news_of_category", $config[’skin’] );
if( !$count_news )
{
  //кэш с количеством новостей пуст
  $all = '';
  $onlyday = '';
    $sql_result = $db->query("SELECT category,date FROM ".PREFIX."_post WHERE approve = '1'");
    while ($row = $db->get_row($sql_result)) {
        $all .= $row['category'].',';
        if ($row['date'] > date("Y-m-d H:i:s", strtotime("-1 DAY"))) {
            $onlyday .= $row['category'].',';
            }
        }
    /**В кэш **/
    create_cache( 'count_news_of_category', substr($all, 0, -1).'|||'.substr($onlyday, 0, -1));
    $db->free();
    $all = explode(",", substr($all, 0, -1));
    $allar = array_count_values($all);
    $onlyday = explode(",", substr($onlyday, 0, -1));
    $onlydayar = array_count_values($onlyday);
    //выводим по тегам кол-во новостей
foreach ($allar as $key => $value) {
    $tpl->set('{categnum-'.$key.'}', $value);
    ${'categnum-'.$key} = $value;
    }
foreach ($onlydayar as $key => $value) {
    $tpl->set('{categday-'.$key.'}', $value);
    ${'categday-'.$key} = $value;
    }
$catidall = "";
$catidday = "";
foreach ($cat_info as $cat) {
    $catidall .= $cat['id'].',';
    }
foreach ($cat_info as $cat) {
    $catidday .= $cat['id'].',';
    }
$catidall = array_diff(explode(",", substr($catidall, 0, -1)), $all);
$catidday = array_diff(explode(",", substr($catidday, 0, -1)), $onlyday);
foreach ($catidall as $catnull) {
    $tpl->set('{categnum-'.$catnull.'}', '0');
    }
foreach ($catidday as $catnull) {
    $tpl->set('{categday-'.$catnull.'}', '0');
    }
}
else
{
  //достанем количество новостей из кэша
    $count_news = explode("|||", $count_news);
    $all = explode(",", $count_news[0]);
    $allar = array_count_values($all);
    $onlyday = explode(",", $count_news[1]);
    $onlydayar = array_count_values($onlyday);
    //выводим по тегам кол-во новостей
foreach ($allar as $key => $value) {
    $tpl->set('{categnum-'.$key.'}', $value);
    ${'categnum-'.$key} = $value;
    }
foreach ($onlydayar as $key => $value) {
    $tpl->set('{categday-'.$key.'}', $value);
    ${'categday-'.$key} = $value;
    }
$catidall = "";
$catidday = "";
foreach ($cat_info as $cat) {
    $catidall .= $cat['id'].',';
    }
foreach ($cat_info as $cat) {
    $catidday .= $cat['id'].',';
    }
$catidall = array_diff(explode(",", substr($catidall, 0, -1)), $all);
$catidday = array_diff(explode(",", substr($catidday, 0, -1)), $onlyday);
foreach ($catidall as $catnull) {
    $tpl->set('{categnum-'.$catnull.'}', '0');
    }
foreach ($catidday as $catnull) {
    $tpl->set('{categday-'.$catnull.'}', '0');
    }
}
/************************************/
0
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72
09.01.2016, 10:58  [ТС]
follor, это замудренно, есть еще проще метод
0
2 / 2 / 1
Регистрация: 16.08.2013
Сообщений: 11
09.01.2016, 11:14
Ну я не знаю, просто нашел вариант) И ваш второй вариант(новости за сутки) почему то не работает, выводит 0
0
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72
09.01.2016, 12:14  [ТС]
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

дописываю, скоро выложу

Добавлено через 35 минут
создаем файл(cat_count.php) в папку engine/modules/
Содержимое файла cat_count.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    if(!defined('DATALIFEENGINE'))die("Hacking attempt!");  
    //Подключаем API CMS DLE  
    include ('engine/api/api.class.php');
    
    //24 часа назад
    $thisdate = langdate( "Y-m-d", $_TIME-86400 )." 00:00:00";
    
    //условие отбора новостей
    $where_date = " AND date > '" . $thisdate . "'";
    
    //формируем список категорий которые мы ввели в параметр cat=
    $aviable = array();
    $aviable = explode( ',', $cat );
    
    //Выполняем запрос
    $SQL = $db->query ( "SELECT * FROM " . PREFIX . "_post  WHERE category regexp '[[:<:]](" . implode ( '|', $aviable ) . ")[[:>:]]'".$where_date." and approve=1");
    $count = $row = $db->num_rows();
    if($count != 0)
        echo '+'.$count;
?>
а теперь в любом месте шаблона можно выводить количество новостей за сегодняшний день.
{include file="engine/modules/cat_count.php?cat=50"}
Вот видите тут у нас есть еще параметр cat, вот тут через запятую указываем категории с которых будут подсчитываться количество новостей за сегодняшний день.
1
2 / 2 / 1
Регистрация: 16.08.2013
Сообщений: 11
09.01.2016, 13:08
Спасибо, то что нужно, работает
1
0 / 0 / 0
Регистрация: 23.03.2016
Сообщений: 1
23.03.2016, 12:27
В статической странице не выводит количество новостей.
Как добавить вывод количества в статическую страницу dle ???
0
 Аватар для dimitron
11 / 11 / 5
Регистрация: 13.08.2015
Сообщений: 72
23.03.2016, 15:36  [ТС]
cumasevag, этот код ({include file="engine/modules/cat_count.php?cat=50"}) для шаблна а не для того что бы вставлять его в редакторе, Вы можете сделать следующим образом. Создаете новый файл к статической странице, к примеру statik1.tpl и уже в нем верстаете страницу и также можно будет использовать код ({include file="engine/modules/cat_count.php?cat=50"}). А что бы подключить этот файл к статической странице, вам нужно в админке создать статичискую страницу и в поле "Использовать шаблон" указать statik1 без расширения *.tpl, и тогда у вас будет подгружаться этот файл с его содержимым
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2016, 15:36
Помогаю со студенческими работами здесь

Настройка вывода нужной категории новостей в блоке
Настраиваю шаблон Cherry и по причине того сто не так давно этим занимаюсь , не могу настроить вывод нужных категорий во вкладках блока....

Как вывести список категории новостей на sidebar?
У меня есть код: &lt;div class=&quot;side-block&quot;&gt; &lt;div class=&quot;head&quot;&gt;&lt;h4&gt;Категории&lt;/h4&gt;&lt;/div&gt; &lt;ul style=&quot;margin: 10px...

Вывод материалов дочерних категорий на странице родительской категории
Как вывести на странице категории материалы каждой дочерней категории? Приложил фото как должно быть. Есть код: &lt;?php $args =...

Выводится список категорий вместо новостей
Добрый день. Делаю курсовую работу - интернет магазин на битриксе. Уже подошел к финалу и столкнулся с проблемой. Есть у меня каталог...

Категории новостей
Здравствуйте, при создании новости указываю категорию где будет эта новость, щас у меня можно выбрать только 1 категорию, но я хочу сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru