Нужен трюк для использования кэшированного значения в разделе nocache - PullRequest
0 голосов
/ 11 октября 2011

Я хочу перебрать один массив и отключить кэширование только для некоторых элементов.Поэтому я хотел сохранить 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');

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2013

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

    {nocache}
        {counter start=0 skip=1 assign="count"}
    {/nocache}
    {section name="co" loop=$publication}
        {nocache}
            {$publication[$count].id}
            {counter}
        {/nocache}
    {/section}
0 голосов
/ 03 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...