需要在nocache部分使用缓存值的技巧

时间:2011-10-11 19:21:27

标签: smarty smarty3

我想通过单个数组进行迭代,并且仅针对某些元素禁用缓存。 所以我的想法是保留key并在nocache部分中按key获取元素。不幸的是,我没有找到任何可能性:

在nocache部分中分配缓存的$rec@key

或在缓存部分中保留变量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');

(当然我会将它用于比文本显示更复杂的东西:)) 我尝试了许多技巧,我自己认为这是不可能的,请告诉我我错了:)

2 个答案:

答案 0 :(得分:1)

最后,我找到了一个解决方案:在循环中使用count。

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

答案 1 :(得分:0)

你想要完成的是,从Smarty 3.1.x开始,这是不可能的。使用3.2 Smarty将允许您将值“导出”到{nocache}部分,以确保在重新执行模板时它们可用。

直到3.2发布(不要求约会,我不知道)你可以使用编译器功能自己做。