Méthode séparation PHP / HTML

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Méthode séparation PHP / HTML

Re: Méthode séparation PHP / HTML

par supercanard » 09 oct. 2009, 17:21

Merci de ta réponse je comprends un peu mieux l'idée =)

Bon sauf que moi évidement comme je ne veut pas utiliser de langage de template et que je ne veut pas nomplus mettre trop de code PHP dans mon HTML, c'est pour ça que j'avais eu l'idée de créer des fonction du type disp_quelquechose().
Comme ça ça réduisait le code PHP dans mes fichiers HTML, le mélange PHP/HTML est toujours là évidement, mais dans les fonctions disp_chose().

Je me rends compte que mon exemple dans le fonctionnement est bien différent du tient, je vais voir comment je le sens entre l'une et l'autre méthode.

En attendant j'ai réécris mon exemple plus propre :
<?php
##### fonctions maitresses (traitements)
function makepage(){
	## redéfini les paramètres par défaut appel le corp
	global $data_page;
	$page = str_replace("-", "_", $_GET['page']);
	switch($page){
		case 'articles':
			$data_page['meta_title'] = 'Titre spécifique';
			break;
	}
	return call_user_func('page_'.$page);
}
function page_articles(){
	## affiche le listing des articles
	// donnés page
	$art_liste[1]['titre'] = 'titre 1';
	$art_liste[1]['contenu'] = 'contenu 1';
	$art_liste[2]['titre'] = 'titre 2';
	$art_liste[2]['contenu'] = 'contenu 2';
	// return
	return include('articles.php');
}
##### fonctions display (affichage)
// fonctions communes
function disp_meta_title(){
	global $data_page;
	echo $data_page['meta_title'];
}
// fonctions spécifiques
function disp_art_liste($art_liste){
	$html = '';
	foreach($art_liste as $k=>$v){
		$html .= '<div class="art_liste_elem"><h1>'.$v['titre'].'</h1>'.$v['titre'].'</div>';
	}
	echo $html;
}
##### config
// Paramètres par défaut des pages ( global )
$data_page = array();
$data_page['meta_title'] = 'Titre par défaut';
##### common
makepage();
?>
<?php include('header.php'); ?>
<div id="art_liste">
<?php disp_art_liste($art_liste); ?>
</div>

Re: Méthode séparation PHP / HTML

par FuZZyLine » 09 oct. 2009, 16:39

Re,
Je souhaite juste savoir si justement mon approche personnel n'est pas trop pitoyable ;)
Tu n'auras jamais de moi une réponse aussi sèche, froide et pitoyable lol
Ton approche est celle que tu en fais, démonter qu'elqu'un n'est pas vraiment mon truc.
Ce que je peux tenter c'est expliquer un peu ce système, ce qu'il convient de faire, non de te critiquer.

- M = Méthode (les fonctions générales en gros)
- V = View (Ce que tu as à l'écran et rien d'autre, donc pas de code
- C = Controlleur (dispatch en fonction de test)

Le pattern MVC est... discutable et discuté. Chacun l'envisage selon sa propre utilisation.
En gros, discuter de l'approche serait un brin long lol Disons qu'il faut que tu sépares un max
ce qui est html du php. Un 'tit exemple (idiot)

methode:
<?php
   // Les fonctions

  $template = Array();

   function makePage()
   {
      switch($page)
      {
         case "accueil":
            $template["title"] = "Page d'accueil";
         break;
         .
         .
         .
      }
      return true;
   }
   display();
?>
view: Ou comment disposer les éléments suivant un layout
<!-- Ne doit contenir de code (...normalement) -->
<html>
   <head>
      <!-- Bien que le php soit "interdit" les templates le sont, va savoir... -->
      {tpl:title}
   </head>
   <body>
      {tpl:body}
   </body>
</html>
Le controller:
<?php
   // Il dispatch en fonction d l'url _get etc... Ne fait que ca
  
   $root = $url...
   $page = makePage($root); 
   .
   .
   .
?>
Comme tu le vois séparer les éléments c'est... outch... Je dirais qu'à un moment ou à un autre
il y a colusion mais le principal est d'essayer et ce le plus possible. Dans mon exemple (idiot)
la séparation se fait mais en biaisant...
Car si on me parle de MVC, je vois à peu près ce que c'est, mais je sais bien que derrière ce mot de
3 lettre se cache quelquechose de complexe que je maitrise pas du tout. Je cherche simplement à
faire le plus simplement possible une séparation PHP/HTML en me passant d'un moteur de template.
Si tu fais du procédural tu dois, à l'instar de Mr Jourdain, faire du MVC. M'est d'avis que tu fractionnes
déja tes fichiers, que tu tentes (presque) de factoriser tes fonctions (j'imagine que c'est pareil pour toi)
... Je dis ca vu que c'est ainsi que je faisais avant de toucher aux objets.

Le MVC n'est pas complex il est "vicieux" lol
Stopher, c'est mon call_user_func('page_'.$page); qui te dérange ?
C'est vrai que ma méthode la aussi est peut être byzar... au lieu d'avoir une page physique par métier ou module si on peut appeler ça comme ça, j'aime bien tout traiter en tant que fonctions...
Libre à toi d'utiliser le procédurale mais les objets sont vraiment inqiqués pour faire cela.

@+ ;)

