Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3442 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  23  24  25  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1568756
omega2
Posté le 01-06-2007 à 18:04:04  profilanswer
 

Reprise du message précédent :
PunkRod > J'ai comencé à l'utiliser mais pas pour la partie affichage. Il y a de bon trucs dedans mais il y a encore des manques dans les parties que j'ai utilisé. D'un autre côté, c'est pas encore sortie en version stable alors ca peu changer.

mood
Publicité
Posté le 01-06-2007 à 18:04:04  profilanswer
 

n°1571525
vanadium
N° Atomique : 23
Posté le 07-06-2007 à 13:48:50  profilanswer
 

Ce que je reproche à CodeIgniter c'est de ne pas avoir d'ORM correct (je dirais meme qu'il n'a pas d'ORM du tout, juste un semble de gestion objet de la connexion à la base de données) comme Propel ou Doctrine.
 
omega2 > rien ne t'empeche de prendre le moteur de templates Smarty par exemple, pour gérer l'affichage.


Message édité par vanadium le 07-06-2007 à 13:49:49
n°1571579
Shinuza
This is unexecpected
Posté le 07-06-2007 à 15:06:36  profilanswer
 

Propel sans helper c'est une grosse blague :o


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1571717
omega2
Posté le 07-06-2007 à 17:32:52  profilanswer
 

vanadium > Quand je disais qu'il manque des trucs, je parlais de maniére globale et pas juste au niveau du systéme de template.
Quand à smarty, c'est peut être mieux que ce que je me suis fait moi, mais voilà, je me suis fait mon propre systéme alors je ne l'utiliserai pas plus que je n'utilise le systéme de template de zend.

n°1571837
PunkRod
Digital Mohawk
Posté le 07-06-2007 à 19:39:34  profilanswer
 

omega2 a écrit :

vanadium > Quand je disais qu'il manque des trucs, je parlais de maniére globale et pas juste au niveau du systéme de template.
Quand à smarty, c'est peut être mieux que ce que je me suis fait moi, mais voilà, je me suis fait mon propre systéme alors je ne l'utiliserai pas plus que je n'utilise le systéme de template de zend.

 


Faut jamais dire jamais :o
:D

n°1572060
Shinuza
This is unexecpected
Posté le 08-06-2007 à 11:03:09  profilanswer
 

Shinuza a écrit :

Propel sans helper c'est une grosse blague :o


Et je parle pas des shorthands  :o


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1572076
omega2
Posté le 08-06-2007 à 11:11:50  profilanswer
 

PunkRod a écrit :

Faut jamais dire jamais :o
:D

Justement, je l'ai pas dit. :p

n°1572861
naeh
Posté le 10-06-2007 à 14:44:45  profilanswer
 

salut à tous :)
 
