Нужен трюк, чтобы использовать кешированное значение в разделе nocache

Я хочу перебрать один массив и отключить кеширование только для некоторых элементов. Итак, моя идея заключалась в том, чтобы сохранить key и получить элемент по key в разделе nocache. К сожалению, я не нашел возможности:

назначить кэшированный $rec@key в разделе nocache,

или оставьте определение переменной key в кэшированном разделе.

Есть ли способ (без модификации умного кода) сделать это? вот мой test.tpl:

{foreach $array as $rec}
  {if $rec.dynamic}
    {assign var="key" value=$rec@key} 
    {nocache}
      {$array[$key].text}
    {/nocache}  
  {else}
    {$rec.text}
  {/if}
{/foreach}

и test.php:

<?php 
include_once 'libs/Smarty.class.php';
$smarty=new smarty();
$smarty->caching=1;
$smarty->assign('array',array(
            'r1'=>array('dynamic'=>true,'text'=>'dynamic'),
            'r2'=>array('dynamic'=>false,'text'=>'static')
          ));
$smarty->display('test.tpl');

(конечно, я буду использовать его для гораздо более сложных вещей, чем отображение текста :)) Я перепробовал много трюков и сам думаю, что это невозможно, пожалуйста, скажите мне, что я ошибаюсь :)


person Michal G    schedule 11.10.2011    source источник
comment
Я не вижу, чтобы {foreach} {nocace} {$rec@key} работало каким-либо образом. Что мешает вам обернуть весь {foreach} в {nocache}?   -  person rodneyrehm    schedule 12.10.2011
comment
Я хочу получить как можно больше от умного кэширования. Это было бы идеальным решением для моей CMS. На самом деле я буду включать разные шаблоны для каждого элемента. Но у меня может быть 2 экземпляра одного и того же модуля с разными данными, и я хочу иметь один экземпляр объекта конфигурации.   -  person Michal G    schedule 12.10.2011


Ответы (2)


То, что вы пытаетесь выполнить, в Smarty 3.1.x невозможно. В версии 3.2 Smarty позволит вам «экспортировать» значения в раздел {nocache}, чтобы убедиться, что они доступны при повторном выполнении шаблона.

Пока не будет выпущена версия 3.2 (не спрашивайте дату, я не знаю), вы можете сделать это самостоятельно, используя функцию компилятора.

person rodneyrehm    schedule 03.03.2012

Наконец, я нашел решение: используйте count в своем цикле.

    {nocache}
        {counter start=0 skip=1 assign="count"}
    {/nocache}
    {section name="co" loop=$publication}
        {nocache}
            {$publication[$count].id}
            {counter}
        {/nocache}
    {/section}
person Pierre Gourlaouen    schedule 08.04.2013