Besoin de conseils avant construction d'un site [OK]

TuXyl

Nouveau membre
:hello: Bonjour a vous !

Je me suis récement lancé dans la programmation php, lassé de la staticité du HTML.
Je refais donc mon site HTML (d'environ 100 pages htm) en un site dynamique. En ce moment, j'utilise un système de template qui me satisfait beaucoup sur de nombreux points (d'autres personnes travaillent sur le design du site et ne connaissent que le HTML).
J'aurais besoin de vos conseils avisés :merci:

Doit-on obligatoirement avoir pour chaque fichier tpl son fichier php associé ? Car je suis presque contraint de créer un fichier tpl pour chaque page, l'organisation de chacune d'elle étant à chaque fois différente, et leur contenu étant assez chargés de textes et d'images (à moins qu'il y ait une solution :??: ).
Pour l'instant mon système (médiocre, fonctionne :sweat:, et ne demande qu'à être amélioré) :

Seul index.php utilise le moteur de templates. Navigation : on lui passe un paramètre '?c=n° de page'

[cpp]
<?php
// Gestion des thèmes
if (isset($_POST['them'])) { // si l'utilisateur a soumis le formulaire...
$css = $_POST['them'];
$res = setcookie("style",$css,time()+(365*24*3600));
}
elseif(isset($_COOKIE['style'])) { // si l'utilisateur n'a rien choisi mais qu'il possède un cookie de style...
$css = $_COOKIE['style'];
}
else $css = "defaut"; // si aucun cookie, et formulaire non soumis

define('IN_LMF',true);

include('includes/template.inc'); // phpLib
include('includes/config.inc.php');
include('net.php'); // outils net
include('fonctions.php'); // outils divers (statistiques)

/*///////////////////////////////////////////*/
/*///////////////* Création de l'en-tête */
/*///////////////////////////////////////////*/

include('header.php');

/*///////////////////////////////////////////*/
/*//////////////* Création du menu */
/*///////////////////////////////////////////*/

if(isset($_GET['c'])) // Quelle page va-t-on afficher ?
{
switch($_GET['c']){
case '1': $page = 'Biographie.tpl'; break;
case '2': $page = 'Discographie.tpl'; break;
case '3': $page = 'Chansons.tpl'; break;
case '4': $page = 'Presse.tpl'; break;
case '5': $page = 'Fichiers.tpl'; break;
case '6': $page = 'Liens.tpl'; break;
default: echo "Erreur: La page demandée est inexistante";
}
}
else
{
$page = 'News.tpl';
}

if (isset($_GET['c'])) { $param = "?c=".$_GET['c']; } // rediriger sur la même page la sortie du formulaire de choix de style
else { $param = ""; }

$template = new Template('./pages/'.);
$template->set_file("menu","menu_" . $page);

$template->parse("afficher_menu","menu");
$template->p('afficher_menu');

////
// Fin du menu Identique à toute les pages
////
$template = new Template('./templates/');
$template->set_file("menufin","page_menu.tpl");

$template->set_var(array(
'PAGE' => $param,
'ESPACEIE' => $espaceie,
'NB_ABONNES' => $nombre_abonnes,
'TOTAL_INSCRITS' => $total_users,
'DERNIER_INSCRIT' => $newest_user,
));

$template->parse("afficher_menu","menufin");
$template->p('afficher_menu');

/*///////////////////////////////////////////*/
/*//////////* Création du corps de la page */
/*///////////////////////////////////////////*/

$template2 = new Template('./pages/');
$template2->set_file("body",$page);
$template2->parse("afficher_body", "body");
$template2->p("afficher_body");

/*///////////////////////////////////////////*/
/*//////////////* Création du pied de page */
/*///////////////////////////////////////////*/

include("footer.php");
?>
[/cpp]

Pour l'instant, je n'ai que 6 liens pour 6 pages ! En plus j'aimerais organiser mes pages à afficher dans différents dossiers donc il me faut trouver une astuce pour gérer et sauvegarder les chemins dans mes set_file..... je suis bloqué :

-> faut-il faire un switch de 100 valeurs ? :pt1cable:
-> créer un tableau multidimensionnel pour organiser mes dossiers / sous-dossiers / ... (tableau énorme :sarcastic:)
-> utiliser une BD ? (ça ralentirait et compliquerait un peu mon site non?)
-> ...

