|
|
|
| Уважаемы знатоки, как мне наиболее удачно кэшировать данный кусок (выпадающее меню - каталог сайтов ) кода средствами php.
<?php
//$db="sites";
require_once 'db.php';
if (!isset($_REQUEST[parent_id])) {
$_REQUEST[parent_id]=0;
$res[parent_id]=0;
}
else {
$res = mysql_fetch_array(mysql_query("select * from {$_conf[table_prefix_sites]}category where category_id={$_REQUEST[parent_id]}"));
$res1 = mysql_fetch_array(mysql_query("select * from {$_conf[table_prefix_sites]}category where category_id={$res[parent_id]}"));
if (!isset($_REQUEST[cat]))
$res3 = mysql_fetch_array(mysql_query("select * from {$_conf[table_prefix_sites]}category where parent_id={$_REQUEST[parent_id]} order by pos limit 1"));
else $res3 = mysql_fetch_array(mysql_query("select name from {$_conf[table_prefix_sites]}category where category_id={$_REQUEST[cat]} order by pos limit 1"));
echo "<strong> {$res1[name]} / {$res[name]} / {$res3[name]} </strong><br>";
}
$res2 = mysql_query("select * from {$_conf[table_prefix_sites]}category where parent_id={$res[parent_id]} order by pos");
$i=1; $v=3;
while ($row = mysql_fetch_array($res2))
{
echo "<a href=\"#\" onclick=\"toggle_visibility('poo{$i}');\">{$row[name]}</a><br><blockquote>";
if ($row[category_id]==$_REQUEST[parent_id]) {
echo "<div style=\"display:block;\" id=\"poo{$i}\">";
$v = "poo".$i;
}
else echo "<div style=\"display:none;\" id=\"poo{$i}\">";
$res1 = mysql_query("select * from {$_conf[table_prefix_sites]}category where parent_id={$row[category_id]} order by pos");
while ($row1 = mysql_fetch_array($res1))
{
if ($_REQUEST[parent_id]==0)
echo "<a href=\"index.php?parent_id={$row1[category_id]}\">".$row1[name]."</a><br>";
else
if($row1[name]==$res3[name])
echo $row1[name]."<br>";
else echo "<a href=\"index.php?parent_id={$row[category_id]}&cat={$row1[category_id]}\">{$row1[name]}</a><br>";
}
echo "</div></blockquote>";
$i++;
}
mysql_close();
?>
|
замечания по коду принимаются! спасибо. | |
|
|
|
|
|
|
|
для: Senegal
(25.09.2007 в 14:30)
| | Кэшировать где хотите? На сервере или клиенте? | |
|
|
|
|
|
|
|
для: cheops
(26.09.2007 в 10:43)
| | на сервере | |
|
|
|
|
|
|
|
для: Senegal
(25.09.2007 в 14:30)
| | Вопрос еще не потерял актуальности и остается открытым. Помогите, кто сталкивался с подобным. | |
|
|
|
|
|
|
|
для: Senegal
(27.09.2007 в 05:18)
| | я бы посоветовал запомнить вывод в переменную, которую сохранить либо в базе, либо в файле.
до начала всех выводов пишите
Так все ваши echo не выходят на экран, а помещаются в буфер. Чтобы получить значения, нужно после всех выводов написать
Это заносит содержимое буфера в $out и очищает буфер.
Теперь нужно как-то запомнить этот $out - либо в базе, либо в файле.
Ну и при вызове меню читать содержимое этого файла или записи БД.
А функцию собственно создания меню оставить только у администратора - чтоб он делал, например, "переформировать меню", и по новой бегал ваш цикл и записывал результат.
Вот. Вроде, понятно объяснил. | |
|
|
|
|
|
|
|
для: neudor
(27.09.2007 в 08:16)
| | Да, это понятно - стандартный подход. Только вот там вывод разный в зависимости от параметров. получится что файлов кэша для этого католога будет столько, сколько категорий - порядка 10. Это нормально?? Можно как-нибудь всё в один файл упаковать? | |
|
|
|