bon je suis de retour et mon blog en MVC est presque fini :D (j'ai pas eu trop de temps pour bosser dessus)
 
pour commencer je vais vous montrer ma class object (tous les modeles héritent de celle là)
la voici :

Code :
  1. <?php
  2. //class Object
  3. class Object {
  4. var $Id;
  5. var $Error = array();
  6. function __construct($id = 0){
  7.  if(is_numeric($id)){
  8.   $this->Id = $id;
  9.  }else{
  10.   $this->Id = 0;
  11.  }
  12. }
  13. function getId(){ //le ID est commun a toutes les classes
  14.  return $this->Id;
  15. }
  16. function NomClass(){ //recupere le nom de la class utilisée
  17.  return get_class($this);
  18. }
  19. function ListeParams(){ //utilisée par les autres fonction pour connaites les parmateres de chaque class
  20.  $params = get_class_vars($this->NomClass());
  21.  foreach($params as $cle => $val){
  22.   $result[] = $cle;
  23.  }
  24.  return $result;
  25. }
  26. function TableMysql(){ //les tables mysql ont les meme nom que les classes en miniscule
  27.  return strtolower($this->NomClass());
  28. }
  29. function ChampID(){ //utilisée par les autres fonctions pour connaitre le nom du champs id dans les tables mysql de chaque class.
  30.  switch($this->NomClass()){
  31.   case "User": $id_champ = "id_user"; break;
  32.   case "Message": $id_champ = "id_msg"; break;
  33.   case "Commentaire": $id_champ = "id_com"; break;
  34.   case "Categorie": $id_champ = "id_cat"; break;
  35.  }
  36.  return $id_champ;
  37. }
  38. function Edit($params = array()){
  39.  $parametres = $this->ListeParams();
  40.  if(count($params) > 0 && count($params) <= count($parametres) && $this->Id > 0){
  41.   $sql = "UPDATE ".$this->TableMysql()." SET " ;
  42.   foreach($params as $cle => $val){
  43.    if(in_array($cle, $parametres)){
  44.     $v = $i==0 ? "" : ", " ;
  45.     $sql .= "$v".$cle ."=\"$val\"";
  46.     $i++;
  47.    }
  48.   }
  49.   $sql .= " WHERE ". $this->ChampID(). "=$this->Id";
  50.   //mysql_query($sql);
  51.   //echo $sql;
  52.  }
  53. }
  54. function Delete(){
  55.  //delete sql
  56.  $sql = "DELETE FROM ".$this->TableMysql()." WHERE ". $this->ChampID(). " = $this->Id";
  57.  mysql_query($sql);
  58. }
  59. function Add($params = array()){
  60.  $parametres = $this->ListeParams();
  61.  if(count($params) > 0 && count($params) <= count($parametres)){
  62.   $sql = "INSERT INTO ".$this->TableMysql()." VALUES('', ";
  63.   $i = 0;
  64.   foreach($params as $cle => $val){ // a remplacer par un for sur $parametres pour mettre '' aux manquants
  65.    if(in_array($cle, $parametres)){
  66.     $val = $this->netTexte($val);
  67.     $v = $i==0 ? "" : ", " ;
  68.     $sql .= "$v\"$val\"";
  69.     $i++;
  70.    }
  71.   }
  72.   $sql .= " )";
  73.   //echo $sql;
  74.   mysql_query($sql);
  75.  }
  76. }
  77. function getAll(){ //fournit tous les parametres de la classe dans un array associatif
  78.  $parametres = $this->ListeParams();
  79.  $result = array();
  80.  for($i=0;$i<count($parametres);$i++){
  81.   $result["{$parametres[$i]}"] = $this->{$parametres[$i]};
  82.  }
  83.  return $result;
  84. }
  85. function setError($erreur = "" ){ //enregistrer une erreur
  86.  if($erreur == "" ){
  87.   $this->Error[] = "Erreur Inconue !!";
  88.  }else{
  89.   $this->Error[] = $erreur;
  90.  }
  91. }
  92. function getErrors(){ //fournit les erreurs dans un array
  93.  return $this->Error;
  94. }
  95. function netTexte($texte){
  96.  $texte = htmlentities($texte, ENT_QUOTES);
  97.  /*if (!get_magic_quotes_gpc()){
  98.   $texte = addslashes($texte);
  99.  }*/
  100.  return $texte;
  101. }
  102. function formatTexte($texte){
  103.  //$texte = stripslashes($texte); //enlever les anti-slashes
  104.  //style
  105.  $texte = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $texte); //gras
  106.  $texte = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $texte); //itallique
  107.  $texte = preg_replace('#\[u\](.+)\[/u\]#isU', '<u>$1</u>', $texte); //souligné
  108.  $texte = preg_replace('#\[s\](.+)\[/s\]#isU', '<s>$1</s>', $texte); //barré
  109.  $texte = preg_replace('#\[center\](.+)\[/center\]#isU', '<div style="text-align:center">$1</div>', $texte); //centré
  110.  for($i=1;$i<=6;$i++){
  111.   $texte = preg_replace("#\[h$i\](.+)\[/h$i\]#isU", "<h$i>$1</h$i>", $texte); //h
  112.  }
  113.  $texte = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $texte);//couleur
  114.  $texte = preg_replace('#(https?|ftps?)://[a-z0-9._/\?=\S-]+#i', '<a href="$0" target="_blank">$0</a>', $texte); //liens
  115.  $texte = preg_replace('#[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}#i', '<a href="mailto:$0">$0</a>', $texte); //mail  
  116.  $texte = nl2br($texte); //retours a la ligne
  117.  return $texte;
  118. }
  119. }
  120. ?>


 
pour pas trop encombrer le post je mettrai des exmples au fur et a mesure :)
 
 
à vos remarques maintnt :D

n°1572862
skeye
Posté le 10-06-2007 à 14:49:06  profilanswer
 

il y a du html, dans ta classe object.[:pingouino]
Et du sql.[:roane]


Message édité par skeye le 10-06-2007 à 14:51:15

---------------
Can't buy what I want because it's free -
n°1572863
skeye
Posté le 10-06-2007 à 14:52:09  profilanswer
 

TIP : MVC ça veut dire sépare le modèle, la vue et le controleur, pas qu'on met tout au même endroit.[:petrus75]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 10-06-2007 à 14:52:09  profilanswer
 

n°1572864
skeye
Posté le 10-06-2007 à 14:54:00  profilanswer
 

Bon, sinon le mélange anglais/français c'est très mal.
Et avoir un id et un tableau d'erreurs pour toutes les classes ça me parait douteux.


---------------
Can't buy what I want because it's free -
n°1572865
naeh
Posté le 10-06-2007 à 14:57:03  profilanswer
 

l'html qu'on voit ici c'est pas du contenu ce sont des transformations, meme si c'est du html on ne peut pas le considerer comme du contenu, sinon je le met ou ? dans le controller ?
 
et pour le sql ? d'apres toi toutes mes methodes add edit delete passent dans le controller ? et comment je fais quand je doit appeler le constructeur d'une class ? il est obligé d'aller chercher les données dans mysql, donc de l'sql dans tous les constructeurs.

n°1572866
Dj YeLL
$question = $to_be || !$to_be;
Posté le 10-06-2007 à 14:59:16  profilanswer
 

naeh a écrit :

l'html qu'on voit ici c'est pas du contenu ce sont des transformations, meme si c'est du html on ne peut pas le considerer comme du contenu, sinon je le met ou ? dans le controller ?

 

et pour le sql ? d'apres toi toutes mes methodes add edit delete passent dans le controller ? et comment je fais quand je doit appeler le constructeur d'une class ? il est obligé d'aller chercher les données dans mysql, donc de l'sql dans tous les constructeurs.

 

Non, dans le modèle plutôt non ?

 

(drap')


Message édité par Dj YeLL le 10-06-2007 à 14:59:23

---------------
Gamertag: CoteBlack YeLL
n°1572867
skeye
Posté le 10-06-2007 à 15:00:34  profilanswer
 

naeh a écrit :

l'html qu'on voit ici c'est pas du contenu ce sont des transformations, meme si c'est du html on ne peut pas le considerer comme du contenu, sinon je le met ou ? dans le controller ?

 

Non, il n'y a que la vue qui doit générer du html...

 
naeh a écrit :

et pour le sql ? d'apres toi toutes mes methodes add edit delete passent dans le controller ? et comment je fais quand je doit appeler le constructeur d'une class ? il est obligé d'aller chercher les données dans mysql, donc de l'sql dans tous les constructeurs.

 

ah non, le sql est dans le modèle. Je soulignais juste qu'avoir à la fois du sql et du html était pas bon.
...et sinon j'utiliserais plutôt une couche d'abstraction supplémentaire pour le sql, mais bon c'est loin d'être obligatoire.


Message édité par skeye le 10-06-2007 à 15:00:59

---------------
Can't buy what I want because it's free -
n°1572868
naeh
Posté le 10-06-2007 à 15:01:04  profilanswer
 

pour resumer un peu :
mes modeles sont : message, user, commentaire, categorie
mon controlleur : page index du blog (un switch quoi)
les vues, en voici un exemple :

Code :
  1. <?php
  2. $post = new Message($num);
  3. $posteur = new User($post->getUser());
  4. $cat = new Categorie($post->getCat());
  5. echo '
  6.  <div class="message">
  7.   <div class="titrePost"><strong>'.$post->getTitre().'</strong><br /><span class="desousTitre">Par '.$posteur->getNom().' le '.$post->getDateFR().' Dans : '.$cat->getTitre().'</span></div>
  8.   <p class="txt-j">'.$post->formatTexte($post->getTexte()).'</p>
  9.   <div class="ligne_grise_double txt-r">
  10.    <a href="?p=message&num='.$post->getId().'#com">Commentaires : '.$post->getNbCom().'</a>
  11.   </div>
  12.  </div>
  13. ';
  14. $commentaires = $post->getListCom();
  15. echo !empty($commentaires) ? '<div class="message"><strong>Commentaires :</strong><a name="com"></a></div>' : '';
  16. foreach($commentaires as $com){
  17.  $c = new Commentaire($com);
  18.  echo '
  19.   <div class="commentaire"><a name="'.$c->getId().'"></a>
  20.    <div class="titrePost"><strong>Par '.$c->getNom().' le '.$c->getDateFR().'</strong></div>
  21.    <p class="txt-j">'.$c->formatTexte($c->getTexte()).'</p>
  22.   </div>
  23.  ';
  24. }
  25. ?>
  26.   <div class="message"><a name="newCom"></a>
  27.    <form name="frm_commentaire" action="publier.php" method="post">
  28.    <p><strong>Ajouter un commentaire</strong></p>
  29.    <input type="hidden" name="type" id="type" value="commentaire" />
  30.    <input type="hidden" name="post" id="post" value="<?php echo $post->getId(); ?>" />
  31.    <p><input type="text" id="nom" name="nom" tabindex="1" size="22" /> <label for="nom">Nom</label></p>
  32.    <p><input type="text" id="email" name="email" tabindex="2" size="22" /> <label for="site">E-mail</label></p>
  33.    <p><input type="text" id="site" name="site" tabindex="3" size="22" value="http://" /> <label for="site">Site web</label></p>
  34.    <p><textarea id="commentaire" name="commentaire" tabindex="4" cols="100" rows="10"></textarea></p>
  35.    <p class="txt-r"><input type="submit" name="valider" id="valider" value="     Envoyer votre message     " /></p>
  36.    </form>
  37.   </div>

n°1572869
skeye
Posté le 10-06-2007 à 15:02:52  profilanswer
 

euh, ta vue instancie directement le modèle, là.[:roane]


Message édité par skeye le 10-06-2007 à 15:03:00

---------------
Can't buy what I want because it's free -
n°1572870
naeh
Posté le 10-06-2007 à 15:04:01  profilanswer
 

elle devrait pas ?

n°1572872
Dj YeLL
$question = $to_be || !$to_be;
Posté le 10-06-2007 à 15:04:44  profilanswer
 

naeh a écrit :

elle devrait pas ?

 

La vue sert à afficher des données uniquement, pas à instancier des choses ou affecter des variables etc... C'est le boulot du controller ça.


Message édité par Dj YeLL le 10-06-2007 à 15:04:58

---------------
Gamertag: CoteBlack YeLL
n°1572873
naeh
Posté le 10-06-2007 à 15:07:05  profilanswer
 

donc si je comprends bien, ma vue message devrait se decouper en deux :
- une pour afficher le message
- une 2eme pour afficher ses commentaires et le form de nouveau commentaire.
 
je dirais meme une vue par commentaire.
 
c'est ça ?

n°1572876
naeh
Posté le 10-06-2007 à 15:40:17  profilanswer
 

bon c'est ce que j'ai fait et ca donne ça :
 
vue message :

Code :
  1. <div class="message">
  2.   <div class="titrePost"><strong><?php echo $post->getTitre(); ?></strong><br /><span class="desousTitre">Par <?php echo $posteur->getNom(); ?> le <?php echo $post->getDateFR(); ?> Dans : <?php echo $cat->getTitre(); ?></span></div>
  3.   <p class="txt-j"><?php echo $post->formatTexte($post->getTexte()); ?></p>
  4.   <div class="ligne_grise_double txt-r">
  5.    <a href="?p=message&num=<?php echo $post->getId(); ?>#newCom">Ajouter un commentaire</a> |
  6.    <a href="?p=message&num=<?php echo $post->getId()?>#com">Commentaires : <?php echo $post->getNbCom(); ?></a>
  7.   </div>
  8.  </div>


vue commentaire :

Code :
  1. <div class="commentaire"><a name="<?php echo $c->getId(); ?>"></a>
  2.    <div class="titrePost"><strong>Par <?php echo $c->getNom(); ?> le <?php echo $c->getDateFR(); ?></strong></div>
  3.    <p class="txt-j"><?php echo $c->formatTexte($c->getTexte()); ?></p>
  4.   </div>


et le form new comment dans une vue separé.
et voici le controlleur (pour cette partie):

Code :
  1. case 'message': //page d'un message
  2.     $num = (isset($_GET['num']) && $_GET['num'] != '') ? $_GET['num'] : '';
  3.     $sql = "SELECT id_msg FROM message WHERE id_msg = $num";
  4.     $rs = mysql_query($sql);
  5.     if(!$rs || mysql_num_rows($rs) < 1){
  6.      $code = 1;
  7.      include("vues/erreur.php" );
  8.     }else{
  9.      $post = new Message($num);
  10.      $posteur = new User($post->getUser());
  11.      $cat = new Categorie($post->getCat());
  12.      include("vues/message.php" );
  13.      $commentaires = $post->getListCom();
  14.      echo !empty($commentaires) ? '<div class="message"><strong>Commentaires :</strong><a name="com"></a></div>' : '';
  15.      foreach($commentaires as $com){
  16.       $c = new Commentaire($com);
  17.       include("vues/commentaire.php" );
  18.      }
  19.      include("vues/new_commentaire.php" );
  20.     }
  21.    break;


 
alors ?

n°1572877
Dj YeLL
$question = $to_be || !$to_be;
Posté le 10-06-2007 à 15:47:30  profilanswer
 

Alors ? Alors tu fais tjs tes requêtes sql dans ton controller là ...


---------------
Gamertag: CoteBlack YeLL
n°1572880
naeh
Posté le 10-06-2007 à 15:52:12  profilanswer
 

bon a part sql.
 
le reste vous parait bon ?
 
en fait pour sql j'ai du mal avec l'approche, c'est a dire que je ne vois pas trop comment se fait la separation.


Message édité par naeh le 10-06-2007 à 15:56:28
n°1572903
naeh
Posté le 10-06-2007 à 17:26:44  profilanswer
 

http://82.240.194.157/blog/
si vous voulez voir un peu ce que ca donne :)
 
