Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: кэширование
 
 автор: Senegal   (25.09.2007 в 14:30)   письмо автору
 
 

Уважаемы знатоки, как мне наиболее удачно кэшировать данный кусок (выпадающее меню - каталог сайтов ) кода средствами 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();
?>

замечания по коду принимаются! спасибо.

   
 
 автор: cheops   (26.09.2007 в 10:43)   письмо автору
 
   для: Senegal   (25.09.2007 в 14:30)
 

Кэшировать где хотите? На сервере или клиенте?

   
 
 автор: Senegal   (26.09.2007 в 13:00)   письмо автору
 
   для: cheops   (26.09.2007 в 10:43)
 

на сервере

   
 
 автор: Senegal   (27.09.2007 в 05:18)   письмо автору
 
   для: Senegal   (25.09.2007 в 14:30)
 

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

   
 
 автор: neudor   (27.09.2007 в 08:16)   письмо автору
 
   для: Senegal   (27.09.2007 в 05:18)
 

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

до начала всех выводов пишите
ob_start();

Так все ваши echo не выходят на экран, а помещаются в буфер. Чтобы получить значения, нужно после всех выводов написать
$out = ob_get_clean();

Это заносит содержимое буфера в $out и очищает буфер.

Теперь нужно как-то запомнить этот $out - либо в базе, либо в файле.
Ну и при вызове меню читать содержимое этого файла или записи БД.

А функцию собственно создания меню оставить только у администратора - чтоб он делал, например, "переформировать меню", и по новой бегал ваш цикл и записывал результат.

Вот. Вроде, понятно объяснил.

   
 
 автор: Senegal   (28.09.2007 в 14:07)   письмо автору
 
   для: neudor   (27.09.2007 в 08:16)
 

Да, это понятно - стандартный подход. Только вот там вывод разный в зависимости от параметров. получится что файлов кэша для этого католога будет столько, сколько категорий - порядка 10. Это нормально?? Можно как-нибудь всё в один файл упаковать?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования