|
Подсчет количества файлов в категории с учетом файлов в подкатегориях Slaed 2.1 и выше (Lite ветка)
Для тех, кому важна статистика в модуле файлов.
Пример смотрим у меня в Файловом архиве. Наведя мышку на количество дождитесь всплывающей подсказки.
1. Добавим в стили Код | 1 2
| .for_c4et0 {color: #aaa;font-size: 9px;}
.for_c4et1 {color: #aaa;font-size: 9px; text-decoration: underline; cursor:pointer;} |
2. Заменим функцию на новую. Все изменения прокомментированы 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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| <?php function categories($id="") { global $prefix, $db, $module_name, $tabcolumn, $showsubkat; // добавлено $massiv3 static $massiv, $massiv2, $massiv3; $id = (intval($id)) ? $id : 0; $where = ($id) ? "WHERE parentid = '$id'" : ""; $tdwidth = intval(100/$tabcolumn); if (!is_array($massiv)) { $result = $db->sql_query("SELECT cid, title, parentid FROM ".$prefix."_files_categories ".$where.""); while (list($cid, $title, $parentid) = $db->sql_fetchrow($result)) $massiv[] = array($cid, $title, $parentid); } if (!is_array($massiv2)) { $result = $db->sql_query("SELECT cid, title, parentid FROM ".$prefix."_files_categories"); while (list($cid, $title, $parentid) = $db->sql_fetchrow($result)) $massiv2[] = array($cid, $title, $parentid); }
// начало вставки 1 if (!is_array($massiv3)) { $result = $db->sql_query("SELECT fc.cid, fc.parentid, Count(f.lid) AS tmp FROM ".$prefix."_files AS f INNER JOIN ".$prefix."_files_categories AS fc ON (fc.cid=f.cid) WHERE status != '0' GROUP BY fc.cid, fc.parentid"); //0 //1 в текущ//2всего//3в подкат //4 while (list($cid, $parentid, $summ) = $db->sql_fetchrow($result)) $massiv3[$cid] = array($parentid, $summ, $summ, 0, $cid);
foreach ($massiv3 as $key => $val) { $flag = $val[0]; while ($flag!=0) { $massiv3[ $flag ][2] = $massiv3[ $flag ][2] + $val[1]; $massiv3[ $flag ][3] = $massiv3[ $flag ][3] + $val[1]; $flag = $massiv3[ $flag ][0]; } } } // конец вставки 1
if ($massiv) { foreach ($massiv as $key => $val) { if ($val[2] == $id) { // добавлено условие, что бы выводился ноль, в случае отсутствия файлов в категории if (!isset($massiv3[$val[0]][1])) {$massiv3[$val[0]][1] = 0;} if (!isset($massiv3[$val[0]][2])) {$massiv3[$val[0]][2] = 0;} if (!isset($massiv3[$val[0]][3])) {$massiv3[$val[0]][3] = 0;} // добавлено $massiv3[бла-бла], расставлены стили и титлы $ccontent .= "<td valign=\"top\" width=\"".$tdwidth."%\"><table border=\"0\"><tr><td><img border=\"0\" src=\"images/blocks/Files.gif\" title=\"$title\"></td><td><a href=\"index.php?name=$module_name&op=cat&id=$val[0]\" title=\"$val[1]\"><b>$val[1]</b></a> " ."<b r><font class=\"for_c4et0\"><span class=\"for_c4et1\" title=\"Всего в категории (с учетом кол-ва в подкатегориях): " .$massiv3[$val[0]][2]."\">сумм. " .$massiv3[$val[0]][2] ."</span> / <span class=\"for_c4et1\" title=\"Всего в категории (без учета кол-ва в подкатегориях): " .$massiv3[$val[0]][1]."\">в кат. " .$massiv3[$val[0]][1] ."</span> / <span class=\"for_c4et1\" title=\"Всего в подкатегориях: " .$massiv3[$val[0]][3]."\">в пкат. " .$massiv3[$val[0]][3] ."</span></font>" ."</td></tr>"; if ($showsubkat == 1 && $massiv2) { foreach ($massiv2 as $key => $val2) { if ($val[0] == $val2[2]) { // добавлено условие, что бы выводился ноль, в случае отсутствия файлов в категории if (!isset($massiv3[$val2[0]][1])) {$massiv3[$val2[0]][1] = 0;} if (!isset($massiv3[$val2[0]][2])) {$massiv3[$val2[0]][2] = 0;} if (!isset($massiv3[$val2[0]][3])) {$massiv3[$val2[0]][3] = 0;} // добавлено $massiv3[бла-бла], расставлены стили и титлы $ccontent .= "<tr><td colspan=\"2\"><img border=\"0\" src=\"images/navi.gif\" title=\"$val2[1]\"> <a href=\"index.php?name=$module_name&op=cat&id=$val2[0]\" title=\"$val2[1]\">$val2[1]</a> " ."<b r><font class=\"for_c4et0\"><span class=\"for_c4et1\" title=\"Всего в категории (с учетом кол-ва в подкатегориях): " .$massiv3[$val2[0]][2]."\">сумм. " .$massiv3[$val2[0]][2] ."</span> / <span class=\"for_c4et1\" title=\"Всего в категории (без учета кол-ва в подкатегориях): " .$massiv3[$val2[0]][1]."\">в кат. " .$massiv3[$val2[0]][1] ."</span> / <span class=\"for_c4et1\" title=\"Всего в подкатегориях: " .$massiv3[$val2[0]][3]."\">в пкат. " .$massiv3[$val2[0]][3] ."</span></font>" ."</td></tr>"; } } } $ccontent .= "</table></td>"; if ($cont == ($tabcolumn - 1)) { $ccontent .= "</tr><tr>"; $cont = 0; } else { $cont++; } } } } if ($ccontent) { OpenTable(); echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"10\" align=\"center\"><tr>".$ccontent."</td></tr></table>"; list($files_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(lid) FROM ".$prefix."_files WHERE status !='0'")); list($cat_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(cid) FROM ".$prefix."_files_categories")); echo "<hr><center>"._ALLFILES.": <b>$files_num</b> "._INF." <b>$cat_num</b> "._ALLFILES2."</center>"; CloseTable(); } } ?> |
Дата публикации: 16.07.2007 Прочитано: 12081 раз |
|
Комментарии
Immeasurability | | Дата: 07.09.2009 | Комментарий: 16 |
| | Спасиб! | | Serg_pnz | | | | | Дата: 04.09.2009 | Комментарий: 15 |
| | Immeasurability, у меня не описан такой пример. Советую изучить это http://dklab.ru/lib/DbSimple/
Я на новых проектах сейчас юзаю именно DbSimple. Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | Immeasurability | | Дата: 04.09.2009 | Комментарий: 14 |
| | а есть гденить у тя пример использования кэширования SQL запроса!??? | | Immeasurability | | Дата: 17.08.2009 | Комментарий: 13 |
| | так бы сразу и сказал что в твоем примере нет данного решения по кэшированию
я заблудился))) | | Serg_pnz | | | | | Дата: 16.08.2009 | Комментарий: 12 |
| | 1. Первый вопрос грамм непонятен.
2. static пригодится только во время исполнения одного скрипта. Даже если юзер будет перемещаться по страницам файлового архива static-переменные будут переопределяться.
А кеширование запросов - это когда один юзер создал результаты, а пользуются все. (см. http://dklab.ru/lib/DbSimple/) Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | Immeasurability | | Дата: 14.08.2009 | Комментарий: 11 |
| | какой должен быть интервал времени между запросами для того чтобы сработал static $massiv
и разве static $massiv не для повторной процедуры одного просмотра | | Serg_pnz | | | | | Дата: 14.08.2009 | Комментарий: 10 |
| | Цитата | что легче для системы вычеслить 2 запроса простых или 1 усложненный? |
Зависит от величины базы и сложности запросов. И так, и так имеет быть место оптимально.
Для баз с большими объемами и огромном потоке запросов применяют технологию кеширования запросов (именно запросов, а не страниц) Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | Immeasurability | | Дата: 14.08.2009 | Комментарий: 9 |
| | сделал двумя запросами и вариант с одним запросам
(всего во всей функции function categories максимум 2 запроса!!!)
также выводит Общее количество статей: X в Y категориях
где X количество статей в находящейся категории и Y количество категорий в находящейся категории
подсчет количество вложанных подкатегорий и в них статей неограничен
последовотельность чуть другая инфы. сделал чуть понятний для пользователей X/Y Z
X-количество статей в данной категории
Y-количество статей в данной категории со всеми подкатегориями
Z-количество всех подкатегорий данной категории
терь вопрос
Цитата | двумя запросами и вариант с одним запросам |
что легче для системы вычеслить 2 запроса простых или 1 усложненный???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ отредактированно 14.08.2009г. | | Route | | Дата: 26.01.2009 | Комментарий: 8 |
| | Я просто в массивах деревянный :) Никогда их не понимал! | | Route | | Дата: 26.01.2009 | Комментарий: 7 |
| | А можно этот хак для slaed 4.x ?
Serg_pnz, сделайте плииииз
Вот даже код:
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| <?php # Format categories function categories($mod, $tab, $sub, $desc, $id="") { global $prefix, $db, $user, $conf, $currentlang; if (analyze($mod)) { $id = (intval($id)) ? $id : 0; if ($id) { $where = "WHERE modul='$mod' AND parentid = '$id'"; } elseif ($id && $conf['multilingual']) { $where = "WHERE modul='$mod' AND parentid = '$id' AND (language='$currentlang' OR language='')"; } elseif ($conf['multilingual']) { $where = "WHERE modul='$mod' AND (language='$currentlang' OR language='')"; } else { $where = "WHERE modul='$mod'"; } $tdwidth = intval(100/$tab); $cat_num = 0; $result = $db->sql_query("SELECT id, title, description, img, parentid, auth_view, auth_read FROM ".$prefix."_categories ".$where." ORDER BY ordern, title"); while (list($cid, $title, $description, $img, $parentid, $auth_view, $auth_read) = $db->sql_fetchrow($result)) { $massiv[] = array($cid, $title, $description, $img, $parentid, $auth_view, $auth_read); unset($cid, $title, $description, $img, $parentid, $auth_view, $auth_read); $cat_num++; } if ($massiv) { foreach ($massiv as $val) { if ($val[4] == $id && is_acess($val[5])) { $catid[] = $val[0]; if (is_acess($val[6])) { $hidden = ""; $htitle = $val[1]; $ilink = ($val[3]) ? "<a href=\"index.php?name=$mod&cat=$val[0]\" title=\"".$htitle."\"><img src=\"images/categories/".$val[3]."\" border=\"0\" alt=\"".$htitle."\" title=\"".$htitle."\"></a>" : "<a href=\"index.php?name=$mod&cat=$val[0]\" title=\"".$htitle."\"><img src=\"".img_find("all/".strtolower($mod))."\" border=\"0\" alt=\"".$htitle."\" title=\"".$htitle."\"></a>"; $alink = "<a href=\"index.php?name=$mod&cat=$val[0]\" title=\"".$htitle."\"><b>$val[1]</b></a>"; } else { $hidden = "class=\"hidden\""; $htitle = $val[1]." - "._CCLOSED; $ilink = ($val[3]) ? "<img src=\"images/categories/".$val[3]."\" border=\"0\" alt=\"".$htitle."\" title=\"".$htitle."\">" : "<img src=\"".img_find("all/".strtolower($mod))."\" border=\"0\" alt=\"".$htitle."\" title=\"".$htitle."\">"; $alink = "<b>".$val[1]."</b>"; } if ($val[3]) { $description = ($desc) ? " $ccontent .= "<td valign=\"top\" width=\"".$tdwidth."%\"><table width=\"100%\" border=\"0\" $hidden><tr><td>".$ilink."</td><td width=\"100%\">".$alink.$description."</td></tr>"; } else { $description = ($desc) ? "<tr><td colspan=\"2\"><i>".$val[2]."</i></td></tr>" : ""; $ccontent .= "<td valign=\"top\" width=\"".$tdwidth."%\"><table width=\"100%\" border=\"0\" $hidden><tr><td>".$ilink."</td><td width=\"100%\">".$alink."</td></tr>".$description; } foreach ($massiv as $val2) { if ($val[0] == $val2[4] && is_acess($val2[5])) { $catid[] = $val2[0]; if ($sub == 1) { $alink = (is_acess($val2[6])) ? " <a href=\"index.php?name=$mod&cat=$val2[0]\" title=\"".$val2[1]."\">".$val2[1]."</a>" : ""; $ccontent .= "<tr><td colspan=\"2\"><img border=\"0\" src=\"".img_find("misc/navi")."\" title=\"".$val2[1]."\">".$alink."</td></tr>"; } } } $ccontent .= "</table></td>"; if ($cont == ($tab - 1)) { $ccontent .= "</tr><tr>"; $cont = 0; } else { $cont++; } } } } if ($ccontent) { $catid = implode(", ", $catid); if ($mod == "faq") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(fid) FROM ".$prefix."_faq WHERE catid IN ($catid) AND time <= now() AND status!='0'")); $in = _INFA; } elseif ($mod == "files") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(lid) FROM ".$prefix."_files WHERE cid IN ($catid) AND date <= now() AND status!='0'")); $in = _INF; } elseif ($mod == "help") { $uid = intval($user[0]); list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(sid) FROM ".$prefix."_help WHERE catid IN ($catid) AND time <= now() AND pid='0' AND uid='$uid'")); $in = _INH; } elseif ($mod == "jokes") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(jokeid) FROM ".$prefix."_jokes WHERE cat IN ($catid) AND date <= now() AND status!='0'")); $in = _INJ; } elseif ($mod == "links") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(lid) FROM ".$prefix."_links WHERE cid IN ($catid) AND date <= now() AND status!='0'")); $in = _INL; } elseif ($mod == "media") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(id) FROM ".$prefix."_media WHERE cid IN ($catid) AND date <= now() AND status!='0'")); $in = _INM; } elseif ($mod == "news") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(sid) FROM ".$prefix."_stories WHERE catid IN ($catid) AND time <= now() AND status!='0'")); $in = _INN; } elseif ($mod == "pages") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(pid) FROM ".$prefix."_page WHERE catid IN ($catid) AND time <= now() AND status!='0'")); $in = _INP; } elseif ($mod == "shop") { list($pages_num) = $db->sql_fetchrow($db->sql_query("SELECT Count(product_id) FROM ".$prefix."_products WHERE product_cid IN ($catid) AND product_time <= now() AND product_active !='0'")); $in = _INS; } open(); echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" align=\"center\"><tr>".$ccontent."</td></tr></table>" ."<hr><center>"._ALLIN.": <b>".$pages_num."</b> ".$in." <b>".$cat_num."</b> "._ALLINC."</center>"; close(); } } } ?> |
|
|
|
Всего 16 на 2 страницах по 10 на каждой странице [ 1 | 2 ] [>>] |
|
|
|