Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > Smarty
Smarty Forum d'entraide sur le moteur de templates Smarty. Avant de poster -> FAQ Smarty et Cours Smarty
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2006, 09h04   #1
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Par défaut faire un include d'un contenu statique ?

Bonjour à tous.
Je me bat avec Smarty depuis hier soir pour inclure un contenu statique (un fichier HTML tout bête) au milieu de mon template.

J'ai essayé les fonctions include et insert, mais incapable de le faire marcher, et je préférerai éviter de passer par les balises {php}.

Avez-vous une idée SVP ?

d'avance
__________________
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 09h19   #2
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
Citation:
Envoyé par titoumimi
Avez-vous une idée SVP ?
Bah sans {include}, {inser} et {php} non je vois pas... .. .

qu'est ce qui marche pas avec {include} ... .. ?

@ tchaOo°
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 09h22   #3
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Merci de ta réponse.
Mais peut-être que je m'y suis mal pris avec les insert et include...

mais il me semble que le include ne permet que de mettre un fichier tpl en paramètre.

quand au insert, il semble necessiter de placer la fonction PHP correspondante dans un plugin, ce qui me chagrine un poil je doit dire
__________________
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 10h32   #4
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
Citation:
Envoyé par titoumimi
mais il me semble que le include ne permet que de mettre un fichier tpl en paramètre.
Bah non un fichier html ça doit passer... par contre pour un fichier contenant du php c'est clair ça passera pas... .. .

@ tchaOo°
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 15h44   #5
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Alors deux solutions :

- on peut définir un plugin qui reprenne la fonction include de PHP :

function.inclure.php (à placer dans le répertoire plugin de Smarty)
Code :
1
2
3
4
5
6
<?php
	function smarty_function_inclure ($param) {
		extract($param);
		include $page;
	}
?>
qui s'utilise comme suit dans le template :

Code :
{inclure page=$Contenu}
$Contenu contient ici le path vers le fichier à inclure.
Inconvénient, si c'est du PHP, il sera exécuté 'hors contexte' du script initial.

D'où la deuxième solution :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$string = get_include_contents('somefile.php');
 
function get_include_contents($filename) {
  if (is_file($filename)) {
   ob_start();
   include $filename;
   $contents = ob_get_contents();
   ob_end_clean();
   return $contents;
  }
  return false;
}
 
?>
(http://fr3.php.net/manual/fr/function.include.php)

il ne reste plus qu'à faire un assign de $string à notre template, et à l'afficher à l'endroit voulu
__________________
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 20h15   #6
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745


par contre je ferais plutot...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

function get_include_contents($filename) 
{
  if(!is_file($filename))
       return false;
 
  $lastContents = ob_get_contents ();
  
  if($lastContents === false)
       ob_start();
             else
                  ob_clean();

   include($filename);
   $inContents = ob_get_contents();

   if($lastContents === false)
        ob_end_clean();
   else
   {
        ob_clean();
        ob_start();
        echo $lastContents;
   }

   return $inContents;
}
 
?>
Ca évitera quelque problème si la bufferisation est déja activée... .. .

@ tchaOo°
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h17.


 
 
 
 
Partenaires

Hébergement Web