Categories > TinyButStrong general (FR) >

Cache et Sous-modele

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: olivier
Date: 2005-10-21
Time: 01:04

Cache et Sous-modele

Bonjour,

J'utilise un modele principale en des sous-modeles pour le contenu avec  un [onload;file=[var.mon_template]].

Le systeme de cache de TBS est il capable de gérer un cache pour les sous-modeles ?

Par avance merci
olivier
By: Skrol29
Date: 2005-10-21
Time: 13:13

Re: Cache et Sous-modele

Bonjour Olivier,

Il n'y a rein de prévu pour cela. Mais tu peux gérer le cache d'un sous modèle ou de plusieurs sous modèles à la fois en utilisant une astuce : le paramètre "onformat" avec "subtpl" te permette de lancer une fonction perso en mode sou-modèle. À toi de coder la fonction qui va charger le sou-modèle avec gestion de cache.

Exemple :
  [onload;onformat=f_cache_soustpl;subtpl;tpl=page4.html;htmlconv=no]

Côté PHP:
function fct_name($FieldName,&$CurrVal,&$CurrPrm,&$TBS) {
  $fichier = $CurrPrm['tpl'];
  $TBS->CacheAction(...);
  $TBS->LoadTemplate($fichier);
  $TBS->Show();
}
By: olivier
Date: 2005-10-21
Time: 16:18

Re: Cache et Sous-modele

Un grand merci. Voici ce que j'ai mis en place (pour laisser une trace sur le forum)

le code php :

<?

include_once('tbs_class.php') ;

function f_cache_soustpl($FieldName,&$CurrVal,&$CurrPrm,&$TBS) {
  $fichier = $CurrPrm['tpl'];
  if (!$TBS->CacheAction('testcache',30))
  {
   $TBS->LoadTemplate($fichier);
   $TBS->Show();
  }
}

$TBS = new clsTinyButStrong ;

$TBS->LoadTemplate('test1.html') ;
$TBS->Show() ;

?>

Le template principal :

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>TinyButStrong</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="tbs_us_examples_0styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<p align="center" class="title-page">Example of the Cache System</p>
<table width="500" border="0" align="center" cellpadding="2" cellspacing="0">
  <tr>
    <td><p>The Cache System enables you to recompute a page with a chosen interval of time instead of at each page call.<br>
        <br>
        <span class="text-section2"> In this example, the time-out is set to 10 seconds. If you recall the page several times, you will see that it is not systematically updated.</span><br>
      </p></td>
  </tr>
  <tr>
    <td>
      [var..now;frm='hh:nn:ss']
    </td>
  </tr>
</table>
<div align="center"><br>
  [onload;onformat=f_cache_soustpl;subtpl;tpl=test1.subtpl.html;htmlconv=no]
  <p><a href="[var..script_name]?">recall the page</a></p>
</div>
</body>
</html>

Le sous modele

  <table width="200" border="2" cellpadding="4" cellspacing="0" bordercolor="#336699">
    <tr>
      <td><div align="center">Time of merging: <span class="text-example2">[var..now;frm='hh:nn:ss']</span></div></td>
    </tr>
  </table>

Voila, c'est simple comme TBS :-) et encore une fois on se rend compte que TBS est hyper puissant
By: olivier
Date: 2005-10-23
Time: 12:02

Re: Cache et Sous-modele

Dans mon exemple, j'ai remplacé :

[onload;onformat=f_cache_soustpl;subtpl;tpl=test1.subtpl.html;htmlconv=no]

par

[onload;onformat=f_cache_soustpl;subtpl;tpl=[var.stpl];htmlconv=no]

et ça ne fonctionne plus car stpl n'est pas "décodé" . J'ai le message d'erreur "TinyButStrong Error (LoadTemplate Method): Unable to read the file '[var.stpl]'."

... comment faire (j'ai bien mis un $stpl="test.html") ?
By: olivier
Date: 2005-10-23
Time: 13:09

Re: Cache et Sous-modele

J'ai trouvé :

function f_cache_soustpl($FieldName,&$CurrVal,&$CurrPrm,&$TBS) {
  $fichier = $CurrPrm['tpl'];
  if (!$TBS->CacheAction('testcache',30))
  {
   $TBS->meth_Merge_PhpVar($fichier,false);
   $TBS->LoadTemplate($fichier);
   $TBS->Show();
  }
}