0

我想遍历单个数组并仅对某些元素禁用缓存。所以我的想法是在 nocache 部分保留key和获取元素。key不幸的是,我没有发现任何可能性:

分配缓存$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');

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

4

2 回答 2

1

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

    {nocache}
        {counter start=0 skip=1 assign="count"}
    {/nocache}
    {section name="co" loop=$publication}
        {nocache}
            {$publication[$count].id}
            {counter}
        {/nocache}
    {/section}
于 2013-04-08T21:02:04.907 回答
0

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

在 3.2 发布之前(不要问日期,我不知道),您也许可以使用编译器函数自己执行此操作。

于 2012-03-03T12:02:16.783 回答