si ça rame, patience, ce n'est que mon petit P II 350Mhz @ home :) sur une freebox


Message édité par naeh le 10-06-2007 à 17:27:51
n°1572907
skeye
Posté le 10-06-2007 à 17:34:52  profilanswer
 

naeh a écrit :


et voici le controlleur (pour cette partie):

Code :
  1. case 'message': //page d'un message
  2.     $num = (isset($_GET['num']) && $_GET['num'] != '') ? $_GET['num'] : '';
  3.     $sql = "SELECT id_msg FROM message WHERE id_msg = $num";
  4.     $rs = mysql_query($sql);
  5.     if(!$rs || mysql_num_rows($rs) < 1){
  6.      $code = 1;
  7.      include("vues/erreur.php" );
  8.     }else{
  9.      $post = new Message($num);
  10.      $posteur = new User($post->getUser());
  11.      $cat = new Categorie($post->getCat());
  12.      include("vues/message.php" );
  13.      $commentaires = $post->getListCom();
  14.      echo !empty($commentaires) ? '<div class="message"><strong>Commentaires :</strong><a name="com"></a></div>' : '';
  15.      foreach($commentaires as $com){
  16.       $c = new Commentaire($com);
  17.       include("vues/commentaire.php" );
  18.      }
  19.      include("vues/new_commentaire.php" );
  20.     }
  21.    break;


 
