#smarty #smarty3
#умный #smarty3
Вопрос:
Я хочу выполнить итерацию по одному массиву и отключить кэширование только для некоторых элементов. Итак, моя идея заключалась в том, чтобы сохранить key
и получить элемент по key
в разделе nocache. К сожалению, я не нашел никакой возможности:
назначить кэш $rec@key
в разделе nocache,
или сохранить key
определение переменной в разделе cached.
Есть ли какой-либо способ (без модификации кода smarty) сделать это? вот мой тест.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');
(конечно, я буду использовать его для гораздо более сложных вещей, чем отображение текста :))
Я перепробовал много трюков, и сам я думаю, что это невозможно, пожалуйста, скажите мне, что я ошибаюсь 🙂
Комментарии:
1. Я не вижу, чтобы {foreach} {nocace} {$ rec @key} работал каким-либо образом. Что мешает вам обернуть весь {foreach} в {nocache}?
2. Я хочу получить как можно больше от кэширования smarty. Это было бы идеальным решением для моей CMS. На самом деле я буду включать разные шаблоны для каждого элемента. Но у меня может быть 2 экземпляра одного и того же модуля с разными данными, и я хочу иметь один экземпляр объекта «конфигурация».
Ответ №1:
Наконец, я нашел решение: используйте count в вашем цикле.
{nocache}
{counter start=0 skip=1 assign="count"}
{/nocache}
{section name="co" loop=$publication}
{nocache}
{$publication[$count].id}
{counter}
{/nocache}
{/section}
Ответ №2:
То, что вы пытаетесь выполнить, начиная с Smarty 3.1.x, невозможно. С 3.2 Smarty позволит вам «экспортировать» значения в раздел {nocache}, чтобы убедиться, что они доступны при повторном выполнении шаблона.
Пока не будет выпущена версия 3.2 (не спрашивайте дату, я не знаю), вы можете сделать это самостоятельно, используя функцию компилятора.