Merci infiniement !
 

Johan_et_Pirlouit

Grand Maître
:??:

A mon avis, tu t'emm... bien pour rien.. Tu fais une CSS globale qui couvre le gros de la maquette et tu te contentes d'inclure tes pages dans cette maquette (avec des CSS complémentaires qui vont couvrir les besoins spécifiques de tes rubriques)..

Le XHTML / CSS est là pour ton besoin : la mise en page par les CSS et le contenu dans les XHTML.. En plus, c'est ultra-simple de faire "entrer" par PHP les morceaux à inclure où il faut dans la page.. Et là, pas besoin de tableau, de bdd ou autre tpl..

Pourquoi faire un template pour chaque page ? Ce n'est pas leur rôle.. Leur rôle c'est justement de proposer quelque chose de récurrent, donc partagés par un grand nombre de pages..

Dans ta mise en page, tout ce qui est récurrent peut faire l'objet d'un ou plusieurs module(s) PHP spécifique(s), c'est aussi à ça que ça sert.. Tu peux donc remplacer tes tpl par des modules PHP que tu appelles au besoin, d'abord depuis ton fichier racine 'index.php' : header HTML avec DOCTYPE (XHTML de préférence), en-tête de page, menu(s), contenu du corps de la page (tes rubriques), pied de page ; puis par les fichiers inclus, notamment dans le corps de la page : boutons de navigation, modules d'affichages divers et j'en passe..

C'est du moins comme ça que je fais et que j'allège mon site.. Sur l'ensemble des fichiers de mon site (images incluses), j'ai gagné près d'un tiers du "poids", rien qu'en remplaçant tous mes fichiers htm par une prog PHP, qui n'est certainement pas encore aussi bien optimisée qu'elle le pourrait ;).. Il va aussi de soi que le passage de mes GIF en PNG a aussi contribué à gagner quelques Ko..

:merci:
 

TuXyl

Nouveau membre
Merci beaucoup pour ta réponse Johan_et_Pirlouit !!!!

puis par les fichiers inclus, notamment dans le corps de la page : boutons de navigation, modules d'affichages divers et j'en passe..
-> en php ?


En fait, ce que tu me proposes est la version précédente de mon site : HTML+CSS (choix par switch)+incursions php via include/require ou <?' '>...
J'ai voulu opter pour les templates, car l'organisation serait plus claire et cela aurait permis aux autres webmasters du site de bien s'y retrouver et d'éviter qu'ils me perturbent mon code php !

Mais c'est vrai que le réel intérêt des templates c'est d'être un modèle de page ! Or la ..... :sarcastic: Tu as sans doute raison, je m'emm peut-être pour rien. Je me rends compte que si je séparais bien mon code php uniquement avec des includes, ça ferait le même effet :ange:

Où serait l'intérêt du XHTML dans mon cas ? tu veux parler de modules DTD ? (je cite quelque chose que je ne connais pas mais c'est pour savoir s'il m'est conseillé de l'apprendre ;) ).
 

Johan_et_Pirlouit

Grand Maître

Oui.. Un exemple d'utilisation : si tu furette sur mon site, tu trouveras des boutons de navigations au sein des différentes rubriques, à la manière des pages d'un même article.. Ces liens de navigation sont gérés par deux modules PHP appelés par les pages incluses : l'un pour les boutons en haut de page, l'autre pour ceux en bas.. Le script qui gère les boutons du haut gère aussi les titres de rubriques et de sous-rubriques, alors que les banières de rubriques le sont simplement par les CSS..

En fait, pour chaque rubrique, j'ai un fichier PHP "racine de rubrique" qui sert d'aiguillage et qui, en fonction de ce qu'il reçoit comme variables, charge tel contenu ou tel autre.. Au passage, il fait appel aux modules des boutons de navigation (par exemple).. Il va de soi que cet "aiguillage" contient les quelques variables de rubriques nécessaires aux modules qui seront appelés, définies au besoin pour chacune des sous-rubriques présentées.. Pour les pages où je présente des photos, des dessins, ou des compositions, toutes ces présentations ne font appel qu'à un seul et unique script qui va gérer plusieurs modes de présentations.. Ce script et ces modes sont définis par chaque fichier "racine" de rubrique, comme les boutons de navigation..

