2012-09-10 2 views
0

Je tente de créer un modèle en utilisant Smarty pour php. Je voudrais que le modèle soit réutilisable, donc je l'hérite et je remplace les valeurs par des blocs. Cela fonctionne correctement, sauf lorsque j'ai besoin d'accéder à ces valeurs de bloc dans des sous-modèles. J'appelle ces sous-modèles en utilisant la fonction {include} de smarty.Les blocs de sous-modèles Smarty se cassent lorsqu'ils sont mis à jour

Exemple:

Template-Parent (template.tpl):

<html> 
    <head> 
     {include file=sub_template.tpl} 
    </head> 

    <body> 
     {block name=title}No Title Provided{/block} 
    </body> 
</html> 

Sous-modèle (sub_template.tpl)

 <title>{block name=title}No Title Provided{/block}</title> 

Template-enfant (template_child.tpl)

 {extends file="template.tpl"} 
    {block name=title}My Website!{/block} 

Quand je voir le site, la sortie est:

<html> 
    <head> 
     <title>No Title Provided</title> 
    </head> 

    <body> 
     My Website! 
    </body> 
</html> 

Après avoir fait quelques reaserch je l'ai vu une note sur le site Web de Smarty sur les enfermer {include} fonctions dans les balises factices {bloc} mais ont eu des niveaux variés de succès à obtenir que cela fonctionne .

Note: Si vous avez un sous-modèle qui est inclus avec {include} et {contient bloc} zones il ne fonctionne que si le {include} est lui-même appelé à partir d'un bloc autour de {}. Dans le modèle parent final, vous devrez peut-être un mannequin {bloc} pour elle. (Http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl)

En raison de ceci, j'ai essayé:

<html> 
    <head> 
     {block name=dummy}{include file=sub_template.tpl}{/block} 
    </head> 

    <body> 
     {block name=title}No Title Provided{/block} 
    </body> 
</html> 

Cela semble fonctionner jusqu'à ce que j'apporte n'importe quel changement au sous-modèle. Dès qu'une modification du sous-modèle est effectuée, il cesse à nouveau de répondre aux valeurs de bloc définies dans l'enfant.

Ai-je mal compris ce que l'avis faisait référence à de placer la {include} dans les balises de bloc factices ou est-ce un bug avec Smarty? Je n'utilise pas actuellement la mise en cache mais mon autre pensée était que c'est peut-être un problème de mise en cache de sous-modèles.

Toute idée serait grandement appréciée, merci!

+0

Je pense qu'il peut en fait être un problème de mise en cache. J'ai effacé le dossier 'templates_c' dans le répertoire smarty, ce qui provoque le fonctionnement normal des valeurs de bloc dans le fichier sub_template. Cependant, une fois que le sous-modèle est modifié, il arrête encore une fois de trouver des valeurs dans les blocs. Existe-t-il une solution élégante qui n'implique pas de vider le cache manuellement après chaque modification? – Krejko

Répondre

0

Il est vrai que ces modèles sont compilés et mis en cache dans le répertoire des modèles. C'est pourquoi la suppression du répertoire des modèles a temporairement résolu le problème. La mise en cache du modèle est différente de la mise en cache explicite que smarty prend également en charge. J'ai trouvé que la mise en cache de modèle peut être remplacé par:

$smarty->compile_check = true; 
$smarty->force_compile = true; 

Cela permet de modifier le modèle à réaliser avec des besoin de supprimer le cache après le changement alors que dans le développement.

Questions connexes