Перейти к публикации

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


Рекомендованные сообщения

У меня выводяться названия категории вот ссылка на код в форуме

но хочется чтоб отображалось количество новостей рядом с каждой категорией.

Облазила все темы, но так и не нашла ответа

ранне был "блок категорий", но все ссылки на него устарели

Пример

Общее количество новостей : 110

Архитектурное проектирование (количество новостей 12)

Бетон, ЖБИ, кирпич (количество новостей 28)

Дизайн интерьеров (количество новостей 30)

Защита дома (количество новостей 40)

код файла m_cats.php

<?php

if (!defined('DATALIFEENGINE'))

{

	die ("Hacking attempt!");

}

$tpl->load_template('m_cats.tpl');

$db->query("SELECT * FROM " . PREFIX . "_category ORDER BY posi, name ASC");

while ($row = $db->get_row())

{

	$n .= str_replace("{m_cat}", "<a " . (($config['ajax']) ? "onclick=\"DlePage('do=cat&category=" .

		$row['alt_name'] . "')" : "") . "; return false;\" href=\"". $config['http_home_url'] . $row[

		'alt_name'] . "/\">" . $row['name'] . "</a>", $tpl->copy_template);

}

$tpl->result['m_cats'] = $n;

$tpl->clear();

?>

Извеняюсь за то что создала тему не в той рубрике

Изменено пользователем Zyf
Ссылка на сообщение
Поделиться на других сайтах

для одной новости, одна категория

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

Ссылка на сообщение
Поделиться на других сайтах

Тогда тебе же и лучше:

<?php

if (!defined('DATALIFEENGINE'))

	die ("Hacking attempt!");

$tpl->load_template('m_cats.tpl');

$db->query("SELECT c.alt_name, c.name, p.COUNT(*) as count FROM " . PREFIX . "_category c LEFT JOIN " . PREFIX . "_post p ON c.id = p.category ORDER BY posi, name ASC");

while ($row = $db->get_row())

{

	$n .= str_replace("{m_cat}", "<a " . (($config['ajax']) ? "onclick=\"DlePage('do=cat&category=" .

		$row['alt_name'] . "')" : "") . "; return false;\" href=\"". $config['http_home_url'] . $row[

		'alt_name'] . "/\">" . $row['name'] . " (количество новостей ".$row['count'].")</a>", $tpl->copy_template);

}

$tpl->result['m_cats'] = $n;

$tpl->clear();

?>

Попробуй так

Ссылка на сообщение
Поделиться на других сайтах

синтаксическая ошибка

MySQL Error!

------------------------

The Error returned was:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) as count FROM dle_category c LEFT JOIN dle_post p ON c.id = p.category ORDER ' at line 1

Error Number:

1064

SELECT c.alt_name, c.name, p.COUNT(*) as count FROM dle_category c LEFT JOIN dle_post p ON c.id = p.category ORDER BY posi, name ASC

пробовала убрать некоторые символы, но не получается, что то в самом запросе не так

так

<?php

if (!defined('DATALIFEENGINE'))

	die ("Hacking attempt!");

$tpl->load_template('m_cats.tpl');

$db->query("SELECT alt_name, name, COUNT(*) as count FROM " . PREFIX . "_category  LEFT JOIN " . PREFIX . "_post  ON id = category ORDER BY posi, name ASC");

while ($row = $db->get_row())

{

	$n .= str_replace("{m_cat}", "<a " . (($config['ajax']) ? "onclick=\"DlePage('do=cat&category=" .

		$row['alt_name'] . "')" : "") . "; return false;\" href=\"". $config['http_home_url'] . $row[

		'alt_name'] . "/\">" . $row['name'] . " (количество новостей ".$row['count'].")</a>", $tpl->copy_template);

}

$tpl->result['m_cats'] = $n;

$tpl->clear();

?>
Вот еще код который выводит категорию и все новости в ней
$map = dle_cache ("sitemap", $config['skin']);

