[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SMARTY - сохранить значение переменной
f606628
Добрый день.

Использую шаблонизатор SMARTY - версия: Smarty 3.1.14

Есть следующий код

<?php

require('../libs/Smarty.class.php');

$smarty = new Smarty;

$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;

if (!$smarty->isCached('index.tpl' )) {

$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill", true);

}
$smarty->display('index.tpl');


?>


И шаблон index.tpl



{nocache}
{$Name}
{/nocache}



Вопрос в следующем, можно ли как-то при таком развитии событий с 1) проверкой на существование кэша - "isCached" и 2) динамическим блоком содержимого (который обернут в тэги nocache) - добиться сохранения значения переменной? Т.е. что бы ее значение постоянно выводилось (сохранившись) и не пропадало?



--
Спасибо.
Oyeme
Зачем Вам проверят если кэш - это лишние.
Вы просто устанавливаете значение переменной все.

Цитата
добиться сохранения значения переменной? Т.е. что бы ее значение постоянно выводилось (сохранившись) и не пропадало?

Тогда этот участок вы как раз и будет кешировать.

Есть ли Вам нужно что бы было все постоняннто используйте сессии.

В любом случаи кэш будет заново генерироваться если контрольная сумма файла при кэше различается от закешированной.(Минуя noCache tags)
f606628
Проблема в том - что у меня есть плагин для smarty.
Суть его - он к БД mysql делает запрос SELECT.
И регистрирует полученные данные через assign.

Этот запрос очень ресурсоемкий.

Вот мне и надо 1-раз сделав assign в этом плагине - сохранить его значене, что бы можно было использовать в блоке {nocache}... значение из этого запроса.

Сессии мне не подходят - мне нужно именно что бы шаблоизатор сам сохранили у себя (в шаблоне это значение) - и я мог потом его использовать в html-шаблоне в блоге nocache.

Думал и рассчитвал добиться этого через $smarty-assign('назване переменной', 'значение', 'false/true') - через третьий параметр assign - не кэшировать - но он отвечает немного за другое.
Oyeme
Почему Вы не хотите использовать отдельное кеширование для запросов? wink.gif (Они для этого и созданны)
-Кеширование запросов
-Кеширование шаблонов

Две разные ветки с разной логикой.
f606628
Может быть бы и хотел...
Но данный вариант мне не подходит с кэшированием запросов и будет очень сложно. Т.к. мне опять же придется делать запрос к получению кэша данных...

Мне нужно именно сохранить значение переменной...
Думал что SMARTY-3 умеет делать так - именно сохранять значение переменных через assign?

Oyeme
Понимаете если У Вас запрос идет из базы данных Вы всегда будуте ее дергать. wink.gif Smarty Вам не поможет в этом деле у него совсем другая идея.

Для этого Вам нужно использовать кеширование в запросах. wink.gif
Вам всего лишь нужно дописать обертку для класса data base.
f606628
> Вам всего лишь нужно дописать обертку для класса data base.

А что за обертку?
Oyeme
Если Вы используете ОПП стиль то просто допишите определныый условия для запросов,например:

$this->query('select * form test',true);

Вторым аргументом будет использовать кеширование или нет.

В интеренете полно примерoв.(Можете взять за основу)
Например исползуя memcache
http://css.dzone.com/articles/how-use-memcache-php

Или файловай cache

https://github.com/gilbitron/PHP-SimpleCache
f606628
Да, жалко что придется еще что-то доустанавливать...
Рассчитывал это сделать через Smarty...

Спасибо.
f606628
Нашел способ:

$smarty->properties['....'];
f606628
Единственный момент только понять не могу:
вот создал плагин, который через assign - регестрирует значение:

// Данная супер-функция регестрирует значение переменной в шаблон
function smarty_function_registerData($params, &$smarty) {

$smarty->assign("aaaa", "cccc");
return 1;

}



И не могу понять вот есть два варианта как зарегестрировать плагин (как кэшируемый и как не кэшируемый):


$mySmartyInstance->registerPlugin("function", "registerData", "smarty_function_registerData", false); // не кэшируемый
$mySmartyInstance->registerPlugin("function", "registerData", "smarty_function_registerData"); // кэшируемый



И проблема в том, что в первом случае (когда плагин регестрируется как не кэшируемый) я могу получить значение через {$aaaa} - в шаблоне, а вот во втором - нет...

Где могу быть не прав?
Guest
Не подходит данный вариант...
Скорее всего придется использовать префильтр...

Думаю что с его помощью можно будет дописать некоторую дату в начало файла...
zezst
А если так? getTemplateVars
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.