alors ?


 
alors tu as du sql et du html dans ton controleur.[:el g]


---------------
Can't buy what I want because it's free -
n°1572909
naeh
Posté le 10-06-2007 à 17:38:39  profilanswer
 

pour le sql j'ai pas cherché a faire autrement (je l'explique plus haut)
 
par contre pour l'html tu parle surement de cette ligne :
echo !empty($commentaires) ? '<div class="message"><strong>Commentaires :</strong><a name="com"></a></div>' : '';
 
je viens de piger comment faire, en fait je vais instancier mon objet commentaire avant d'inserer la vue message et dans cette derniere je balance la ligne en question :)

n°1572913
Skateinmar​s
Posté le 10-06-2007 à 17:51:04  profilanswer
 

Les echo ca fait vraiment porc tout de même...

n°1573291
Shinuza
This is unexecpected
Posté le 11-06-2007 à 15:41:22  profilanswer
 

Hé bé [:mouais]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1573454
FlorentG
Posté le 11-06-2007 à 20:56:56  profilanswer
 

Ouais la classe Object dont tout le monde hérite n'est pas bien là [:johneh] L'héritage, ça ne sert pas à filer des fonctionnalités comme ça. On dirait que tu te sers de la classe Object comme variable globale permettant à tout le monde d'utiliser certaines fonctionnalités

n°1573467
naeh
Posté le 11-06-2007 à 21:26:21  profilanswer
 

je t'explique comment je vois la chose :
 
ma classe object m'evite de repeter certaines (plusieurs) methodes dans chaque class, en gros je factorise quoi :)
 
ou est le mal dans tout ça ?

Message cité 1 fois
Message édité par naeh le 11-06-2007 à 21:27:04
n°1573469
Dj YeLL
$question = $to_be || !$to_be;
Posté le 11-06-2007 à 21:32:11  profilanswer
 

Il me semble que la classe Object doit être le plus abstrait possible non ? Elle ne devrait contenir aucun information propre à ton site ou à tes datas.


---------------
Gamertag: CoteBlack YeLL
n°1573475
skeye
Posté le 11-06-2007 à 22:08:40  profilanswer
 

naeh a écrit :

je t'explique comment je vois la chose :
 
ma classe object m'evite de repeter certaines (plusieurs) methodes dans chaque class, en gros je factorise quoi :)
 
ou est le mal dans tout ça ?


Tu forces des fonctionnalités à des classes pour lesquelles il semblerait qu'elles soient inutiles/n'aient pas de sens.


---------------
Can't buy what I want because it's free -
n°1573485
naeh
Posté le 11-06-2007 à 22:40:43  profilanswer
 

en gros il me sert a factoriser add, edit, delete, et initier le ID de chaque classe, pour les autres fonctionnalités elles sont utilisées par l'objet lui meme pour faire le reste.
 
les 2 dernières (ou il y'a de l'html) elles sont passées dans le controlleur, donc ne font plus partie des modeles.
 
je rappelle que y'a que les modeles qui herite de object. mais je me dis aussi que si j'ajoute une couche pour gerer mysql c sur mon ibject ne sert a rien puisque les add, edit, delete seront gérées par l'objet de base de données (ce qui n'est pas le cas pour l'instant :D)

n°1573488
FlorentG
Posté le 11-06-2007 à 22:47:38  profilanswer
 

naeh a écrit :

je rappelle que y'a que les modeles qui herite de object. mais je me dis aussi que si j'ajoute une couche pour gerer mysql c sur mon ibject ne sert a rien puisque les add, edit, delete seront gérées par l'objet de base de données (ce qui n'est pas le cas pour l'instant :D)


Voilà, t'as compris par toi-même ;)

n°1573504
naeh
Posté le 11-06-2007 à 23:10:34  profilanswer
 

donc a part la partie sql, j'ai tout bon ? :D

n°1577356
Le_nain
Posté le 20-06-2007 à 17:20:34  profilanswer
 

Bonjour,
 
J'essaie de développer quelque chose de potable en PHP. Donc pour le model, j'utilise une extension de PDO (qui intègre un singleton et un compteur de requêtes).
Le controlleur est divisé en front controlleur qui appelle d'autres controlleurs (avec des swtchs). Chaque controlleur récupère ses variables et fait sa sauce avec ça.
Mon problème viendrait plus au niveau des templates. J'utilise de simples fichiers php avec des echo dedans (et des foreach pour les tableaux). Mais pour imbriquer plusieurs chose, ça n'est pas franchement pratique...
Par exemple pour afficher quelque chose de différent suivant si l'utilisateur est connecté ou non...
 
Faut-il définir 2 templates et "inclure" grâce au controlleur l'un dans l'autre (ça fait très vite beaucoup de templates) ? Genre utilisateur_connecte.tpl.php et utilisateur_deconnecte.tpl.php (les extensions sont la pour montrer que c'est des vues)
Faut-il plutôt définir une variable booléenne avec une vérification dans la vue (ça fait pleins de variables et du if dans la vue) ? Genre des variables $connected = true|false et un if ($connected) dans la vue ?
Ou encore faire la vérification de la connexion depuis la vue (mais ça le fait plus trop là...). Genre if (!empty($_SESSION['pseudo'])) dans la vue... (je vous l'avais dit, ça le fait pas !)
 
Bref, j'aimerais des avis ^^
 
Merci merci !

n°1577367
AlphaZone
Posté le 20-06-2007 à 17:38:20  profilanswer
 

Le_nain a écrit :

Faut-il plutôt définir une variable booléenne avec une vérification dans la vue (ça fait pleins de variables et du if dans la vue) ? Genre des variables $connected = true|false et un if ($connected) dans la vue ?


Pourquoi faire compliquer alors qu'on peut faire simple :) Cette solution est très bien ;)


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1577383
omega2
Posté le 20-06-2007 à 17:58:34  profilanswer
 

Le_nain > Je crois que tu confonds "template" et "vue". Normalement, tu n'as pas besoin de créer un template par vue et inversement. En fait, un template devrait simplement indiquer comment afficher les éléments et non pas quels éléments doivent être affiché. C'est le travail de la vue d'indiquer quels éléments afficher. De son côté, la vue va utiliser un ou plusieurs templates pour créer la partie de la page qui lui correspond.
 
Pour te donner un exemple pratique  bien qu'éloigné de ta solution:
sur mon site, j'ai un systéme assez proche du MVC avec l'affichage généré grace aux vues et à un systéme de template.
En pratique, je n'ai qu'un seul template pour l'ensemble des pages du site et ce quelque soient les vues contenu par le template. Ce template est découpé par le gestionaire de template afin d'obtenir des éléments utilisables. Chaque partie contient une ou plusieurs zones dans laquelle/lesquelles je peux afficher des éléments.
Les vues, quand à elles, vont indiquer quels éléments afficher dans chaque zone, dans quel ordre ils doivent être positionné et elles rajouteront éventuellement des informations sommaire de placement des dit éléments si c'est nécessaire. Une fois que toutes les vues vont avoir dit ce qu'elles veulent afficher et où, le gestionaire de template prend la main pour créer la page finale à partir des indications des vues et du template demandé.
 
En résumé, j'ai "n" pages, "x" vues et 1 seul template (en fait j'en ai plusieurs mais je n'en utilise qu'un seul à la fois vu que chaque template représente une page entiére et qu'ils sont interchangeable)
 
De ton côté si tu préfaires lier fortement les vues aux templates (et inversement), c'est ton droit. C'est certainement plus facile à faire au début par contre ca sera plus difficile à maintenir (potentiellement un grand nombre de fichiers à modifier si on veut garder une apparence armonieuse tout en changeant l'apparence du site) . A noter que de nombreux systémes de sites et forums (par exemple phpbb) ont préféré lier les vues et les templates.
 
AlphaZone > A la création c'est vrai que c'est plus simple, mais à la maintenance, c'est plus complexe. Voilà pourquoi il est parfois préférable de faire plus compliqué : pour obtenir quelque chose de plus facile à utiliser et à maintenir.
En dehors de ça, il est dangereux d'avoir des templates contenant du code exécutable sauf si les possibilités de ce code sont trés limité. S'il veut mettre des conditions dans ses templates alors il vaut mieux qu'il utilise des balises clé qui lui indiqueront les sections à afficher dans tels ou tel cas plustôt que des "if" en php. Ca sera déjà beaucoup plus sécurisé.
 
EDIT : corrections ortographiques


Message édité par omega2 le 20-06-2007 à 18:02:50
n°1577395
Le_nain
Posté le 20-06-2007 à 18:53:42  profilanswer
 

Merci omega2,
 
Je n'avais pas encore vu de système comme tu le proposes, donc effectivement, je liais très fortement vue et template ^^ Mais du coup tu as besoin d'une classe pour gérer le bordel, nan ?
En fait si j'ai bien compris, tes templates, c'est une page HTMl avec des zones : echo $haut, echo $gauche, echo $droite echo $milieu (suivant les différentes parties où l'on peut afficher des choses dans le design du site), puis ensuite tu as plusieurs "vues" (genre une pour le menu, une pour les news, une pour le footer, etc...) et tu dis qu'on va afficher le menu à gauche, les news au milieu, le footer en bas.
Donc une page utilise un template et beaucoup de vues. Dans le cadre de mon problème, ça ferait une vue pour le formulaire (utilisateur non connecté) et une vue différente pour si le bonhomme est connecté ? J'ai bon là ?

n°1577398
omega2
Posté le 20-06-2007 à 19:08:35  profilanswer
 

Oui, c'est ça à deux détails prés :

  • je ne mets jamais de php dans un template. J'utilise plustôt des #titre, #contenu ...
  • je n'ai pas d'indication genre "haut", "gauche", "milieu", etc vu que ca peut changer d'un template à l'autre et que c'est bizare de se retrouver avec un "gauche" tout à droite


En tout cas, t'as bien compris le principe et c'est vrai qu'avec ma méthode, je suis obligé d'utiliser une classe pour gérer le template.

n°1577403
Le_nain
Posté le 20-06-2007 à 19:20:03  profilanswer
 

Ok,
 
> je n'ai pas d'indication genre "haut", "gauche", "milieu", etc vu que ca peut changer d'un template à l'autre et que c'est bizare de se retrouver avec un "gauche" tout à droite
 
Qu'as tu alors pour gérer ce que tu appelles "zones" dans ton message d'avant ? C'est ça les #titre #contenu, etc... ?
 
Après il te suffit de faire :
 
$template->add("titre", "Mon titre" )
$template->add("contenu", $vue_des_news->render());
 
Un truc du style, ou bien je me trompe complètement ?
 
Merci encore à toi de ton éclaircissement !


Message édité par Le_nain le 21-06-2007 à 09:01:13
n°1577554
omega2
Posté le 21-06-2007 à 10:45:11  profilanswer
 

Oui, c'est bien les #titre #contenu ...
Pour le remplissage des zones du template, je n'utilise pas directement de "$template->add" mais c'est par ce que j'ai rajouté une couche d'abstraction entre les vues et le template et que j'ai organisé mon gestionnaire de template un peu différement. Mais dans le principe, c'est ça.
 
Evidement, si tu veux créer un systéme de ce genre, il te faudra y réfléchir sufisament en pensant à ce que t'auras besoin pour ton site : si on a besoin d'énormément de souplesse dans l'affichage, ca devient complexe à faire mais si on a pas besoin de beaucoup de souplesse, on peut y arriver sans trop de difficulté. En plus, en fonction des besoins de ton site, le gestionnaire de template proposera d'avantage de fonctions aux autres objets ou au contraire, il en limitera le nombre.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  23  24  25  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)