if(!$map) {

$map = "";


foreach($cat_info as $val){

  $map .= "<ul style='padding:6px;font-size:18px;'>";

  $map .= "<a   href='".$config['http_home_url']."category/".$val['alt_name']."/' style='font-size:14pt;font-weight:bold; color:#990000;  '>$val[name]</a>\n";

  $cat = intval($val[id]);

  $result = $db->query("SELECT id,autor,date,title,alt_name,comm_num,rating,news_read FROM ". PREFIX ."_post WHERE category = '$cat' ORDER BY title ASC");

  while ($row = $db->get_row($result)){

  if ($config['allow_alt_url'] == "yes")

	 $map .= "<li style='padding:0px;font-size:11px;' valign='absmiddle'><a style='font-weight: bold;'  href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['alt_name'].".html>".stripslashes($row[title])."</a> | $row[autor] | Прочтено: $row[news_read] ";

else

	 $map .= "<li style='padding:0px;font-size:11px;' valign='absmiddle'><a style='font-weight: bold;'  href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a> | $row[autor] | Прочтено: $row[news_read]";

  }

$map .= "</ul>\n";

}

возможно здесь как то подправить чтоб вместо всех новостей он вывел их количество

Изменено пользователем Zyf
Ссылка на сообщение
Поделиться на других сайтах

хм, синтаксическая ошибка, но я че то не вижу где она.

Во-втором варианте можно и подправить

foreach($cat_info as $val)

{

	$map .= "<a href='".$config['http_home_url']."category/".$val['alt_name']."/' style='font-size:14pt;font-weight:bold; color:#990000;  '>$val[name]</a>\n";

	$cat = intval($val[id]);

	$result = $db->query("SELECT COUNT(*) as count FROM ". PREFIX ."_post WHERE category = '$cat' ORDER BY title ASC");

	while ($row = $db->get_row($result))

		$map .= ' (количество новостей: '.$row['count'].')<br />';

}

Ссылка на сообщение
Поделиться на других сайтах

можно было бы нормально все перезаписать, с tpl файлом а то ничего не понятно =)

Ссылка на сообщение
Поделиться на других сайтах

Впринципе ссылка в самом вверху была дана где описывается подобный мод ссылка

я только с помощью lifestar изменила m_cats.php

Итак создаем файл в папке engine/modules

В моем случае он называется m_cats.php

Код

<?php

if (!defined('DATALIFEENGINE'))

{

	die ("Hacking attempt!");

}

$tpl->load_template('m_cats.tpl');

$map1 = dle_cache ("sitemap", $config['skin']);

if(!$map) {

$map1 = "";


foreach($cat_info as $val)

{


	$map1 .= "<a href='".$config['http_home_url']."category/".$val['alt_name']."/'  class='light2'; align='left'; '>$val[name]</a>\n";

	$cat = intval($val[id]);

	$result = $db->query("SELECT COUNT(*) as count FROM ". PREFIX ."_post WHERE category = '$cat' ORDER BY title ASC");

	while ($row = $db->get_row($result))

		$map1 .= '('.$row['count'].')<br />';

}

}

$tpl->result['m_cats'] = $map1;

$tpl->clear();

?>
Далее открываем index.php и после Код
$tpl->set('{speedbar}', $tpl->result['speedbar']);
Прописываем Код
$tpl->set('{m_cats}', $tpl->result['m_cats']);
Открываем файл engine/init.php и в самом конце перед ?> вставляем Код
include_once ENGINE_DIR.'/modules/m_cats.php';
И теперь приступаем к шаблонам. Создаем файл templates/m_cats.tpl у меня он такого содержания Код
<table width="100%" cellpadding="0" cellspacing="0" border="0">

								  <tr>

									<td align="left">

									<span class="category"><strong>{m_cat}</strong></span>

									</td>

								  </tr>

								</table>

Ну и теперь в нужном месте шаблона главной страницы вставляем

Код

{m_cats}

Изменено пользователем Zyf
Ссылка на сообщение
Поделиться на других сайтах

Впринципе ссылка в самом вверху была дана где описывается подобный мод ссылка

я только с помощью lifestar изменила m_cats.php

...

При наличии 100 категорий это будет ровно 100 некэшируемых запросов при каждом заходе каждого юзера !!!

Удачи в покупке нового сервера :) .

Ссылка на сообщение
Поделиться на других сайтах

Akela прав!!! а можно ли такуб фичу реализовать с мин. запросами к базе? в модуле "Вывод категорий, версия 7.2" это ведь сделано и запросов мало

Ссылка на сообщение
Поделиться на других сайтах

Akela, всё верно, но моё дело ответить на вопрос. Спасибо что предупредили Zyf.

Можно сократить эти "100 запросов" до 1. Для этого создадим таблицу id_cat => count news

Ну или раз у новости всего 1 категория, то мы можем добавить поле в таблицу категорий, в котором и будем хранить количество новостей, и эта цифра соответственно попадёт в кеш категорий. В этом случае мы вообще без дополнительных запросов обойдёмся. Но есть и недостаток: каждый раз при добавлении/удалении новости кеш придётся обновлять. Не вручную конечно, но всё же

Ссылка на сообщение
Поделиться на других сайтах
  • 4 года спустя...

Добрый день! Подскажите пожалуйста как вывести количество новостей в категории, если новости относятся одновременно к разным категориям? Например есть фильм, который относиться одновременно и к боевику и к фантастике, как сделать, чтобы при добавлении такого фильма. он засчитывал его и там и там и в меню отображалось следующее

фантастика(1)

боевик(1)

у меня есть скрипт, который выводит количество новостей, но он не работает для мультикатегорий, тоесть получается следующее, фильм добавлен и к боевики и к фантастике, но считается только в категории боевик, т.к. она стоит выше в DLE

фантастика(0)

боевик(1)

Ссылка на сообщение
Поделиться на других сайтах

В запросах пропускаем группировку, с чего оно вдруг считаться то будет?


SELECT c.alt_name, c.name, count(*) as count

FROM dle_category c LEFT JOIN dle_post p ON c.id = p.category

GROUP by c.id

order by c.name

Изменено пользователем Wanderers
Ссылка на сообщение
Поделиться на других сайтах

В запросах пропускаем группировку, с чего оно вдруг считаться то будет?


<?php

if(!defined('DATALIFEENGINE'))

{

  die("Hacking attempt!");

}

$massiv = dle_cache( "massiv", $config['skin'] );

if ($massiv == '') {

$massiv = array();

$temp_date = date( 'Y-m-d H:i', $_TIME - (3596 * 24) );

$numnews=$db->query("select category, count(id) as count from ".PREFIX."_post where approve='1' and date >= '$temp_date'AND date <= '$temp_date' + INTERVAL 24 HOUR group by category");

while ($numnew=$db->get_row($numnews))

{

$massiv[$numnew['category']] = $numnew['count'];

} 

create_cache( "massiv", $massiv, $config['skin'] );

}

$cat_menu='';

if(!$category_id) { foreach($cat_info as $g) if ($g['parentid'] == '0') {

    $schetchik ='0';


    foreach ($cat_info as $podcat) if ($podcat['parentid']==$g['id']) { $schetchik = $schetchik + $massiv[$podcat['id']]; }


	  $schetchik = $schetchik + $massiv[$g['id']];


    if ($schetchik =='0' ) {$schetchik ='';} else {$schetchik= "<font size='1' color=\"#ff0033\"> +".$schetchik."</font>";}

    $cat_menu .= "<li><h2 class='nav'><a href=\"/".get_url($g['id'])."\" rel=\"index section\">". $g['name'] . "".$schetchik."</a></h2></li>"; }

    if ($cat_menu !='') $cat_menu = "<ul class='nav'>".$cat_menu."</ul>";

															  }

elseif($category_id){ foreach($cat_info as $c) if($c['parentid']==$category_id) {

if ($massiv[$c['id']] !='' ) {$new = "<font size='1' color=\"#ff0033\"> +".$massiv[$c['id']]."</font>";}

$cat_menu .= "<li><h2 class='nav'><a href=\"/".get_url($c['id'])."\" rel=\"index section\">". $c['name'] . "".$new."</a></h2></li>"; }

if ($cat_menu !='')

$cat_menu = "<ul class='nav'>".$cat_menu."</ul>";

}

?>

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

Для этого есть готовый модуль

буду пробовать ) спасибо

Ссылка на сообщение
Поделиться на других сайтах
  • 4 недели спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...