За последние 24 часа нас посетили 22862 программиста и 1237 роботов. Сейчас ищут 695 программистов ...

запрет кэширования части шаблона

Тема в разделе "Прочие вопросы по PHP", создана пользователем wolandino, 5 мар 2006.

  1. wolandino

    wolandino Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    193
    Симпатии:
    0
    Адрес:
    Россия, Астрахань
    Приветствую,

    Неожиданно для себя столкнулся с проблемой. Есть некоторая система, где активно используется Smarty. Включено автоматическое кэширование всех страниц.

    Возникла ситуация когда нужно не обрабатывать кусок хтмл-кода одного из шаблонов - ничего в голову, кроме как использования {insert} не пришло... Но не помогло это - несмотря на то, что переменная в результате работы моего плагина получает правильное значение в остальных частях шаблона она имеет, разумеется, кэшированное значение.

    Как можно обойти это? Можно ли заставить шаблонизатор не кэшировать значение одной переменной, оставив ее динамической? Поможет ли использование метода register_block?
    Если поможет, можно реальный пример? Я настолько глуп, что не могу разобраться с примером в мануале.
     
  2. wolandino

    wolandino Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    193
    Симпатии:
    0
    Адрес:
    Россия, Астрахань
    можно закрывать...
    в третий раз на форуме задаю вопрос сам себе))
     
  3. mistake

    mistake Активный пользователь

    С нами с:
    23 фев 2006
    Сообщения:
    23
    Симпатии:
    0
    Вот нашел в факе, может поможет...

    Q: How do I include cached template(s) within a non-cached template?
    A: One way to do it:

    $smarty->caching = true;
    $tpl1 = $smarty->fetch("internal1.tpl");
    $tpl2 = $smarty->fetch("internal2.tpl");
    $tpl3 = $smarty->fetch("internal3.tpl");

    $smarty->assign("tpl1_contents",$tpl1);
    $smarty->assign("tpl2_contents",$tpl2);
    $smarty->assign("tpl3_contents",$tpl3);

    $smarty->caching = false;
    $smarty->display('index.tpl');

    index.tpl
    ---------

    <table>
    <tr>
    <td>{$tpl1_contents}</td>
    <td>{$tpl2_contents}</td>
    <td>{$tpl3_contents}</td>
    </tr>
    </table>




    Another approach:

    You could write a custom insert function to fetch your internal
    templates:

    <table>
    <tr>
    <td>{insert name=fetch_tpl tpl="internal1.tpl"}</td>
    <td>{insert name=fetch_tpl tpl="internal2.tpl"}</td>
    <td>{insert name=fetch_tpl tpl="internal3.tpl"}</td>
    </tr>
    </table>[/b]