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 23/12/2010, 02h12   #1
Invité de passage
 
Inscription : février 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 2
Points : 0
Points : 0
Par défaut Inclusion quantique spontanée

Bonjour,

Je viens à vous car j'ai un petit soucis de conception.

Je suis en train de réaliser un site avec une optique de séparation du code et de l'affichage, se basant sur un modèle MVC.

Smarty est donc en charge de ma composante vue.

Dans mes controleurs (classes), j'assigne un certain nombre de données à Smarty, qui en gère l'affichage.

Mes pages sont basées sur un template du type:
-header
-menu vertical
-contenu
-footer

J'ai donc fragmenté ma page et la structure de mon template index est la suivante:
Code Index.tpl.html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <head>
        <title>{$meta_title}</title>
    </head>
	<body>
		<div id="principal">
			<header role="banner" id="entete">{include file='header.tpl.html'}</header>
			<nav role="navigation" id="menu-h">{include file='menu.tpl.html'}</nav>
			<div id="contenu">{if $warning}{$warning}{/if}
			{if $content}
			{include file=$content}
			{/if}</div>
			<footer id="pied">{include file='footer.tpl.html'}</footer>		
		</div>
	</body>
</html>

Et voici mon menu.tpl.html:
Code menu.tpl.html :
1
2
3
4
5
 
<ul> 
        <li>liens ... </li>
	<li>{$authentification}</li>
</ul>

Ma problèmatique est la suivante:
En lieu et place d' {$authentification}, est censé apparaître un formulaire de connexion, ou un lien permettant la déconnexion. Tout dépend, évidemment, de si la personne est connectée ou non, vous en conviendrez.

Je cherche à permettre ce switch de manière propre. Au niveau du code PHP, le test est simple:

Si pas connecté: affichage du formulaire de connexion
Si connecté: affichage du lien de déconnexion

Actuellement, voici les solutions que je vois mais qui ne me plaisent pas.

  • Remplacer {$authentification} par {include file=$authentification}, et faire un fichier login.tpl.html et un fichier logout.tpl.html
    => À quoi bon créer un fichier pour 2 ligne, il doit y avoir un moyen plus simple ?
  • Garder mon {$authentification}, et fournir en PHP le code HTML du formulaire, ce qui rompt mon principe de séparation du code et de l'affichage
  • Assigner dynamiquement un lien ou un Template suivant la situation, à savoir, il faudrait que mon {$authentification} ne sache pas à l'avance si il va recevoir du texte ou un template à charger ... Mais alors là... J'ai aucune idée de comment faire ça. Je m'en remet donc à vous. (Et si il y a moyen, ça va me faciliter la vie pour plein de choses.

J'espère avoir été assez clair pour que vous puissiez me venir en aide.

En vous remerciant,
Noirvent[/list]
noirvent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h17   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Code :
1
2
3
4
5
6
 
{IF $authentification eq 'true'}
 code html de deconnexion
{ELSEIF $authentification eq 'false'}
code html de connexion
{/IF}
Comme ça tu sépares toujours tes couches.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 17h21   #3
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Bonjour,

Regarde du côté de l'instruction fetch() qui te permet de traiter un fichier TPL et de récupérer le code produit.

Donc ça pourrait donner :

Code :
1
2
3
4
5
6
7
8
9
if ($isLogged) {
    $loginHtmlPart = $oSmarty->fetch('logout.tpl.html');
}else {
    $loginHtmlPart = $oSmarty->fetch('login.tpl.html');
}
 
$oSmarty->assign('loginHtmlPart', $loginHtmlPart);
 
$oSmarty->display('menu.tpl.html');
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 22h55   #4
Invité de passage
 
Inscription : février 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 2
Points : 0
Points : 0
Merci bien sieur Eric, vous m’ôtez là une grande épine du pied. Effectivement, je n'avais pas pensé à cette utilisation du fetch, et pourtant, ça va grandement m'aider. =3

Actuellement, j'ai fais cela comme ça:
Code :
1
2
3
4
5
6
7
8
9
10
 protection function statutConnexion()
  {
 
     if ($this->connexion()) {
      $this->vue->assign("authentification", "{$this->getLocByRef("fr", "index", "logout/welcome")}  {$this->session->session_login}.(<a href='?ctrl=index&amp;action=logout'>{$this->getLocByRef("fr", "index", "logout/disconnect")}</a>)");
    }
    else {
      $this->vue->assign("authentification", $this->FormIdentification("?ctrl=index&amp;action=login"));
    }
  }
Mais derrière mon FormIdentification se cache bêtement du code HTML fournit par php (brrr, pas beau), en attendant que je trouve une solution propre pour générer des formulaires tout en respectant mon principe MVC, ce qui est pas gagné é_è

Du coup, la meilleure solution serait-il de faire, par exemple:

Un fichier template de base (ex. inscription.tpl.html) selon le schéma suivant:
Code :
1
2
3
4
 
<p>{$page_titre}</p>
<p>{$page_contenu>}</p>
<p>{$page_foo}</p>
Un second template inscription.form.tpl.html:
Code :
1
2
 
<form>Mon formulaire plein de champs</form>
et d'inclure mon premier template via un
Code :
    $this->vue->assign("$page_contenu", $this->vue->fetch("inscription.form.tpl.html"));
?

(J'inclus pas le formulaire directement dans le premier Template simplement parce que je veux utiliser ce Template successivement pour afficher le règlement qui doit être accepté, puis ensuite afficher le formulaire, en utilisant la même structure à chaque fois.)

Mais je me demande si du coup cette solution est la plus propre pour ce qui est l'affichage des formulaires. Car du coup, si je dois ajouter ou supprimer un champ, je dois non seulement modifier ma classe, mais du coup, aussi le Template.. *casse-tête* (ce qu'il me faudrait pouvoir faire, c'est une fonction qui génère la liste des champs(noms, types, label) dont j'ai besoin, la transmette à smarty sous forme de tableau ou d'objet, et que je laisse à smarty le soin d'y greffer le code html du formulaire :3 Ainsi, je pourrais réutiliser la fonction pour autre chose que l'inscription.. Mais peut-être est-ce se compliquer la vie ?
noirvent est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h15.


 
 
 
 
Partenaires

Hébergement Web