IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Architecture d'un site ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut [PHP-JS] Architecture d'un site ?
    Bonjour,

    Je travaille actuelement sur un gros projet et le nombre de dossier et fichier augmente régulièrement. On en arrive à un point où l'on se rend compte que la strcuture choisi n'est pas forcément la meilleur. En effet, lorsqu'on crée un fichier, il n'est aps toujours évident de déterminer où il doit être stocker tant la structure n'est pas suffisament bien ordonée.

    Je me demandais si vous pouviez partager avec moi des lien ou vos propres méthode de structuration des fichiers dans des projets de plus ou moins grande taille. Séparation des fichiers concernant le graphisme, les pages de bases, les fichiers utilitaires etc...

    J'en profites aussi pour vous demander votre définition d'un dossier include et d'un dossier librairie et d'un dossier package. Quels types de fichiers chacun doit il contenir, leur role et position les uns par rapport aux autres.

    En vous remerciant vraiment.

  2. #2
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    Bien sûr, c'est exact qu'il est très long de se faire ses petites routines ... Personnelement, je m'en suis fait à force de travailler sur PunBB, qui est extrement rapide.

    Donc comme architecture, voila mes besoin :
    1. Output-Buffering, pour les performances et l'url-rewriting
    2. Le fichier de modèle (dit 'template')
    3. Il ne faut pas que je m'embête avec la base de données, que ce soit facilement volatile d'une base à l'autre ou que ce soit pour la sécurité
    4. Le design et le moteur doivent bien être séparés
    5. Le design tout en css, de toutes façons


    Personnelement, mes routines en sont à :
    header.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    // Verifying that nobody attempts to directly run this script
    // Verifions que personne n'essayes d'executer ce script directement
    if (!defined('ROOT'))
    	exit;
     
    // Loading functions
    // Chargeons les fonctions
    require ROOT.'include/functions.php';
     
    // Inversons l'effet de register globals
    // Invert register globals effect
    if (@ini_get('register_globals'))
    	unregister_globals();
    // Including our configuration
    // On inclus notre configuration
    @include ROOT.'config.php';
     
    // On s'assure que PHP rapporte toutes les erreurs sauf E_NOTICE, parce que beaucoup de scripts ne le supportent pas
    // Make sure PHP reports all errors except E_NOTICE. PunBB supports E_ALL, but a lot of scripts it may interact with, do not.
    error_reporting(E_ALL ^ E_NOTICE);
     
    // Desactivation du magic quotes
    // Turn off magic_quotes_runtime
    set_magic_quotes_runtime(0);
     
    // Retirons les slashes de GET/POST/COOKIE si magic_quotes_gpc est activée
    // Strip slashes from GET/POST/COOKIE (if magic_quotes_gpc is enabled)
    if (get_magic_quotes_gpc())
    {
    	function stripslashes_array($array)
    	{
    		return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
    	}
    	$_GET = stripslashes_array($_GET);
    	$_POST = stripslashes_array($_POST);
    	$_COOKIE = stripslashes_array($_COOKIE);
    }
    // Générateur de nombres aléatoires
    // Seed the random number generator
    mt_srand((double)microtime()*1000000);
     
    // Charge la classe de la base de données et connection
    // Load DB abstraction layer and connect
    require ROOT.'include/dblayer/common_db.php';
    $db->start_transaction();
     
    // Cookies de PunBB
    // PunBB Cookies
    $pun_user = array();
     
    // Informons que nous ne voulons pas de mise en cache
    // Send no-cache headers
    header('Expires: Thu, 21 Jul 1977 07:30:00 GMT');	// When yours truly first set eyes on this world! :)
    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');		// For HTTP/1.0 compability
     
    // Chargeons le template (modele)
    // Loads the template
    $tpl_main = file_get_contents(ROOT.'style/templates/main.tpl');
     
    // Nullifions $page_title par principe
    // Nullifying $page_title
    $page_title= NULL;
     
    // Utile pour l'url-rewriting
    // Usefull for url-rewriting
    $t_replace = array(' ');
    $t_with = array('-');
     
    // Démarrons la mise en tampon de la page_title
    // Start output bufferisation
    ob_start();
    footer.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    if (!defined('ROOT') || !defined('HEADER'))
    	exit;
     
    // START SUBST - <menu>
    ob_start();
    ?>
    salut je suis le code du menu, généré mais utilisant <? echo $mon_lien ?> puisqu'en utilisant l'output buffering par php, cela ne réduit pas les performances et permet une bonne séparation entre design et le 'moteur'
    <?php
    $tpl_temp = trim(ob_get_contents());
    $tpl_main = str_replace('<menu>', $tpl_temp, $tpl_main);
    ob_end_clean();
    // END SUBST - <menu>
     
    // START SUBST - <header>
    ob_start();
    ?>
    pour mes en tetes supplémentaire
    <?php
    $tpl_temp = trim(ob_get_contents());
    $tpl_main = str_replace('<header>', $tpl_temp, $tpl_main);
    ob_end_clean();
    // END SUBST - <footer>
     
    // START SUBST - <title>
    $tpl_temp = (!is_null($page_title))?$page_title:"titre par défault";
    $tpl_main = str_replace('<title>', $tpl_temp, $tpl_main);
    // END SUBST - <title>
     
    // START SUBST - <base>
    $tpl_temp = ""; 
    // je génère ma base, pour plus de confort avec
    //l'url rewriting et les dossiers virtuels
    $tpl_main = str_replace('<base>', $tpl_temp, $tpl_main);
    // END SUBST - <base>
     
    // End the transaction
    $db->end_transaction();
     
    // Display executed queries (if enabled)
    if (defined('PUN_SHOW_QUERIES'))
    	display_saved_queries();
    // Display executed queries (if enabled)
    if (defined('PUN_SHOW_QUERIES'))
    	display_saved_queries();
     
    // Close the db connection (and free up any result data)
    $db->close();
    // Spit out the page
    exit($tpl_main);
    Pour config.php, c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $db_type = 'mysql';
    $db_host = 'localhost';
    $db_name = '...';
    $db_username = '..';
    $db_password = '...';
    $db_prefix = 'prefix_';
    $p_connect = false;
     
    define('PUN', 1);
    Et pour les bases de données, j'utilise ce code puisqu'il permet une adaptation vraimment facile si on veut changer de système de bases de données...

    Enfin, le fameux style/templates/main.tpl, simple aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!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="en" dir="ltr">
    <head>
    	<base href="<base>" />
    	<title><pun_title></title>
    	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    	<link rel="stylesheet" type="text/css" href="style.css" />
    	<header>
    </head>
    <body>
     
    <div id="outer">	
    	<div id="right">
    		<main>
    	</div>
    	<div id="left">
    		<menu>
    	</div>
    </div>
    </body>
    </html>
    Si j'ai besoin d'authentification, de cookies ou autres, je me sers des morceaux de code de PunBB qui sont très bien.

    D'ailleurs, exemple de requête avec cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res = $db->query("CLAUSE quelquonque CLAUSE monchamps='".$db->escape($_POST['ma variable enquelle je ne me fie pas'])."';");
    while ($data = $db->fetch_assoc($res))
    Pour ajouter une nouvelle page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    define('ROOT', './');
    require ROOT.'header.php';
    ?>
    		<h1>Mitnick sneezes, breaks into Pentagon</h1>
    		<div class="htimeauth">26:00 | 03/17/2006 | <a href="#">author</a></div>
    		<p>I'm not very creative, so I stole my favorite news headline from OWD/OSWD user antipop's extent template</p>
    		<blockquote><p>This morning a source close to the celebrated hacker <a href="http://en.wikipedia.org/wiki/Kevin_Mitnick">Kevin Mitnick</a> reported that he might be coming down with a bad cold. The source said the cold was so bad that when he sneezed he suddenly had root on the Pentagon's computers.</p></blockquote>
    		<p>For those of us who have followed Kevin's hacking career we already knew he was s00p3r 31337 but this proves it.</p>
    <?php
    require ROOT.'footer.php';
    Evidemment, ça parait très simple comme ça, mais c'est une excellente base pour moi.
    J'en suis à me faire un CMS que j'améliore pour chaque client ...

    En espérant vous avoir rendu service.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut
    Bonjour,

    Tout d'abord merci d'avoir pris le temps de répondre, et surtout aussi clairement.
    Je vais étudier tout ce que tu viens d'écrire et voir ce que je peux en tirer.
    Puis-je pousser le bouchon un peu plus loin et te demander un vrai exemple d'arborescence de tes fichiers et le role des differents dossier, les types de fichiers qu'ils contiennent ?

    Je te remercie encore, j'invite d'autre personne à partager leur méthode.
    Merci beaucoup.

  4. #4
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    Bien sûr :
    /img : images de contenu
    /style : mes css et templates
    /style/img : les images requises par le css
    /include : mes fonctions
    /include/dblayer : mes fichiers de ma classe de base de données préférée
    /js : mes javascripts
    /lang/French : mes fichiers de language français
    /lang/English : mes fichiers de language anglais
    / : le reste, c'est-à-dire header.php, footer.php et mes pages, j'utilise beaucoup l'url-rewriting ainsi que les bases de données

    Mais je peux vous conseiller de regarder les structures des CMS open-source populaires, généralement codés par des programmeurs très talentueux.

    J'avais oublié de préciser dans mon post précédent, la technique que j'emploie lorsque je développe un site multi-lingue, tel que mon site personnel (jamespic.com/jamespic.fr). Il s'agit simplement de définir un language dnas une variable de session (en l'occurrence, selon le tld).

    Ce qui donne donc, dans mes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    define('ROOT', './');
    include('header.php');
     
    include ROOT.'lang/'.$_SESSION['language'].'/machin.php';
    ?>
    du achteuleuleu<? echo $lang_machin['bienvenue'] ?> encore du html ...
    <?php
    include('footer.php');
    lang/English/machin.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $lang_machin = array(
    'bienvenue'                              => 'welcome',
    );
    Et bien sûr :

    lang/French/machin.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $lang_machin = array(
    'bienvenue'                              => 'bienvenue',
    );
    Facile et efficace n'est-ce pas ? aux niveau des performances, c'est sûrement améliorable, mais ça doit tenir la route ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut
    Merci beaucoup,
    D'une part pour le temps que vous prenez à me répondre et d'autre part pour la qualité de vos réponse.
    Je vais tacher comme vous me le conseiller de trouver des cms open-source pour en étudier l'architecture.

    En vous remerciant.

  6. #6
    Membre chevronné
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Par défaut
    Salut,

    pour ma part je ne serais pas aussi détaillé que "is_null" (drole de pseudo ! ) mais voici les grandes lignes de l'architecture de mes sites :


    - Dossier "include" qui regroupe mon fichier de configuration, mes fonctions, etc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /include/conf.pph
    /include/fonctions.php
    - Dossier template qui comprend les pages HTML du site ainsi que les CSS et images

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /template/defaut/index.html
    /template/defaut/membre/liste_membre.html
    etc..
    /template/defaut/tpl_image/styles.css
    /template/defaut/tpl_image/mon_image.gif
     
    /template/design2/ ... -> possibilité de créer d'autres templates
    - je n'utilise pas de header mais un fichier index.php qui fait appel à la rubrique dont j'ai besoin et qui fait le lien entre template et code PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch($_GET['r']) { 
     case "membre" : include("membre/include.php"); break;
     case "forum" : include("forum/include.php"); break;
     default : include("accueil.php"); break;
    }
    - Un dossier par rubrique du site comportant le code PHP (les elements de design se retrouve dans le dossier template)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /membre/include.php // gere les pages dont j ai besoin (un peu comme index.php)
     
    /membre/liste_membre.php
    /membre/lg_membre_fr.php // fichier de langue de la rubrique
    /template/membre/liste_membre.html

    Si tu veux aller plus loin, j'utilise ce système pour le CMS phpMySport (open source) http://phpmysport.sourceforge.net

    Je t'invite aussi à regarder comment sont structurés les autres CMS (une première liste : http://www.framasoft.net/rubrique168.html
    A++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creation de l'architecture d'un site PHP
    Par absolutely dans le forum Autres
    Réponses: 0
    Dernier message: 09/04/2009, 09h04
  2. [POO] [Architecture]... d'un site en php-objet ?
    Par Pill_S dans le forum Langage
    Réponses: 13
    Dernier message: 13/02/2006, 14h05
  3. [architecture]Projet de site/partage de donnée
    Par Seth77 dans le forum Général Conception Web
    Réponses: 18
    Dernier message: 10/12/2005, 09h26
  4. Architecture d'un site multi-langues
    Par seben dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 25/09/2005, 15h23
  5. Débutant : architecture de mon site flash.
    Par Jazzy Troll dans le forum Flash
    Réponses: 3
    Dernier message: 12/01/2004, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo