Categories > TinyButStrong general (FR) >

[fr] Probleme de cache partiel d'une page (encore)

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Antoine
Date: 2004-11-04
Time: 14:42

[fr] Probleme de cache partiel d'une page (encore)

Bonjour,
Comme tout le monde ici, je tiens aussi à vous féliciter pour cette classe.
Je débute un peu, et j'ai aussi des problemes pour ne pas mettre en cache  une partie de la page. (qui est en fait un sous modele "tbs_include"  )

C'est un module de login avec nom et prenom du membre, et comme pour Mikael (message posté le 01/09/2004), ce serait dommage de mettre en cache une page pour chaque membre (surtout que ce module de log est affiché sur presque toutes les page du site)

J'ai testé avec les proprietés "TBS_CACHENOW" et "Render", mais je n'y arrive pas.
By: ric-rac
Date: 2004-11-05
Time: 10:56

Re: [fr] Probleme de cache partiel d'une page (encore)

bonjour Skrol29,
tout d'abord nous sommes très heureux que la version 2.0 ait vu le jour!!!

avec antoine nous rencontrons un problème concernant le cache, voici quelques questions :
1) est ce que tu pourrais nous donner un exemple de la constante TBS_LOAD ?
2) on a l'habitude d'inclure des modules dans nos pages (avec des onload et de onshow) comment mettre en cache ces modules (puisqu'il n'y a pas de methode SHOW sur ces pages ? faut-il utiliser TBS_CACHENOW)
3) enfin je te donne le code de la page que je veux mettre en cache (le HTML et le PHP) tu remarqueras les modules à charger (certains ne doivent pas etre mis en cache notament le module d'authentification) :
<body>

<div id="conteneur">
  <!-- header -->
  [tbs_include.onload;file=[var.da_header_tbs]]
  <!-- colonne de gauche -->
  <div id="gauche">
  <!-- Modules de login (soit login soit log_ok-->
    [tbs_include.onload;file=[var.da_module_log]]
    [tbs_include.onload;file=[var.inc_outil_recherche]]
  </div>
  <!-- zone centrale -->
  <div id="centre">
    <div class="cartouche">
      <h1 class="cartouche_annuaire">ANNUAIRE DES PROFESSIONNELS</h1>
      <h5 class="cartouche_annuaire">Nouvelle version ! Recherchez des cr&eacute;atifs
        selon vos crit&egrave;res</h5>
      <p class="chapeau_annuaire">DirecteurArtistique.Net met &agrave; disposition
        des agences, des professionnels, et des freelances un annuaire gratuit
        afin de faciliter leur mise en relation et de tisser entre eux des rapports
        de confiance privil&eacute;gi&eacute;s.</p>
      <h3 class="cartouche_annuaire">Les derniers inscrits</h3>
      <ul class="cartouche_contenu_annuaire">
        <li [tbs_check;if [inscrit.#] =1; then class="premier";htmlconv=no]>
          <p class="cartouche_contenu_annuaire_nom"><a href="da_annuaire_n3.php?id_identitee=[inscrit.id_identitee;block=li]"><img src="../ima/visuels_upload/[inscrit.photo_identitee;block=li]" alt="Visuel [inscrit.prenom_identitee;block=li] [inscrit.nom_identitee;block=li]" width="64" height="62" border="0" class="position_gauche" />[inscrit.prenom_identitee;block=li]
            [inscrit.nom_identitee;block=li]</a></p>
          <p class="cartouche_contenu_annuaire">[inscrit.nom_metier;block=li]</p>
          <p class="cartouche_contenu_annuaire">[inscrit.societe_identitee;block=li]</p>
          <p class="cartouche_contenu_annuaire_url"><a href="da_annuaire_n3.php?id_identitee=[inscrit.id_identitee;block=li]">Voir son profil</a></p>
        </li>
      </ul>
      <h3 class="cartouche_annuaire">Les derniers profils mis &agrave; jour</h3>
      <ul class="cartouche_contenu_annuaire">
        <li  [tbs_check;if [maj.#] =1; then class="premier";htmlconv=no]>
          <p class="cartouche_contenu_annuaire_nom"><a href="da_annuaire_n3.php?id_identitee=[maj.id_identitee;block=li]"><img src="../ima/visuels_upload/[maj.photo_identitee;block=li]" alt="Visuel [maj.prenom_identitee;block=li] [maj.nom_identitee;block=li]" width="64" height="62" border="0" class="position_gauche" />[maj.prenom_identitee;block=li]
            [maj.nom_identitee;block=li]</a></p>
          <p class="cartouche_contenu_annuaire">[maj.nom_metier;block=li]</p>
          <p class="cartouche_contenu_annuaire">[maj.societe_identitee;block=li]</p>
          <p class="cartouche_contenu_annuaire_url"><a href="da_annuaire_n3.php?id_identitee=[maj.id_identitee;block=li]">Voir son profil</a></p>
        </li>
      </ul>
      <div class="cartouche_bas">&nbsp;</div>
    </div>
  </div>
  <!--  colonne de droite -->
  <div id="droite">
    [tbs_include.onload;file=[var.inc_menu]]
    [tbs_include.onshow;file=[var.da_inc_inscription_profil]]
  </div>
<!-- footer -->
  [tbs_include.onshow;file=[var.da_footer_tbs]]
</div>

</body>
et le PHP :
session_start();

include_once "config.php";

// modules
$da_header_tbs="../da_header.tbs.html";
$da_footer_tbs="../da_footer.tbs.html";
$da_inc_inscription_profil="da_inc_inscription_profil.tbs.html";
$inc_menu = "da_inc_menu.tbs.html";
$inc_outil_recherche = "da_inc_outil_recherche.tbs.html";

//module d'identification
if ( autorise2() )
{
  include_once("../membre/da_log_ok.inc.php");
  $da_module_log="../membre/da_log_ok.tbs.html";
}else
{
  include_once("../membre/da_login.inc.php");
  $da_module_log="../membre/da_login.tbs.html";
}

// variable de positionnement du menu pour le passage en <strong>
$menu_on = 0;

// affichage des 3 derniers inscrits
$sql_maj = "SELECT  i.id_identitee, i.nom_identitee, i.prenom_identitee, i.photo_identitee, i.societe_identitee, m.nom_metier FROM annuaireda_identitee AS i, annuaireda_metier AS m, annuaireda_fiche AS f
    WHERE i.id_metier = m.id_metier AND i.id_identitee = f.id_identitee AND f.profil_online_fiche = 1
    ORDER BY i.date_maj_identitee DESC
    LIMIT 0, 3";
$resultat_maj = $db->get_results ($sql_maj, ARRAY_A);

// affichage des 3 derniers inscrits
$sql_inscrit = "SELECT i.id_identitee, i.nom_identitee, i.prenom_identitee, i.photo_identitee, i.societe_identitee, m.nom_metier FROM annuaireda_identitee AS i, annuaireda_metier AS m, annuaireda_fiche AS f
    WHERE i.id_metier = m.id_metier AND i.id_identitee = f.id_identitee AND f.profil_online_fiche = 1
    ORDER BY f.date_crea_fiche DESC
    LIMIT 0, 3";
$resultat_inscrit = $db->get_results ($sql_inscrit, ARRAY_A);

$TBS = new clsTinyButStrong;

$TBS->LoadTemplate("da_annuaire_n1.tbs.html");

$TBS->MergeBlock("inscrit", $resultat_inscrit);
$TBS->MergeBlock("maj", $resultat_maj);

include_once("../da_header.inc.php");
include_once("../da_footer.inc.php");
include_once("da_inc_inscription_profil.php");
include_once("da_inc_menu.php");
include_once("da_inc_outil_recherche.php");
$TBS->Show();

merci d'avance pour ton aide et tes éclaircissements
By: ric-rac
Date: 2004-11-05
Time: 11:13

Re: [fr] Probleme de cache partiel d'une page (encore)

encore une question :
en utilisant la méthode CacheAction ou est ce que tu places les constantes
(  $TBS->CacheAction(string CacheId {, int ActTimeOut}{, string Dir})  ), comme TBS_CACHENOW ou TBS_LOAD ? est ce qu'on peut utiliser les arguements CacheId, ActTimeOut et Dir avec ces deux constantes  ?

merci
By: Skrol29
Date: 2004-11-05
Time: 17:47

Re: [fr] Probleme de cache partiel d'une page (encore)

À cette question je peux répondre rapidement.
Les constantes d'action TBS_CACHENOW, TBS_LOAD, ... se mettent à la place de l'argument ActTimeOut. Cet argument est soit une action, soit un timeout.

Attention aussi à votre modèle avec TBS 2.0 : vous avez encore des tb_include. C'est compatible avec TBS "2.0ce" mais pas avec TBS "2.0".

By: Skrol29
Date: 2004-11-07
Time: 23:47

Re: [fr] Probleme de cache partiel d'une page (encore)

Il existe deux type de modèle partiellement mis en cache.
A) Un modèle Html qui doit être globalement mis en cache sauf quelques sections.
B) Un modèle Html qui reste dynamique sauf quelques sections qui doivent
être mises en cache.
Vous, vous êtes dans le cas B car votre modèle principal reste dynamique,
et vous utilisez des inclusion de fichiers mis en caches.


1) À propos de TBS_LOAD
En fait ce n'est pas TBS_LOAD mais TBS_CACHELOAD, le manuel vient d'être corrigé.
Voici un exemple :
$TBS->CacheAction('toto',TBS_CACHELOAD);
Cela à pour effet de charger le fichier cache 'cache_tbs_toto.php', mais aucun champ automatique n'est traité [onload].

2) Pour les modules (sous-modèles)
TBS_CACHENOW permet de gérer le cas A. Il enregistre le résultat actuel de la fusion dans le fichier cache.
Et le programme peut continuer.

Pour les sous-modèles qui sont fixes [onshow] ([tbs_include.onshow] pour TBS < 2.0) est très bien.
[onload] ([tbs_include.onload]) est ok aussi mais moins optimisé.

Pour les sous-modèles avec des parties à fusionner avec le modèle principal, il faut utiliser
[onload] ([tbs_include.onload]).

Pour les sous-modèles mis en cache, là c'est plus compliqué et il y a plusieurs méthodes possibles. J'ai mis différentes idées ci-après.
D'abord il faut savoir que les fichiers cache de TBS s'appellent par défaut 'cache_tbs_xxx.php' où 'xxx' est l'id du fichier.
On peut changer cela grâce à la propriété CacheMask non documentée qui a pour valeur 'cache_tbs_*.php' par défaut.
Ca peut être pratique si vous avez besoin de personnaliser vos noms de fichier cache.

Première idée :
Vous pouvez utiliser le paramètre 'script' pour afficher un fichier mis en cache.
Le script appelé devra créer un objet TBS, gèrer le cache (chargement ou actualisation) puis l'affichage. L'avantage c'est qu’on n’a pas besoin de re-déclarer 'tbs_class.php'.

Deuxième idée :
Vous utilisez [onload;file=mon_fichier_cache.php]. C'est très rapide, mais l'actualisation du fichier cache devra être géré par ailleurs.

Troisième idée :
Voyer si vous ne pouvez pas contruire votre page sur le principe du cas A.
C'est en général plus simple à gérér.