Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Assigner une page tpl à une variable

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: French
View previous topic :: View next topic  
Author Message
emulienfou
Smarty Rookie


Joined: 28 May 2010
Posts: 18

PostPosted: Tue Jun 22, 2010 6:08 am    Post subject: Assigner une page tpl à une variable Reply with quote

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
View user's profile Send private message
emulienfou
Smarty Rookie


Joined: 28 May 2010
Posts: 18

PostPosted: Tue Jun 22, 2010 8:45 am    Post subject: Reply with quote

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
View user's profile Send private message
Gowser
Smarty Pro


Joined: 19 Feb 2008
Posts: 104
Location: Nantes (France)

PostPosted: Tue Jun 22, 2010 3:16 pm    Post subject: Reply with quote

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 Very Happy
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: French All times are GMT
Page 1 of 1

 
Jump to:  
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
Protected by Anti-Spam ACP