Ce que je dis là n'est qu'un exemple de sctructure parmi d'autres ;).. Mais à la manière de l'XHTML / CSS où on différencie le contenu du contenant, le PHP permet de gérer quel contenu on appelle et quand..



Avoir un code lisible car bien distinct par type de code.. Le squelette XHTML et le contenu de la page dans les fichiers .htm ou .php et les définitions de tous les objets utilisés dans les fichiers .css.. On peut aussi faire du CSS en PHP, mais je n'ai pas encore expérimenté..

Ca permet surtout de n'avoir aucune balise de définition d'objets dans le code XHTML, puisqu'elles ont migré dans les CSS.. Ca permet aussi et surtout de définir non seulement des objets ('id') mais aussi des familles d'objets ('class'), donc des attributs partagés par plusieurs objets dans une même page ou sur l'ensemble du site (boutons, titres, paragraphes, etc)..

XHTML : eXtensible HyperText Markup Language.. Il est l'évolution de l'HTML en reprenant les principes structuraux et modulaires de l'XML (eXtensible Markup Language)..

Mais l'XHTML n'est actuellement pas toujours bien supporté dans son type de contenu natif (Content-Type) 'application/xhtml+xml' (contenu exécuté en tant qu'application XHTML/XML), c'est pourquoi il fonctionne aussi en mode "compatibilité HTML", avec le type de contenu 'text/html' (donc exécuté en tant que simple HTML).. Voici deux exemples de DOCTYPE XHTML :

Mode natif avec prologue XML (recommandé surtout pour l'XHTML 1.1) :
Code:
<?xml version="1.0" encoding="iso-8859-15" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
	<title>titre du site</title>

	<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-15" />
</head>
Mode de "compatibilité HTML" (sans prologue XML, fonctionne très bien en XHTML 1.0 Strict) :
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>
	<title>titre du site</title>

	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
Les navigateurs qui supportent actuellement le mode natif XHTML/XML : Firefox (en fait tous ceux qui utilisent le moteur Gecko) et Opera.. Peut-être IE 7, mais je n'ai pas testé..

/!\ : IE 5.x et 6 ne supportent pas le prologue XML ! Ce prologue fait planter le rendu avec IE 6 : il passe en mode de rendu "Microsoft" (celui utilisé dans tous les cas par IE 5.x) et ne respecte donc plus le modèle des "boîtes W3C" (gestion des dimensions, des marges, des bordures, etc..). Voir l'article d'OpenWeb sur le sujet : Gérer les modèles de boîtes CSS standard et Microsoft >> .. Plus largement, IE 6 ne supporte aucun caractère avant le DOCTYPE..

Un avantage de la prog en XHTML : le déboggage du code proposé par Firefox et aussi par Opera.. Idéal pour relever les pb de balises et autres attributs XHTML..

Et pour que le site soit correctement exécuté sur tous les navigateurs, j'ai reproduit et expliqué (avec les "poirquoi" et les "comment") un script de sélection automatique de DOCTYPE (que j'utilise désormais sur tous les sites que je fais en PHP) dans ce topic :
PHP:
 Rétro-compatibilité HTML 4 automatique pour un site en XHTML 1.1[/b] >> [url]http://www.presence-pc.com/forum/ppc/Programmation/PHP-Retro-compatibilite-HTML-automatique-pour-site-XHTML-sujet-2764-1.htm[/url].. Ce script ne concerne évidemment pas la partie mise en page, donc les navigateurs qui ne supportent pas le CSS (Netscape 4, par exemple) ou ont certains soucis avec (Opera avant la 7.5, IE 4.xx et avant) ne sauront de toutes façons pas afficher correctement le site.. Mais ces vieux navigateurs sont obsolètes et ne sont plus utilisés..

:jap:
 

TuXyl

Nouveau membre
Merci beaucoup pour ce cours d'initiation !! J'en avais bien besoin ;)
J'ai déjà démarré ma réorientation XHTML ! Et ça se fait sans problème, les subtilités sont vite apprises :)

P.S : Au passage, j'aime bien ton site, son design est original, son contenu aussi.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 059
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut