Свойства сайта Smarty кеша в базе данных - PullRequest
0 голосов
/ 10 октября 2011

Я собираюсь создать в базе данных сайт с динамическим содержимым (такими как заголовок, URL и т. Д.). Полагаю, было бы очень бесполезно каждый раз запрашивать все и назначать переменные, так что я читал о кешировании.

Я использую шаблон Smarty, system.

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

    $smarty = new Smarty;
    $smarty->setCaching(true);

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

    //query here and assign..
    $smarty->assign('title', 'Test');
    }

    $smarty->display('themes/simple/index.tpl');
  1. Код выше Когда проверяется кеш? Если я сделаю изменение в свойствах сайта моей базы данных, я хочу мгновенно изменить свой сайт, это может быть очень важной вещью, такой как перевод сайта на техническое обслуживание и т. Д.
  2. Действительно ли мне нужно запрашивать все данные снова и снова при каждой загрузке страницы, чтобы получить информацию о сайте, или есть какое-то решение, например, проверка структуры строк базы данных с помощью кэша или что-то в этом роде?

Решения, мне нужно!


UPDATE: Я пробую метод clearCache, но он не работает должным образом. Я обновляю базу данных, но метод clearCache, похоже, не сработал или что-то в этом роде.

$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

//just to test
$smarty->clearCache('index.tpl');


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



//do stuff here

1 Ответ

1 голос
/ 10 октября 2011

При изменении содержимого базы данных сообщите Smarty для очистки соответствующих кэшей clearCache ().

Вы также можете проверить время изменения кэша по некоторой отметке времени, сохраненной в вашей базе данных.

<?php
$smarty = new Smarty();
$tpl = $smarty->createTemplate($template_file, $cache_id);
$databaseLastModified = strtotime("yesterday"); // determine when the database was modified last
if (!$tpl->isCached() || $tpl->cached->timestamp < $databaseLastModified) {
  $tpl->force_cache = true; // in case of timestamp < modified
  // load data for smarty to process
  $tpl->assign('your', 'stuff');
}
$tpl->display();
...