Inclusions & Smarty

Résolu
Sniperman113 Messages postés 98 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 21 février 2012 - 19 mai 2007 à 20:31
Sniperman113 Messages postés 98 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 21 février 2012 - 20 mai 2007 à 01:43
Bonjour,

J'ai un petit problème avec Smarty.
Enfaite, je souhaite que mon site soit le plus rapide possible à s'afficher. Pour cela, je comptais utiliser le système de cache de Smarty.
Ainsi, je n'aurai que le "contenu" à recharger et le menu, le header, le footer et le module de recherche serait entièrement dans le cache et donc le chargement serait plus rapide.
J'ai donc mis { insert name='content' } à l'endroit où je voulais mon contenu.
Le seul problème c'est lorsque j'include une page PHP dans laquelle j'appelle la fonction "function insert_content()"  qui contient elle-même :
$content = $smarty -> display("montemplate.tpl");
return $content;

J'ai alors cette jolie erreur : "Fatal error: Call to a member function display() on a non-object in chemin-du-fichier-ou-ya-la-fct-insert_content on line 15"

Je voulais donc savoir si l'on peut inclure un autre template dans le template "principal" sans passer par { include } car ça serait alors trop complexe à gérer (sachant qu'il faut aussi tenir compte du cache). Si oui, comment faire ?

Merci d'avance pour votre aide.

Cordialement,
Sniperman113.

6 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 mai 2007 à 01:39
Pour les captchas, y'a des sources toutes récentes ici même.
J'ai noté celle de kankrelune qui me parait sympa et efficace, mais que je n'ai pas testée.
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 mai 2007 à 00:50
Salut,

Je pense que ton problème est un problème de portée de variable.
L'instance de l'objet Smarty, que tu stockes dans la variable $smarty n'est pas accessible depuis ta fonction. Dans celle-ci, tu dois rajouter :
global $smarty;

Ou son équivalent :
$smarty = $GLOBALS['smarty'];
0
Sniperman113 Messages postés 98 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 21 février 2012
20 mai 2007 à 00:57
En effet, ça marche !

Cependant, est-ce que tu sais si je retire { insert name='content' }, que je le remplace par { $content }, si ce content sera gardé en cache ? Parce que là j'ai remarqué qu'avec un formulaire lorsque je remplis un champ et que je refresh, le champ est toujours remplis.
Alors lorsque j'utilise insert, le champ se vide.

Ca pourrait être plus pratique pour l'utilisateur si lorsqu'il y a refresh, le champ reste plein.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 mai 2007 à 01:20
Re,

Je viens de retrouver ce que j'avais fait pour ma galerie, d'après la doc de Smarty...

// Bloc de template à ne pas mettre en cache
function not_cached($param, $content, &$smarty)
{
return $content;
}
$template -> register_block('not_cached', 'not_cached', false);

Ensuite, ce que je ne veux pas mettre en cache, dans mon template, je le mets entre {not_cached} et {/not_cached}
Au moins, je contrôle parfaitement ce qui se passe : tout est mis en cache, SAUF ce que je mets explicitement entre ces deux balises.
C'est je pense une manière plus propre que celle que tu essaies de mettre en place (c'est pas moi qui l'ai inventée, hein, j'ai fait que lire la doc). Une chose est sûre : ça marche, j'ai testé.

Bonne continuation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sniperman113 Messages postés 98 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 21 février 2012
20 mai 2007 à 01:33
Re,

Bah le truc de { insert name='content' } qui n'est pas mis en cache, ça vient directement de la doc Smarty ^^
Mais c'est vrai que ton truc est pas mal du tout.

Cependant, je me demande si Smarty n'arrive pas à gérer lui même ce qui change et ce qui ne change pas vis à vis de la page qu'il a en cache et à modifier tout seul ce qui a changé..

Parce que lorsque j'ai mis { $content } on aurait dit que c'était stocké en cache alors que je ne lui ai demandé nul part.

Bref un grand mystère ^^

Sinon, truc qui n'a rien à voir, connaitrais-tu un système de Captchas efficace et TRES simple à mettre en oeuvre ? Parce que le je suis bloqué avec artichow. Je n'arrive pas à récupérer le code généré pour le tester :(
0
Sniperman113 Messages postés 98 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 21 février 2012
20 mai 2007 à 01:43
Très bien.

Merci pour tout et bonne continuation ;)
0
Rejoignez-nous