#1 Le 08/06/2007, à 12:50
- x@v
séparer les fonctions de l'affichage[php]
Bonjour,
voilà je construit mes affichage avec des fonctions, mais je suis forcé de mélanger php et html, donc comment je pourrai faire pour l'éviter, un exemple :
function faire_html_entete($title = '')
{
if(!$_SESSION['items']) $_SESSION['items'] = '0';
echo 'votre panier est bien vide';
if(!$_SESSION['total_price']) $_SESSION['total_price'] = '0.00';
?>
<html>
<head>
<title><?php echo $title; ?></title>
<?php
if(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"]))
{
$navigateur="Internet explorer";
echo '<link rel="stylesheet" type="text/css" media="screen" href="./css/style.css" />
';
}
else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"]))
{
$navigateur="Firefox";
echo '<link rel="stylesheet" type="text/css" media="screen" href="./css/style_ff.css" />
';
}
else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"]))
{
$navigateur="Opéra";
echo '<link rel="stylesheet" type="text/css" media="screen" href="./css/style_ff.css" />
';
}
else
{
echo '<link rel="stylesheet" type="text/css" media="screen" href="./css/style_ff.css" />
}
?>
<link rel="stylesheet" type="text/css" href="./css/imprimer.css" media="print" title="style 1" />
<script src="./js/scriptaculous/lib/prototype.js" type="text/javascript"> </script>
<script src="./js/scriptaculous/src/scriptaculous.js?load=effects,dragdrop" type="text/javascript"> </script>
</head>
<body>
</div>
<div id="logo"><a href = 'index.php'><img src='images/logo.jpg' alt='CADDIE ACCUEIL' /></a></div>
<div id="panier">
<div id="bouton_panier">
<?php if(isset($_SESSION['admin_user']))
display_button('logout.php', 'log-out', 'Log Out');
else
display_button('show_cart.php', 'view-cart', 'Visualiseez votre panier');
?>
</div>
<div id="panier_texte">
<?php if(isset($_SESSION['admin_user']))
echo ' ';
else
{
echo 'Nombre d\'article = '.$_SESSION['items'];
echo '<br>Prix total = '.number_format($_SESSION['total_price'],2).' ';
}
?>
</div>
</div>
<?php
if($title)
faire_html_titre($title);
}
Comme j'aimerai distribuer mon travail une fois finis, je pense qu'il faut que je trouve un moyen pour pouvoir configurer et adapter le design et le code.
thx
[-- qwerty user --]
Hors ligne
#2 Le 08/06/2007, à 13:52
- Rav
Re : séparer les fonctions de l'affichage[php]
Salut !
Pourquoi ne pas appeler simplement une fonction dans ta fonction qui s'occupe de l'affichage ?
Hors ligne
#3 Le 08/06/2007, à 14:01
- x@v
Re : séparer les fonctions de l'affichage[php]
tu veux dire faire ça :
faire_html_entete($title = '');
justement si je veux mettre mon code en open source avec succès, je crois que j'ai intèrêts à faire une séparation total, mais je ne connait que cette manière de faire. Qui est rapide. Je pense qu'il n'y a pas d'application e-commerce légère open source et rapide. C'est vrai que tout est dans un seul fichier pour l'affichage, mais c'est oublier les css.
edit ->
j'ajouterai que des fonctions nommé en français sa change la vie, et les commantaires avec.
Dernière modification par x@v (Le 08/06/2007, à 14:03)
[-- qwerty user --]
Hors ligne
#4 Le 08/06/2007, à 14:09
- alien7
Re : séparer les fonctions de l'affichage[php]
Bonjour...
Pourquoi ne pas utiliser un framework, le Framework de zend ?
Voilà un lien pour commencer :
http://g-rossolini.developpez.com/tutor … k/debuter/
Il n'y a pas que l'informatique dans la vie
https://www.whybook.org
Hors ligne
#5 Le 08/06/2007, à 14:12
- x@v
Re : séparer les fonctions de l'affichage[php]
Sa sert à quoi framework ?
Je dois me taper de la doc dit donc
[-- qwerty user --]
Hors ligne
#6 Le 08/06/2007, à 14:28
- Rav
Re : séparer les fonctions de l'affichage[php]
Alors, voyons, si tu n'aimes pas mélanger php & html, tu peux générer le html en utilisant tout le temps des fonctions php
Puis, si ça te gène, je pense que c'est parce que tu ne trouves pas ça trop lisible, donc découpe en sous fonctions même si tu ne les réutilises jamais afin que tu puisses comprendre plus rapidement ce que contiens ton code après quelques semaines de pose.
Voici une réorganisation que je te propose, on ne peut pas dire que c'est LA meilleure mais je pense qu'elle est pas mal.
Fichier Css.php : S'occupe de renvoyer le Css le plus approprié en fonction du navigateur
<?php
function genererCSS($adresse)
{
header('Content-Type: text/css; charset=iso-8859-1');
if(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"]))
{
$css = "style.css";
}
else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"]))
{
$css = "style_ff.css";
}
else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"]))
{
$css = "style_ff.css";
}
else
{
$css = "style_ff.css";
}
$pcss = fopen ("$adresse/$css", "rb");
$css = fread ($pcss, filesize ("$adresse/$css"));
fclose ($pcss);
return $css;
}
echo(genererCSS(".css/"));
?>
Fichier d'origine :
function faire_head($title)
{
echo '
<head>
<title><?php echo $title; ?></title>
<link rel="stylesheet" type="text/css" media="screen" href="Css.php" />
<link rel="stylesheet" type="text/css" href="./css/imprimer.css" media="print" title="style 1" />
<script src="./js/scriptaculous/lib/prototype.js" type="text/javascript"> </script>
<script src="./js/scriptaculous/src/scriptaculous.js?load=effects,dragdrop" type="text/javascript"> </script>
</head>';
}
function bouton_panier()
{
echo '<div id="bouton_panier">';
if(isset($_SESSION['admin_user']))
display_button('logout.php', 'log-out', 'Log Out');
else
display_button('show_cart.php', 'view-cart', 'Visualiseez votre panier');
echo '</div>';
}
function texte_panier()
{
echo '<div id="panier_texte">';
if(isset($_SESSION['admin_user']))
echo ' ';
else
{
echo 'Nombre d\'article = '.$_SESSION['items'];
echo '<br>Prix total = '.number_format($_SESSION['total_price'],2).' ';
}
echo '</div>';
}
function faire_html_entete($title = '')
{
if(!$_SESSION['items']) $_SESSION['items'] = '0';
echo 'votre panier est bien vide';
if(!$_SESSION['total_price']) $_SESSION['total_price'] = '0.00';
echo '<html>';
faire_head($title);
?>
<body>
<div>
<div id="logo"><a href = 'index.php'><img src='images/logo.jpg' alt='CADDIE ACCUEIL' /></a></div>
<div id="panier">
<?php
bouton_panier();
texte_panier();
?>
</div>
<?php
if($title)
faire_html_titre($title);
}
J'espère que tu comprendras ce que je raconte par l'exemple parce que j'arrive pas à l'explique formellement
Hors ligne
#7 Le 08/06/2007, à 14:47
- x@v
Re : séparer les fonctions de l'affichage[php]
Interressant oui j'arrive à comprend, c'est interressant la génération de la css. Mais le résultat est le même que moi.
ma page d'accueil :
<?php
include ('fonction.php');
session_start();
faire_html_entete('Bienvenue sur la boutique virtuel');
echo '<p>Choisissez une catégorie s\'il vous plais, merci:</p>';
// liste_categorie(); se trouve dans affichage_html_fonction.php
liste_categorie();
// si vous êtes logger en tant qu'administrateur, les bouton
if(isset($_SESSION['admin_user']))
{
// affiche_boutton(); se trouve dans affichage_html_fonction.php
affiche_boutton('admin.php', 'admin-menu', 'Menu d\'administration');
}
else
{
// affiche_login(); se trouve dans fichage_html_fonction.php
affiche_login();
}
faire_html_pied_page();
?>
edit ->
oui je dois admettre que les sous fonctions sont un peu plus clair
Dernière modification par x@v (Le 08/06/2007, à 14:52)
[-- qwerty user --]
Hors ligne
#8 Le 08/06/2007, à 14:55
- Rav
Re : séparer les fonctions de l'affichage[php]
Je crois qu'on peut pas faire mieux
Il est possible de séparer php et html mais je pense que ça deviendrait illisible donc je n'en parle pas.
Hors ligne
#9 Le 08/06/2007, à 18:01
- x@v
Re : séparer les fonctions de l'affichage[php]
C'est clair que c'est bon et lisible
Qu'est ce que tu penses d'oscommerce, je l'ai installé mais le paramétrage est complexe, fait sur du html année 90. Et surtout il rame, chaque clic c'est 2s
C'est pour ça que je préfère faire un script. Et en même temps penses tu qu'un sites e-commerce distribué sur le même principe n'est pas en trop ?
[-- qwerty user --]
Hors ligne
#10 Le 08/06/2007, à 18:21
- Rav
Re : séparer les fonctions de l'affichage[php]
J'y connais rien en e-commerce. Cependant, je pense qu'il est important de s'adapter aux normes du W3C pour garder une compatibilité future.
Hors ligne
#11 Le 09/06/2007, à 10:34
- guil
Re : séparer les fonctions de l'affichage[php]
Salut,
à ma connaissance le mieux pour séparer le html du php c'est d'utiliser un moteur de template, tu devrais peut être jeter un oeuil à Smarty : http://smarty.php.net
Hors ligne
#12 Le 09/06/2007, à 14:32
- Rav
Re : séparer les fonctions de l'affichage[php]
Le truc des templates, c'est que ça sépare le design et le contenu mais pas le html et le php.
Hors ligne
#13 Le 09/06/2007, à 14:42
- x@v
Re : séparer les fonctions de l'affichage[php]
et puis ça alourdis l'application, j'ai fait des bench, et sa fait mal. En surcharge le serveur est à genoux. Effectivement pour les néophites c'est peut être agréable à utilisé quoi que même là j'ai un doute.
L'interêt c'est de ne pas avoir de contraine en terme de performance, tout est là.
Dernière modification par x@v (Le 09/06/2007, à 14:48)
[-- qwerty user --]
Hors ligne
#14 Le 28/12/2007, à 03:53
- Rhada
Re : séparer les fonctions de l'affichage[php]
bonsoir,
en regardant de plus près les fichiers templates de php bb je suis tombé sur ce genre de choses....
<!-- BEGIN color --><span style="color: {COLOR}">{TEXT}</span><!-- END color -->
<!-- BEGIN size --><span style="font-size: {SIZE}%; line-height: 116%;">{TEXT}</span><!-- END size -->
<!-- BEGIN img --><img src="{URL}" alt="{L_IMAGE}" /><!-- END img -->
<!-- BEGIN url --><a href="{URL}" class="postlink">{DESCRIPTION}</a><!-- END url -->
<!-- BEGIN email --><a href="mailto:{EMAIL}">{DESCRIPTION}</a><!-- END email -->
Donc du html avec ce genre de choses {URL} je n'avais jamais vu et me demande si ce ne serais pas pour indiquer a une fonction php ou doit etre quoi... enfin juste une supposition ms si cela s'avere etre le cas comment fait on pour les employés dans nos propres codes, ce serait vraiment l'idéal ???
Merci ++
#15 Le 28/12/2007, à 04:06
- compte supprimé
Re : séparer les fonctions de l'affichage[php]
Salut,
Regarde peut-être aussi là :
http://pear.php.net/
à‡a fait un moment que je n'ai pas suivi, mais il y a avait des classes genre Common_HTML, et d'autres, o๠finalement le html n'apparaà®t que dans une fonction dédiée à l'affichage, si mes souvenirs sont bons...
A+
#16 Le 28/12/2007, à 08:01
- stopher
Re : séparer les fonctions de l'affichage[php]
@ x@v:
et puis ça alourdis l'application, j'ai fait des bench, et sa fait mal.
C'est normal , mais il existe plusieurs moteur de template avec des technologies différentes +/- complexe qui permet de réduire la charge ...
En surcharge le serveur est à genoux.
Un template associé avec un bon système de cache et te voilà avec une appli performante et rapide ...
Effectivement pour les néophites c'est peut être agréable à utilisé quoi que même là j'ai un doute
Là par contre , je pense que c'est le contraire ... un framework avec template permet un travail collaboratif , les graphistes ne touchent qu'aux graphismes sans avoir peur de modifier une ligne de code et inversement .. le mieux étant d'utiliser l'architecture MVC (Modèle Vue Contrà´leur)
Qui permet d'avoir au finale un code facilement maintenable et structuré .
L'interêt c'est de ne pas avoir de contraine en terme de performance, tout est là .
Il faut savoir faire des petits sacrifices pour gagner en souplesse ... quoi que , comme je l'ai dit plus haut , avec une gestion de cache l'appli sera largement aussi rapide et performante qu'une autre sans template ...
Pour moi , donc , si tu veux vraiment séparer le "code/contenu" de "l'affichage pure html" la bonne solution est d'utiliser un moteur de template ... et pour se faire autant utiliser un framework complet tel que Zend(encore un peut jeune et complexe pour une premiere) ou Smarty (qui je pense est une reference) .
Hors ligne
#17 Le 28/12/2007, à 09:27
- cob
Re : séparer les fonctions de l'affichage[php]
Salut,
Pour partager ton code avec d'autres, pense aux COMMENTAIRES.
Si quelqu'un reprend ton code et ne le comprend pas qu'avec les commentaires il pourrait être tenté d'aller voir ailleurs
Pour bosser en souplesse, un des objectifs et de séparer le moteur de ton site de son affichage.
Utiles pour deux choses :
- Maintenir ton html simplement sans chercher trois heures entre les bouts de PHP. Les nons developpeurs apprecieront.
- Pouvoir réutiliser tes bouts de codes plus tard sans avoir besoin de trop les réécrire à chaque projet.
par exemple :
<?php
// Template HTML des messages à afficher
// Les mots comme {VARIABLE} sont des variables customs utiles pour faciliter l'utilisation des expressions régulières.
// NOTE: Pour cet exemple l'HTML est dans le php, plus tard il pourrait être dans un fichier template.
// TODO: Passer cette variable dans un fichier template. Peut-être avec une syntaxe du style <!-- BEGIN color --><span style="color: {COLOR}">{TEXT}</span><!-- END color -->
$message_template = '<span style="color: {COLOR}">{TEXT}</span>';
// Cette fonction retourne un message formaté en html
function mon_message( $msg_str, $color_str){
global $message_template; // Récupération du template HTML
$retour_str = $message_template; // Copie du template a remplir
$retour_str = preg_replace("#{COLOR}#", $color_str, $retour_str); // remplacement de la couleur dans ce template
$retour_str = preg_replace("#{TEXT}#", $msg_str, $retour_str); // remplacement du texte
return $retour_str; // Retour du résultat et non pas affichage.
}
// Les fonctions n'affichent pas leur retour pour pouvoir être re-manipuler ultérieurement.
$variable_a_utiliser_un_peu_plus_tard = mon_message('Comment ça va ti bien ?', 'green');
print mon_message('Voici mon message : "' . $variable_a_utiliser_un_peu_plus_tard . '". à‡a fonctionne ?', 'orange');
?>
Une fois que tu aura pris ces bonnes habitudes, ça te sera plus facile de jouer avec des logiciels de templates complexes comme smarty.
Edit.: Gasp, j'avais pas vu que c'était un sujet déterré du mois de juin ^^
Dernière modification par cob (Le 28/12/2007, à 09:44)
Hors ligne