red_heads 1 Опубликовано: 2 октября 2007 Рассказать Опубликовано: 2 октября 2007 (изменено) У меня выводяться названия категории вот ссылка на код в форуме но хочется чтоб отображалось количество новостей рядом с каждой категорией. Облазила все темы, но так и не нашла ответа ранне был "блок категорий", но все ссылки на него устарели Пример Общее количество новостей : 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(); ?> Извеняюсь за то что создала тему не в той рубрике Изменено 2 октября 2007 пользователем Zyf Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 2 октября 2007 Рассказать Опубликовано: 2 октября 2007 У вас у новости 1 или несколько категорий? Цитата Ссылка на сообщение Поделиться на других сайтах
red_heads 1 Опубликовано: 2 октября 2007 Рассказать Опубликовано: 2 октября 2007 Автор для одной новости, одна категория у меня нет новостей который принадлежат нескольким категорим одновременно Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 2 октября 2007 Рассказать Опубликовано: 2 октября 2007 Тогда тебе же и лучше: <?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(); ?> Попробуй так Цитата Ссылка на сообщение Поделиться на других сайтах
red_heads 1 Опубликовано: 3 октября 2007 Рассказать Опубликовано: 3 октября 2007 (изменено) Автор синтаксическая ошибка 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"; } возможно здесь как то подправить чтоб вместо всех новостей он вывел их количество Изменено 3 октября 2007 пользователем Zyf Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 3 октября 2007 Рассказать Опубликовано: 3 октября 2007 хм, синтаксическая ошибка, но я че то не вижу где она. Во-втором варианте можно и подправить 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 />'; } Цитата Ссылка на сообщение Поделиться на других сайтах
red_heads 1 Опубликовано: 3 октября 2007 Рассказать Опубликовано: 3 октября 2007 Автор да втророй вариант сработал прекрасно Спасибо Цитата Ссылка на сообщение Поделиться на других сайтах
gopal 0 Опубликовано: 5 октября 2007 Рассказать Опубликовано: 5 октября 2007 можно было бы нормально все перезаписать, с tpl файлом а то ничего не понятно =) Цитата Ссылка на сообщение Поделиться на других сайтах
red_heads 1 Опубликовано: 5 октября 2007 Рассказать Опубликовано: 5 октября 2007 (изменено) Автор Впринципе ссылка в самом вверху была дана где описывается подобный мод ссылка я только с помощью 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} Изменено 5 октября 2007 пользователем Zyf Цитата Ссылка на сообщение Поделиться на других сайтах
Akela 9 Опубликовано: 5 октября 2007 Рассказать Опубликовано: 5 октября 2007 Впринципе ссылка в самом вверху была дана где описывается подобный мод ссылка я только с помощью lifestar изменила m_cats.php ... При наличии 100 категорий это будет ровно 100 некэшируемых запросов при каждом заходе каждого юзера !!! Удачи в покупке нового сервера . Цитата Ссылка на сообщение Поделиться на других сайтах
kolyma 2 Опубликовано: 5 октября 2007 Рассказать Опубликовано: 5 октября 2007 Akela прав!!! а можно ли такуб фичу реализовать с мин. запросами к базе? в модуле "Вывод категорий, версия 7.2" это ведь сделано и запросов мало Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 5 октября 2007 Рассказать Опубликовано: 5 октября 2007 Akela, всё верно, но моё дело ответить на вопрос. Спасибо что предупредили Zyf. Можно сократить эти "100 запросов" до 1. Для этого создадим таблицу id_cat => count news Ну или раз у новости всего 1 категория, то мы можем добавить поле в таблицу категорий, в котором и будем хранить количество новостей, и эта цифра соответственно попадёт в кеш категорий. В этом случае мы вообще без дополнительных запросов обойдёмся. Но есть и недостаток: каждый раз при добавлении/удалении новости кеш придётся обновлять. Не вручную конечно, но всё же Цитата Ссылка на сообщение Поделиться на других сайтах
sh1za 0 Опубликовано: 9 января 2012 Рассказать Опубликовано: 9 января 2012 Добрый день! Подскажите пожалуйста как вывести количество новостей в категории, если новости относятся одновременно к разным категориям? Например есть фильм, который относиться одновременно и к боевику и к фантастике, как сделать, чтобы при добавлении такого фильма. он засчитывал его и там и там и в меню отображалось следующее фантастика(1) боевик(1) у меня есть скрипт, который выводит количество новостей, но он не работает для мультикатегорий, тоесть получается следующее, фильм добавлен и к боевики и к фантастике, но считается только в категории боевик, т.к. она стоит выше в DLE фантастика(0) боевик(1) Цитата Ссылка на сообщение Поделиться на других сайтах
Wanderers 17 Опубликовано: 9 января 2012 Рассказать Опубликовано: 9 января 2012 (изменено) В запросах пропускаем группировку, с чего оно вдруг считаться то будет? 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 Изменено 9 января 2012 пользователем Wanderers Цитата Ссылка на сообщение Поделиться на других сайтах
Ctfelix 1 Опубликовано: 9 января 2012 Рассказать Опубликовано: 9 января 2012 Для этого есть готовый модуль http://dle-module.ru/free_module/213-amount-newsv102.html Сам им пользуюсь Цитата Ссылка на сообщение Поделиться на других сайтах
sh1za 0 Опубликовано: 10 января 2012 Рассказать Опубликовано: 10 января 2012 В запросах пропускаем группировку, с чего оно вдруг считаться то будет? <?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>"; } ?> вот такой вот скриптик... я в пхп не силен, подскажите плз что тут поменять нужно чтобы все ок былоДля этого есть готовый модуль буду пробовать ) спасибо Цитата Ссылка на сообщение Поделиться на других сайтах
izbushkin 3 Опубликовано: 2 февраля 2012 Рассказать Опубликовано: 2 февраля 2012 Короче, чем меньше всяких дополнительных модулей. тем свободнее "дышит" сервер. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.