|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
emulienfou Smarty Rookie
Joined: 28 May 2010 Posts: 18
|
Posted: Tue Jun 22, 2010 6:08 am Post subject: Assigner une page tpl à une variable |
|
|
Bonjour, je suis en trait de faire mon site et j'ai un fichier tpl contenant le header, un menu de gauche et un footer sur une page avec la variable {$content} et de l'autre coté j'ai une page home.tpl avec le code principale de ma page et je voulais savoir s'il était possible de faire un display('home.tpl') mais que le display soit assigné à content.
Je souhaiterai que soie afficher à la place de {$content} se trouvant sur ma page main.tpl le contenue de ma page home.tpl défini dans une autre page PHP, sans include du coté smarty.
Je m'y prends peut être mal pour faire ce dont je souhaite, merci de m'orienté sur le bon chemin si cela s'avère être le cas.
Cordialement |
|
Back to top |
|
emulienfou Smarty Rookie
Joined: 28 May 2010 Posts: 18
|
Posted: Tue Jun 22, 2010 8:45 am Post subject: |
|
|
J'ai trouvé cela qui fonctionne :
$home_page = $tpl->fetch('home.tpl');
$tpl->assign('content', $home_page);
Y a-t-il une autre solution meiux que cela ??? |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Tue Jun 22, 2010 3:16 pm Post subject: |
|
|
Bonjour,
Tu pourrais te faire une classe qui édenterai smarty pour redéfinir la fonction 'display' initiale afin que lorsque tu fais un $smarty->display, il récupère automatiquement ton template principal et initialise la variable $content :
Template principal avec ton header, menu, pied de page, etc ... (dans l'exemple appelé principal.tpl):
Tu remarqueras que je fait un include du fichier voulu
Code: |
<html>
<body>
{include file=$content}
</body>
</html>
|
Template home.tpl de ton exemple (juste pour exemple) :
Code: |
<h1>
page d'accueil !!!
</h1>
|
Classe SmartyExtra pour redéfinir la fonction display :
Code: |
<?php
require_once 'smarty/Smarty.class.php';
class SmartyExtra extends Smarty{
public function __construct(){
// j'appelle le constructeur du parent (ici la classe Smarty)
parent::__construct();
// je redefini le repertoire des template
$this->template_dir = dirname(__FILE__).'/views';
// je redefini le repertoire de compilation
$this->compile_dir = dirname(__FILE__).'/templates_c/';
}
public function display($template){
// on assigne au template la variable $content avec le tpl voulu
$this->assign('content', $template);
// principal.tpl est ton template qui contient ton entete, menu, etc et la variable $content
parent::display('principal.tpl');
}
}
?>
|
Et au final voici un fichier de test pour appeler la nouvelle classe :
Code: |
<?php
require_once 'SmartyExtra.php';
$smarty = new SmartyExtra();
$smarty->display('home.tpl');
?>
|
----------------------------
Donc grâce à la redéfinition de la fonction 'display', mon fichier principal.tpl est appelé à chaque fois et le fichier voulu est inclus dedans.
C'est assez pratique car tu n'as pas a changer tout le code de ton application mais juste la classe appelé pour l'affichage (SmartyExtra à la place de smarty).
J'espère que j'ai pas répondu à coté de la plaque |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|