我想通过单个数组进行迭代,并且仅针对某些元素禁用缓存。
所以我的想法是保留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');
(当然我会将它用于比文本显示更复杂的东西:)) 我尝试了许多技巧,我自己认为这是不可能的,请告诉我我错了:)
答案 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发布(不要求约会,我不知道)你可以使用编译器功能自己做。