PS: Mes exemples sont foireux, c'était juste essayer de te mettre face au MVC, rien de plus ;)

Re: Méthode séparation PHP / HTML

par supercanard » 09 oct. 2009, 14:19

Je souhaite juste savoir si justement mon approche personnel n'est pas trop pitoyable ;)
Car si on me parle de MVC, je vois à peu près ce que c'est, mais je sais bien que derrière ce mot de 3 lettre se cache quelquechose de complexe que je maitrise pas du tout.
Je cherche simplement à faire le plus simplement possible une séparation PHP/HTML en me passant d'un moteur de template.

Stopher, c'est mon call_user_func('page_'.$page); qui te dérange ?
C'est vrai que ma méthode la aussi est peut être byzar... au lieu d'avoir une page physique par métier ou module si on peut appeler ça comme ça, j'aime bien tout traiter en tant que fonctions...

Re: Méthode séparation PHP / HTML

par FuZZyLine » 09 oct. 2009, 14:08

Salut,
Bonjour,
Histoire de séparer un peu mon code PHP du HTML j'utilise actuellement un moteur de template.
Mais je m'aperçoit que finalement c'est pas vraiment indispensable et j'aimerais revenir à quelque chose de plus simple.
Voici un petit exemple simple, (d'après moi suffisant pour séparer un minimum les couches).
On retrouve en gros :
- Les fonctions de traitement
- Les fonction d'affichage
- Les templates
J'aimerais avoir votre avis sur ce petit essai :
<?php
// fonctions principales (traitements)
function page_home(){
	$data[1]['nom'] = 'lapin';
	$data[1]['prenom'] = 'jojo';
	$data[2]['nom'] = 'lapin';
	$data[2]['prenom'] = 'jojo';
	return include('home.php');
}
// fonctions display (affichage)
function disp_liste_nom($data){
	$html = '';
	foreach($data as $k=>$v){
		$html .= '<li>'.$v['prenom'].' '.$v['nom'].'</li>';
	}
	echo $html;
}
// main
$page = str_replace("-", "_", $_GET['page']); // $page = index.php?page=home
call_user_func('page_'.$page);
?>
Code de la template :
<ul>
<?php disp_liste_nom($data); ?>
</ul>
Si on oublie l'approche qui t'es personnel c'est... Un système de templates basique.
Que souhaites-tu savoir exactement? ...j'avoue que j'ai pas trop compris ta demande.

@+ bon code ;)

Re: Méthode séparation PHP / HTML

par stopher » 09 oct. 2009, 14:00

Salut ,

je ne pense pas qu'appeler des fonctions / méthodes dans ta vue soit une bonne idée .

non pas pour des raison de performances ou autre .. mais simplement que tu rends ta vue dépendante d'un code php annexe .

Pour moi une vue sert juste à mettre en forme des données déjà traitées .

Ch.

Méthode séparation PHP / HTML

par supercanard » 09 oct. 2009, 13:46

Bonjour,

Histoire de séparer un peu mon code PHP du HTML j'utilise actuellement un moteur de template.
Mais je m'aperçoit que finalement c'est pas vraiment indispensable et j'aimerais revenir à quelque chose de plus simple.

Voici un petit exemple simple, (d'après moi suffisant pour séparer un minimum les couches).
On retrouve en gros :
- Les fonctions de traitement
- Les fonction d'affichage
- Les templates

J'aimerais avoir votre avis sur ce petit essai :
<?php
// fonctions principales (traitements)
function page_home(){
	$data[1]['nom'] = 'lapin';
	$data[1]['prenom'] = 'jojo';
	$data[2]['nom'] = 'lapin';
	$data[2]['prenom'] = 'jojo';
	return include('home.php');
}
// fonctions display (affichage)
function disp_liste_nom($data){
	$html = '';
	foreach($data as $k=>$v){
		$html .= '<li>'.$v['prenom'].' '.$v['nom'].'</li>';
	}
	echo $html;
}
// main
$page = str_replace("-", "_", $_GET['page']); // $page = index.php?page=home
call_user_func('page_'.$page);
?>
Code de la template :
<ul>
<?php disp_liste_nom($data); ?>
</ul>