Récapitulatif sur la réorganisation du site ! - Partie 1

Ce topic permet d'afficher clairement les news qui sont sur le site.
Règles du forum
Ce topic permet à tous le monde de créer ses news. Celles-ci seront directement afficher sur le site lui même. C'est pourquoi chaque news devra être validée par un modérateur ou par l'administrateur avant que celle-ci n'apparaisse. Ne vous étonnez donc pas si votre news n'est pas visible immédiatement (elle le sera dans les minutes qui suivent !).

ATTENTION: Vous ne pouvez pas poster de sujet simple. Il vous faudra obligatoirement cocher la case "Annonce" (et non pas annonce globale) qui se trouve sous votre message pour que votre news soient acceptées !

Récapitulatif sur la réorganisation du site ! - Partie 1

Message par Martial » 22 Mai 2009, 00:51

Salut à toutes et à tous ! :yahoo:

Ça fait plus d'un mois qu'il n'y a plus eu de news, je vais essayer de me faire pardonner en vous pondant une bonne petite news comme vous les aimez (ou pas :p).

Vous avez peut être remarqué que je n'étais que peu présent après les dernières vacances. Cette absence prolongée s'explique par le fait que je travaillais sur le site tout ce temps (d'où l'absence de news d'ailleurs). Ce fut très très long et les changements ont été majeurs du côté du serveur. Je vais essayer de faire un récapitulatif complet de ce qui s'est passé ces dernières semaines en détaillant un maximum. Bien entendu, ça parlera beaucoup programmation une fois encore et il est possible qu'il y ait des choses que vous ne saisissiez pas tout de suite, mais il ne faut pas oublier que cette news me sers aussi d'aide mémoire et que je serais sans nul doute amené à la relire pour me rappeler les changements effectuées lors de cette réorganisation.

Sachez néanmoins qu'un projet de réorganisation total du site comme je l'ai fait jusqu'à aujourd'hui avait déjà eu lieu quelques années auparavant => y avait encore du boulot, mais c'était un premier pas pour guider le site vers la bonne voie, il disposait alors d'une base bien plus solide que l'organisation de départ ! Si jamais vous vouliez voir ce qu'avait donné cette ancienne réorganisation, il vous suffit de suivre le lien: ICI

Je préfère vous prévenir tout de suite, il n'y a pas de grandes nouveautés, c'est simplement de l'optimisation de code et de l'organisation amélioré. Ce n'est même pas visible pour vous ! En revanche, ça va grandement me simplifier la vie ! Bon, on est parti ? :)

Comment est-ce que ça a commencé ?

En fait, c'était un jour comme les autres, j'ai lancé mon client FTP, et je me suis aperçu que c'était un sacré bordel dans les fichiers à la racine du site. Mais ce n'était pas le seul point noir, des bugs étaient disséminés un peu partout, et certains systèmes étaient encore très vieux et avaient besoin d'une peau neuve (sans compter que la plupart des systèmes étaient codés comme un porc ! Je vous raconte même pas la logique d'indentation. Je sais pas ce que j'avais fait ce jour là, mais c'était violent ! ^^). Quoiqu'il en soit, il fallait faire le point sur tout ça, de réparer les erreurs, et de changer d'organisation, ça ne pouvait pas bien fonctionner tel que c'était.

J'ai alors décidé de me renseigner sur une nouvelle organisation du site. En essayant de récolter le maximum d'infos, je suis tombé sur le même mot à plusieurs reprise: MVC. 3 lettres plutôt énigmatiques ! Qu'est-ce que ça peut bien vouloir dire ?

MVC est l'acronyme de Modèle Vue et Contrôleur, c'est une logique d'organisation qui consiste à séparer bien distinctement le code de ce que voit l'utilisateur en visitant les pages (on appelle ça "la vue"). C'est exactement le même concept que lorsqu'on sépare le contenu de la forme avec le xHTML et le CSS. Séparer le code de la vue, c'est ce dont rêve tous les programmeurs. Ce système d'architecture a pourtant quelques défaut, il parait qu'elle ralentie considérablement la charge du serveur car au lieu d'avoir une page, on en a 3, et ça donne pourtant le même résultat ! O_o Oui, mais c'est bien mieux organisé, et c'est là tout l'intérêt !

Par chance, un tutoriel sur le sujet venait juste de paraître sur le Site du Zéro => Créez votre site (presque) complet PHP : architecture MVC et bonnes pratiques. Ce tutoriel m'a permis d'apprendre pleins de choses, mais il m'a aussi pas mal causé de problème. D'après le tutoriel, il faut créer des fichiers de "modèle" qui contiendrait toute une série d'action comme "ajouter_news" ou "supprimer_news" et des fichiers de "vue" qui afficheraient le résultat de ces actions (ou fonctions) à l'utilisateur. Le tout passerait par un contrôleur central: la page index.php (la page qui est exécutée lorsqu'on entre dans un dossier sans spécifier de nom de fichier => ainsi, si on tape http://www.final-rpg.com/ , c'est la page http://www.final-rpg.com/index.php qui est exécutée !). Comme ça, ça semble parfait, mais qu'en est-il des pages à contenu uniquement ? Bah oui, il y a des pages où aucune action n'est nécessaire comme pour les sections Final fantasy ou RPG Maker. Et là, je n'ai pas su donner de réponse... Pourtant bien déterminé à passer le site à l'architecture MVC au départ, j'ai abandonné l'idée à cause de ce fameux problème de page à contenu. Cependant, je ne me suis pas arrêté là, ça aurait été trop simple ! J'ai tout de même décidé de réorganisé le site, ça, il fallait le faire, mais je l'ai fait à ma façon. Pour ça, j'ai suivi quelques conseils donnés dans le tutoriel et j'ai fait un mixte entre ma vision de l'organisation et l'organisation de l'architecture MVC. Ce qui donne quelque chose de très bien, enfin, je pense, mieux qu'avant disons ^^

Réflexion et classement des fichiers

L'idée qui m'a guidée pendant tout le long de cette réorganisation fut que je voulais avoir le moins de fichier possible à la racine ! Ainsi, j'ai réussi à ne garder que 4 fichiers:

  • index.php => C'est la page par laquelle toutes les autres page du site passeront !
  • .htaccess => fichier permettant de modifier directement la configuration interne du serveur. Il fauta faire très attention lorsqu'on le manipule sous risque de rendre indisponible l'ensemble du site ! => il m'a servi pour l'URL Rewriting en particulier, mais aussi pour le gestionnaire d'erreur. J'en reparlerai par la suite donc je m'étend pas sur le sujet !
  • sitemap.xml => sert aux robots pour le référencement, il contient une liste de lien important sur le site qui doivent être visités en priorité !
  • robot.txt => celui là sert aussi aux robots, mais à l'inverse du "sitemap.xml", il indique les pages qui ne doivent pas être indexées !

Remarquez qu'aucun fichier n'a la même extension ! Je pense, par ailleurs, qu'aucun ne doit être retiré et que 4 est le nombre de fichier minimum que l'on peut avoir à la racine pour un site comme Final-RPG.

Après cela, il a fallu réfléchir en terme de disposition des fichiers, avant même de penser à la programmation. C'est vrai, il fallait que je tri tous ces fichiers qui trainaient à la racine alors qu'ils n'avaient rien à y faire ! Je me suis donc amusé à créer une sorte d'organisation du site virtuelle sur mon disque dur pour voir vers quoi je voulais que le site tende. Voilà les résultats de ce dur labeur:

arborescence.png
L'arborescence du site avant la réorganisation !
arborescence.png (42.03 Kio) Consulté 7364 fois


Ici, vous pouvez avoir un aperçu de ce à quoi ressembler l'arborescence du site avant que je fasse de l'ordre dans tout ça !

arborescence_ideal.png
L'arborescence vers laquelle je voulais que le site tende !
arborescence_ideal.png (21.42 Kio) Consulté 7364 fois


Et là, vous avez l'arborescence vers laquelle je voulais que le site tende ! Avouez tout de même qu'il y a une différence non négligeable, nan ?

Bien sûr, ça n'allait pas être aussi simple de passer de l'un à l'autre et j'ai dû fournir un travail de réflexion assez important (si si, ça m'arrive de réfléchir :p) car il fallait de nouveau tout repenser !

J'ai essayé de faire au plus simple possible en regroupant les fichiers par catégorie. Le dossier "img", qui se trouve à la racine du site par exemple, contient TOUTES les images du site sans exception, même le favicon a été mis dedans. Mais ça, ce n'était pas une nouveauté, ça y été déjà après la première réorganisation. La où il y a du neuf, c'est que chaque système contient maintenant son propre dossier image. Oui, je me suis aperçu aussi que c'était un véritable fouillis à la racine du dossier "img" car il y avait des images de tout et des n'importe quoi. C'est ça qui m'a amené à créer 4 nouveaux dossiers dont un pour les images générales du site telles que les bannières ou encore le favicon. Désormais, il n'y a plus aucune image qui se trouve à la racine du dossier "img", tout est classé dans des sous-dossiers ("img_site", "img_livreor", "img_rmxp", etc...).

J'ai, par ailleurs, créé un nouveau dossier que j'ai nommé "includes". Celui-ci, comme vous l'avez sans doute déjà deviné, contient tous les fichiers qui seront inclus dans toutes les pages. Voici un descriptif détaillé des fichiers se trouvant dans ce fameux dossier "includes":

  • menu.php => le menu latéral gauche, celui de base, que vous trouverez tout le temps où que vous soyez sur le site. Celui-ci permet d'accéder aux sections du site. Il dispose d'un système pour inclure des menus spécifique à chaque section (un menu supplémentaire qui s'ajoute au-dessus de celui-ci => système déjà en place avant).
  • haut.php => ce fichier était nommé "masthead.php" avant, ce qui ne me plaisait pas trop, j'ai toujours rêvé d'avoir un bon petit fichier avec un nom simple et facilement compréhensible (on sait tout de suite de quoi il s'agit ^^). Malheureusement, avec l'ancienne architecture, un changement de nom pour un fichier si important (inclut dans chaque page du site quand même :p), ça ne pouvait pas se faire facilement. Désormais, c'est chose faite ! Bref, ce fichier permet d'afficher l'ensemble bannière + menu horizontale. Du moins, c'était ce qu'il se contentait de faire à l'époque, maintenant, il est un peu plus important car il contient, en plus de ce qui a déjà été dit, le Doctype, le header et le générateur de statistique BBclone (et même plus, mais après, c'est dans le domaine du détail et je n'ai pas encore envie de vous embrouiller ^^).
  • bas.php => ce fichier contient la bannière du bas avec un lien vers le formulaire de contact et le forum ainsi que le Copyright. Une fois encore, j'ai donné bien plus de responsabilité à ce fichier car c'est lui qui inclut le fichier "menu.php" (tout est lié en fait ^^ Vive les poupée Russes ! lol)
  • config.php => il s'agit ici du fichier de configuration du site. Il a un pouvoir énorme et peut contrôler beaucoup de chose sur le site grâce aux constantes, mais j'en reparlerais plus tard, donc je ne vous en dit pas plus ! :)
  • session.php => le fichier permettant de reconnaître les sessions du forum. Souvenez-vous en, j'ai énormément travaillé sur le projet de faire un espace membre sur le site avec les sessions du forum (c'est à dire en gardant vos identifiants). ça s'est pas tellement développé jusqu'ici, mais j'ai réussi à faire ce que je voulais, et c'est ce fichier qui contient (en gros), le fruit de ces longues nuits de travail !
  • fonctions.php => ah, encore une nouveauté ! :p Ce fichier, comme son nom l'indique, contient des fonctions qui peuvent être utilisées sur l'ensemble du site. Bon, j'ai un petit honte de le dire moi même, mais pour l'instant, il ma seulement permis de mettre un "s" ou non à "Commentaire" dans les news en fonction du nombre de commentaire. ^^ Enfin, j'exagère un peu, mais c'est vrai qu'il n'est pas très remplit... (3 fonctions à son actif :p) Il faut que je me force à l'utiliser un maximum ! Ah, par contre, j'allais oublier, il ne m'a pas servi qu'à ça en réalité ! Avant, quand je fermais le forum, le site était complètement déréglé alors que maintenant, bien qu'il soit fermé tout comme le forum, le message d'explication s'affiche correctement et rien n'est déformé ! => par contre, ça serait bien que je trouve comment faire pour dissocier forum et site lors d'une fermeture temporaire, parce que c'est quand même gênant => c'est un des prochains problèmes auxquels je devrais faire face !
  • navigation.php => tiens, j'ai failli l'oublier celui-là ! Ça aurait pas été malin parce que c'est un fichier sur lequel j'ai pas mal réfléchi aussi. Celui-ci, permet de naviguer plus facilement dans certaines partie du site. Je pense en particulier à la section RPG Maker XP dans les tutoriels où l'on peut voir ceci en dessous de chaque tutoriel:

    navigation.png
    La "barre" de navigation !
    navigation.png (39.09 Kio) Consulté 7364 fois


    Comme j'ai dû modifier plusieurs fois les pages du tutoriels sur RPG Maker XP, je me suis aperçu que le code permettant d'afficher cette "barre" de navigation se répétait à chaque fois (sur chaque tuto en fait ^^), je me suis dit qu'un fichier à inclure me ferait gagner du temps et j'ai mis en place ce système. Désormais, pour afficher cette "barre" de navigation, il me suffit d'écrire ceci:

    Code : Tout sélectionner
    <?php

    $page_precedente 
    = 'la_page_precedente.html';
    $page_retour = 'la_page_par_defaut.html';
    $page_suivante = 'la_page_suivante.html';

    include(
    CHEMIN_INCLUDES . 'navigation.php');

    ?>


    Maintenant, si je veux changer le contenu des balises "title" pour les liens ou bien simplement changer les images, je n'ai qu'à le faire dans le fichier "navigation.php", pas besoin de modifier toutes les pages de la section RPG Maker XP !

Le dossier "modules" contient tous les systèmes du site. Ils ont chacun leur petit dossier respectif, et aujourd'hui, on peut en compter 7: l'administration, le formulaire de contact, le livre d'or, le système de news, le gestionnaire d'erreur, le générateur de statistiques et l'espace membre (bien que ce dernier soit peu développé jusqu'à maintenant => il contient juste le formulaire de connexion du site, quand on clique sur le lien "Se connecter !" dans le menu horizontal). Un travail énorme a encore une fois été fourni ici, allant de l'optimisation de requêtes SQL jusqu'à la réparation d'erreurs importante tout en passant par l'ajout de nouvelles fonctionnalité ! Voici les modifications que j'ai pu faire durant ces dernières semaines sur chacun de ces systèmes:

  • Pour l'administration, vous n'avez rien à lui envier vu qu'elle ne contient qu'un lien vers les statistiques du site (me permet d'y accéder rapidement sans pour autant que le lien soit visible par n'importe qui. Il faudrait que l'espace membre soit bien plus développé pour que je puisse y rajouter des éléments (et encore, je doute sérieusement de l'utilité de ce système d'administration, mais on verra, peut être que ça sera utile par la suite !).
  • Pour le livre d'or, ça a déjà été un peu plus dur de tout modifier. Pour commencer, il faut savoir que le livre d'or était appelé à l'aide du fichier "livreor.php" qui se trouvait à la racine du site. Seulement celui-ci incluait d'autres pages qui venaient du dossier "livre_or". Je ne sais pas pourquoi j'ai mis un underscore pour le nom de ce dossier, mais ça m'a causé pas mal de soucis... Quoiqu'il en soit, je m'en suis sorti, et j'ai pris une bonne résolution sur le nommage des fichiers. En fait, j'ai décidé que, comme pour les sections, chaque fichiers propre à un système particulier devrait pouvoir être reconnu de part son nom. Je m'explique, pour le livre d'or, il y avait 3 fichiers à inclure: captcha.php (l'image anti-bot, aussi appelée "CAPTCHA"), messages.php (les messages du livre d'or) et "verif_msg.php". Rien de dérangeant à première vu, pourtant, le fichier "messages.php" pourrait correspondre à n'importe quel système, il n'est pas facilement reconnaissable. C'est pourquoi j'ai ajouté à la fin de chaque nom de fichier "_livreor", ce qui donne: "messages_livreor.php" => on voit tout de suite de quel fichier il s'agit. Cependant, ça serait vous mentir si je vous disais que j'ai fait cela uniquement pour les reconnaître... En réalité, c'était pour plus de facilité au niveau de l'inclusion des pages dans "index.php". Désormais, plus aucun nom de fichier ne peut se ressembler !
    Bon, au niveau de la modification proprement dite des fichiers du livre d'or, j'ai ajouté une fonction qui met le numéro de la page sur laquelle on se trouve en gras. Ce n'est qu'un détail, mais j'ai aussi rajouté une ancre de telle façon que lorsqu'on change de page, on atterrisse directement sur les messages et non sur la bannière. La "grosse" erreur que j'ai réparé est que si l'utilisateur mettait une note de 0 au site, elle n'était pas comptée dans la moyenne => et pourtant, ça n'était pas voulu :p Je crois que les modifications, pour le livre d'or ce sont arrêtées là !
  • Du côté du système de news, ce fut plus délicat, en particulier pour le système d'archive (dont je parlerai plus bas car ça concerne le .htaccess), j'ai beaucoup optimiser les requêtes SQL pour les classement de news dans l'archive, tout en réindentant le code (il est vraiment très propre maintenant !). Comme je suis gentil, voici la page qui permet de classer les news par auteur:

    Code : Tout sélectionner
    <?php

    /***************************************************************************************************************/
    /****************************** L'archive - Classement par auteur **********************************************/
    /***************************************************************************************************************/

    $query = '
    SELECT p.post_id, p.poster_id, p.icon_id, p.post_subject,
    t.forum_id, t.topic_id, t.topic_first_post_id, t.topic_time, t.topic_approved,
    user_id, u.username                    
    FROM forum_posts AS p, forum_users AS u, forum_topics AS t
    WHERE t.forum_id = '
     . FORUM_NEWS . '
        AND t.topic_first_post_id = p.post_id
        AND p.poster_id = u.user_id
    ORDER BY user_id ASC, topic_time DESC
    '
    ;

    $resultat = $db->sql_query($query);
            
    while($row = $db->sql_fetchrow($resultat)){
                
        if
    ($row['topic_approved'] == 1){
                    
            $auteur_prec 
    = $auteur;
                    
            $auteur 
    = $row['username'];
                    
            if
    ($auteur_prec != $auteur){
                
                $res 
    = mysql_query("SELECT COUNT(*) FROM forum_topics WHERE topic_first_poster_name ='$auteur' AND forum_id = " . FORUM_NEWS);

                $nb_news = mysql_fetch_row($res);
                
                echo 
    '<br /><h2 align="center">' . $auteur . ' (' . $nb_news[0] . ')</h2>';
                    
            
    }
            
    ?>
                
                    
            <br />
                    
    <?php        
                    
            if
    ($icons[$row['icon_id']]['img'] != NULL){ ?>
            
                <img class="icon_news" src="<?php echo CHEMIN_FORUM; ?>images/icons/<?php echo $icons[$row['icon_id']]['img']; ?>" height="<?php echo $icons[$row['icon_id']]['height']; ?>" width="<?php echo $icons[$row['icon_id']]['width']; ?>" title="Icône de la news" alt="Icône de la news" />
                            
    <?php            

            
    }
                            
            else
    { 
        
    ?>
        
                            
                <img class="icon_news" src="<?php echo IMG_NEWS; ?>no_icon_news.png" alt="Pas d'icône !" />
                            
    <?php            
                            
            
    }                
                    
    ?>
                        
                    
            <br />        
                        
            <h3>
                        
            <img src="<?php echo IMG_NEWS; ?>fleche_bleu_news.gif" alt="->" />
                        
                <a href="news-<?php echo $row['topic_id']; ?>.html" title="<?php echo censor_text($row['post_subject']); ?>">
                
                    <?php echo censor_text($row['post_subject'])?>
                            
                </a>
                       
            </h3>
                    
            <br />
                   
                    
    <?php
                
        
    } // Fin du "if" news = approuvée

    } //Fin de la boucle While
            
    ?>


    Alors ? Difficile de faire plus propre hein ? :-p lol

    A part cela, j'ai fait une assez grosse modification côté titre de la page car maintenant, le titre de la page est le titre de la news lorsque vous lisez une news sur le site ! (référencement oblige comme on dit ! ^^).
  • Le gestionnaire d'erreur n'a pas subi tellement de modification, mais ce fut tout de même très long. Maintenant, toutes les erreurs devraient être gérées correctement !
  • Les autres systèmes ont subis à peu près les mêmes modifications: modification du code pour le rendre plus propre et plus clair + déplacement des fichiers dans un dossier spécifique avec renommage

Le dossier "pages" cette fois-ci contient toutes les pages de contenu uniquement. C'est ici que vous allez donc trouver toutes les pages incluent lorsque vous visitez une section sur le site. Chaque fichier est classé dans des dossier propre à chaque section, on peut ainsi trouver un dossier "rmxp", "ff1" ou encore "zelda". La nouveauté, ici, réside dans le fait que lorsqu'on rentre dans un de ces sous-dossiers ("rmxp" par exemple), on tombe directement sur toutes les pages de la section. Avant, on tombait sur un fichier "menu_rmxp" qui contenait les liens menant aux grandes partie de la section en question (ce menu était et est toujours inclut dans le menu de base: "menu.php". La différence maintenant est que tous les menus de toutes les sections se trouvent dans un unique dossier "menu" qui se trouve lui-même dans le dossier "includes" => ce qui est tout de même bien miux), ainsi qu'un nouveau dossier "pages" dans lequel se trouvaient toutes les pages de contenu. Certaines de ces pages se trouvaient encore dans un sous-dossier. C'était le cas pour la base de donnée de RPG Maker XP par exemple => un dossier "base_de_donnee" s'occupait de regrouper tous les fichiers de contenu de ce grand tutoriel.
Une autre chose qu'il est important de noter je pense est que des pages simples, qui n'appartiennent à aucune section et qui ne sont pas des systèmes (qu'on ne sait pas où mettre en fait ^^) ont été placées dans un dossier portant le doux nom de "autres" (dossier qui se trouve toujours dans le dossier "pages" à la racine du site). Je parle par exemple de la page d'accueil (qui n'est pas index.php, je le rappelle ! En fait, index.php appellera la page /pages/autres/accueil.php si aucune section ni aucun système n'est demandé !), mais aussi de la page de recrutement ou de l'historique. D'ailleurs, quelques nouvelles pages ont pu naître avec quelques nouvelles fonctions. Je pense en particulier aux pages "site_ferme.php", "section_ferme.php" et "systeme_ferme.php" qui accompagne le système de fermeture complet ou partiel du site (j'en reparle plus loin => avec les constantes).

Le dossier "style" contient les feuilles du style du site (CSS). Ici, rien n'a vraiment changé, et pourtant, il faudra que je réorganise sérieusement tout ça parce que c'est un véritable bordel ! O_o Il y a des classes que j'utilise plusieurs fois avec des noms différents comme par exemple la classe "gros" et "strong" => j'alterne à chaque fois ^^ Une fois je met l'un et une fois je met l'autre... :fixe: Inutile de préciser que c'est quelque chose de très dangereux et qu'il ne faut absolument pas faire ça !! Un jour ou l'autre, je le payerai... M'enfin, il me faudrait du temps pour faire le point sur tout ça !

Et nous voici enfin au dernier dossier: "telecharger". Bon, au niveau du nom, c'est un choix que j'ai fait, mais je trouve ça vraiment très laid... En fait, vous allez trouver ça stupide, mais avant j'avais mis "telechargements". Or excepté le fait que ce soit un peu plus long, ça m'a posé un gros problème parce que je savais jamais si je devais mettre un "s" ou non à la fin... Bref, encore une histoire à la mord moi le nœud qui m'a fait perdre du temps pour rien :fixe:
Ce dossier regrouperait tous les fichiers de taille assez importante et qui sont destinés à être télécharger. Je pense aux jeux amateurs, aux OST ou aux vidéos. Cette dernière partie n'est pas encore finalisée. J'ai beau avoir pas mal réfléchi sur le sujet, il y a encore quelques trucs que j'aimerais pouvoir clarifier. Ce qui est difficile à gérer ici, c'est que les fichiers disponibles en téléchargement doivent aussi bien être accessible facilement via la section que l'on visite que par la page de téléchargement globale. Si l'on veut télécharger des vidéos sur Final fantasy 1 par exemple, on doit pouvoir le faire via la section Final fantasy 1, mais aussi via le lien "Téléchargements" dans le menu de gauche ! Du côté de la section de Final fantasy 1, je suis encore en phase de réflexion, est-ce qu'il vaut mieux mettre un lien "Téléchargements" ou plutôt plusieurs comme "Vidéos", "Musiques", etc... dans le menu spécifique ? Je pense personnellement que la deuxième solution serait plus adaptée, on sait directement ce sur quoi on va tomber en cliquant sur les liens, contrairement à la première solution. Du côté de la page de téléchargement globale par contre, ça se complique très rapidement ! Oui, il faut concilier sections sur Final fantasy avec sections sur RPG Maker tout en prenant en compte les autres RPGs. En effet, le contenu téléchargeable des sections sur Final fantasy n'a rien à voir avec celui des sections RPG Maker. Bon, je ne m'enfonce pas plus dans les détails avant de m'embrouiller moi même, mais sachez que j'ai tout de même commencé à mettre en place un système. En fait, dès que vous êtes dans la page de téléchargement globale, vous avez 3 choix: Final fantasy, RPG Making et Autres RPGs. Si vous cliquez sur RPG Making, vous avez alors 2 choix (plus en fonction des logiciels de making que je souhaiterai ajouter): RPG Maker XP et RPG Maker VX. Si vous cliquez sur RPG Maker XP, dans ce cas vous serez directement redirigé vers la section RPG Maker XP sur la page de téléchargement spécifique à RPG Maker XP => on est donc bel et bien entré dans la section RPG Maker XP, le titre change et le menu propre à RPG Maker XP est apparut ! Ce qui manque, c'est l'action a effectuer si on clique sur "Final fantasy" dans la page de téléchargement globale. Pour l'instant, je pense afficher un lien pour chaque Final fantasy, puis lorsque l'utilisateur a cliqué sur le Final fantasy qui lui convient (Final fantasy 1 par exemple), de nouveaux liens s'offrent à lui: Musiques, Vidéos, etc... Chacun de ces liens le redirige vers la page adéquate de la section qui va bien ! Ça ne semble pas être une trop mauvaise idée, mais il y a quelque chose qui me dérange, je ne sais pas encore quoi ^^
Par ailleurs, il faut aussi réfléchir sur la disposition des fichiers dans ce fameux dossiers "telecharger", ce qui n'est pas une mince affaire... :(

Vous avez pu avoir un bon gros aperçu de ce à quoi ressemble le site avec sa toute nouvelle organisation ! :)

Des idées retenues, d'autres moins...

Bien que je n'ai pas choisi de suivre à la lettre la logique d'organisation de l'architecture MVC, il y a des éléments que j'ai retenu et que j'ai voulu mettre en place. Parmi eux, il y a bien entendu la page "index.php" qui sert de contrôleur frontal et dans laquelle toutes les pages du site vont passer, mais aussi le fait de regrouper tous les systèmes dans le même dossier (qu'ils appellent "modules").

La chose dont je n'ai pas encore parlé jusqu'ici sont les librairies. La raison est simple, c'est que je ne m'en suis pas servie... Bon, avant qu'on me demande ce que c'est, les librairies ne sont pas des endroits pour acheter des bouquins, en programmation, il s'agit d'une série de fonction destinée à une application particulière. De ceux que je pensais utiliser, il y avait PDO, une librairie pour gérer les images et GeShi.

PDO est une librairie qui permet de gérer plus facilement les accès à la base de donnée. Totalement programmée en objet, grâce à elle, il n'y a plus besoin de donner ces identifiants de base de donnée ni même de se creuser la tête dans des requêtes compliquer. La syntaxe à utiliser est plus simple, plus épuré, et ça rend la chose bien plus facile ! Seulement, il faut que le serveur soit en PHP 5 et je sais que pour que les fichiers PHP soient exécutés en PHP 5, il faut qu'ils aient l'extension ".php5" à la place de ".php". Or je n'ai pas envie de m'amuser à passer ma nuit à renommer l'extension de milliers de fichiers ^^ => il parait qu'il y a une autre solution, mais je ne me suis pas suffisamment renseigné, faute de temps

La librairie pour les images m'auraient apparemment servie à gérer plus facilement toutes les images du site. Un redimensionnement plus aisé, un cadre, etc... Il n'y aurait plus jamais eu une image toute seule sur un fond blanc ! => j'ai abandonné l'idée parce que je n'avais pas non plus suffisamment de temps pour mettre en application tout ça (ça prend du temps que je n'ai pas ...)

Et enfin, GeShi est LA librairie par excellence pour la coloration du code. Bien sûr, celle-là, je ne suis pas près de la laisser tomber :p Oui, elle me servira pour colorer le Ruby dans la section des scripts RPG Maker. J'avais déjà essayé de la mettre en place à plusieurs reprise, mais je m'étais arrêté avant de faire quoique ce soit (ça me semblait trop dur ou il y avait un problème auquel je ne pouvais faire face... => j'espère que maintenant ça ira, faudrait que je m'y replonge !).

L'inconvénient dans les librairies, c'est que le site dépend d'eux après. Ce qui fait une nouvelle dépendance, si bien que si jamais ils ne sont plus là ou qu'ils ne sont pas compatible sur d'autres serveur, le site tombe à l'eau et il faut tout recoder. Je pense par exemple à PDO. Quelqu'un qui fait son site en basant ses accès à la base de donnée avec PDO et qu'un jour il doit changer de serveur et que son nouveau serveur n'a pas PHP 5. Eh bien il est bien ennuyé ^^ (bon, c'est une situation un peu exagéré, mais vous voyez l'idée !)

Une nouvelle façon de travailler avec WAMP !

Depuis que j'ai commencé le site (donc il y a assez longtemps pour tout vous dire :embarasse:), j'ai toujours fait les modifications en temps réel, directement sur le site. Je ne sais pas si vous le savez, mais le PHP est un langage interprété, il n'y a pas besoin de compiler son code comme on le ferait en C, c'est le serveur qui traduit directement ce code en xHTML. C'est d'ailleurs pour cette raison que l'on appelle le PHP "langage dynamique", le serveur peut interpréter le code différemment en fonction d'une infinité de facteur (comme le temps). Tout ça pour dire qu'on ne peut pas lire le PHP directement sur son PC contrairement à des pages statiques écrites en xHTML pour la raison que je viens de citer plus haut ! C'est pourquoi j'ai toujours effectué mes tests directement en ligne sur le site, provoquant, parfois, des erreurs plutôt embêtante (et difficilement réparable). La réorganisation modifiant beaucoup trop de fichiers, je ne pouvais pas me permettre de continuer de travailler directement sur le "vrai" site. J'ai alors fait une copie du site chez Free. Malheureusement, je ne critique pas Free parce qu'ils sont déjà bien gentils de nous offrir 10 Gigas d'hébergement, mais il m'a été impossible de travailler correctement... Pour commencer, il y a eu cette histoire de session où on est obligé de créer un dossier "session" à la racine du site pour qu'il les active ! O_o Puis ça c'est enchaîné avec l'activation de PHP5 en insérant la commande "php 1" dans un .htaccess à la racine, puis j'ai abandonné quand j'ai vu qu'il ne prenait pas en compte l'URL Rewriting :?! O_o O_o

J'ai alors décidé de me tourner vers des solutions locales. Car oui, il est possible d'installer un serveur local grâce à des logiciels qui vont même jusqu'à avoir un SGBD (Système de Gestion de Base de Donnée => mais on peut dire base de donnée :siffle: ^^). Ce logiciel s'appelle WAMP et m'a permis, contrairement à Free, de faire un réplique EXACTE du site ! Ainsi, en plus de pouvoir effectué mes tests sans gêner personne, je disposé d'une sauvegarde locale du site dans sa totalité ! De plus, le gain de temps est énorme quand je travaille dessus car il n'y a plus besoin d'envoyer les nouveaux fichiers sur le serveur, tout se fait en temps réel ! C'est un véritable bonheur pour moi :)

Par contre, ça n'a pas eu que des avantages ^^ Bon, c'est en partie parce que je suis pas très malin, mais un moment, j'ai effacé toute la base de donnée en ligne du site, c'est à dire toutes les informations du forum (messages, membres et tout le tralalala) ainsi que tous les messages du livre d'or (et le nombre de connecté total). Fort heureusement, comme c'était au moment où je mettais en place ce système de serveur local, j'avais fait des sauvegardes de la base de donnée pour tout transférer dans la nouvelle base de donnée locale. Mais on a quand même échappé à la grande catastrophe ! Vous vous rendez compte qu'en un clique il n'y avait plus rien ?! Et que ce clique m'a fait travaillé au moins 5 heures pour tout rétablir ?! (oui, plus de 88 000 lignes et comme c'est beaucoup trop d'un coup, il faut décomposer ça en plusieurs fichiers de 5000 lignes... Vous voyez un peu le temps que ça prend ^^ Sans parler du fait que l'ordi lag énormément quand il gérer des milliers de lignes comme ça ! Essayez, vous verrez ^^).

Maintenant vous savez que je travaillerai toujours sur une version local du site, il ne risque pas d'y avoir un problème avant longtemps je pense :) Puis le développement du site risque de s'accélérer :oui: (surtout côté systèmes, j'ai déjà pleins d'idées !!)

Superglobale $_GET

1er problème dans tout ça, l'histoire des $_GET. Je vais de nouveau essayer de vous expliquez cette notion afin que vous ne soyez pas perdu par la suite (je vous promet rien ^^). Les variables $_GET sont des variables dont la valeur peut être donnée par n'importe quel utilisateur car elle est définie directement dans l'URL. Un petit exemple: test.php => ici, on accède à une page normale et aucune variable GET n'est définie. En revanche, si on écrit: test.php?nom=valeur, alors on définit une variable GET qui a pour nom: "nom" et pour valeur: "valeur". En fonction de cette variable, la page "test.php" peut réagir de différent manière ! Un petit exemple, si la page "test.php" contient ce code:


Code : Tout sélectionner
<?php

// Si la variable GET qui a pour nom "nom" a pour valeur "valeur"
if($_GET['nom'] == valeur){
    
    
// Alors on écrit "Salut !"
    echo 'Salut !';

}

?>


Dans ce cas, si on écrit ceci dans la barre d'adresse: test.php?nom=valeur, eh bien on aura un beau petit message "Salut !" qui s'affichera sur l'écran.

Le concept est donc très simple à comprendre, et justement au moment où j'ai compris l'utilité des GET que j'avais décidé de faire la première réorganisation du site !

Mon but, la première fois, était de créer une page pour chaque section du site à la racine ! (comme vous pouvez le constater sur le premier screen qui montre l'ancienne arborescence du site). Cette page s'occupait alors d'inclure le contenu des toutes les pages de sa section. Prenons un chtite exemple avec la section Final Fantasy 1. Lorsqu'on appelait la page "final_fantasy_1.php" qui se trouvait à la racine du site, celle-ci regardait si une variable GET était définie en même temps. Si c'était le cas et si cette variable GET se nommait "page", on incluait la page dont le nom était la valeur de cette variable $_GET['page']. Comme je sens que je ne suis pas trop clair, voici le contenu de l'ancienne page "final_fantasy_1.php":

Code : Tout sélectionner
<?php

/************************ Inclusion des pages ! **********************************/

if(isset($_GET['page'])){

    // Pages consultables sur Final fantasy I
    
    if
($_GET['page'] == 'introduction'){
            
        include
('ff1/pages/introduction_ff1.php');    
    
    
}
    
    elseif
($_GET['page'] == 'solution'){
            
        include
('ff1/pages/solution_ff1.php');
        
    
}
    
/************************************* Erreur 404 ********************************/
        
    else
{

        include('erreurs/404.php');    
        
    
}
        
}

else{

    include('ff1/pages/introduction_ff1.php');
    
}

?>


C'était encore plus idiot que je ne le pensais puisque en réalité, je regardais à chaque fois une valeur précise de la variable $_GET['page']. Si elle était égale à "introduction", alors j'incluais la page d'introduction de Final fantasy 1, si elle était égale à "solution", alors j'incluais la page de solution de Final fantasy 1, etc... Ce qui voulait dire qu'à chaque nouvelle page de contenu pour la section Final fantasy 1, je devais modifier cette page ! O_o En modifiant un peu le code, on pouvait avoir ceci:

Code : Tout sélectionner
<?php

include('session.php');

/************************ Inclusion des pages ! **********************************/

if(isset($_GET['page'])){

    include('ff1/pages/' . $_GET['page'] . '_ff1.php');
        
}

else{

    include('ff1/pages/introduction_ff1.php');
    
}

?>


Bon, je ne suis pas sûr que ce soit le top niveau sécurité, mais ces quelques lignes permettent d'arriver au même résultat que le code posté plus haut, même si la section contient 5000 sections (ce qui aurait quand même fait 5000 * 3 = 15 000 lignes en plus avec l'ancien système :p).

M'enfin, mon but était que vous compreniez le principe de ces variables GET => on inclut une page différente à l'aide de la valeur contenue dans une certaine variable GET. C'est sur la même base que j'ai développé la réorganisation.

La première fois que j'ai utilisé ce système, c'était vraiment révolutionnaire car les pages qu'on incluaient ne contenait QUE le contenu directement lisible par l'utilisateur ! Je n'avais donc plus besoin de réécrire une cinquantaine de fois le même code (le Doctype + le header + toutes les inclusions pour le menu, la bannière et le bas, les sessions, sans même parler du code nécessaire au fonctionnement de BBclone, le gestionnaire de statistique du site...). Toutefois, il fallait quand même que je le réécrive pour toutes les pages spécifique à chaque section ! De même pour les systèmes ou toutes les pages indépendantes. Ce qui était quand même assez lourd à faire... Avec la nouvelle réorganisation, j'ai trouvé le moyen de n'écrire qu'une seule et unique fois tout le code dont je vous parlais un peu plus haut (soit le Doctype, le header et tout ce qui s'en suit !). Cette page qui contient en fait le squelette du site est la page "index.php". Oui, c'est parfaitement logique puisque j'ai voulu faire en sorte qu'absolument TOUTES les pages du site sans exception passe par cette page. Je voulais vous montrer une version ultra simplifiée de cette fameuse page d'accueil qui sert de réceptacle à toutes les pages du site, mais en essayant de vous faire un truc le plus clair possible, je me suis dit qu'il faut que je continue de vous expliquer certains points ^^

Système et section, deux choses bien différentes

J'ai toujours voulu faire la différence entre deux choses: les section et les systèmes. Oui, ce sont des choses complètement différentes et on ne peux pas les traiter de la même façon. C'est d'ailleurs le problème que j'ai eu lorsque j'ai voulu appliquer l'architecture MVC sur le site ! En effet, les sections ne sont que des pages à contenu pur et dur alors que les systèmes ne génèrent du contenu qu'en fonction des entrées de l'utilisateur, ils ont donc besoin d'avoir accès à la base de donnée et les inclusions de multiples pages sont souvent nécessaires.

Mon but était donc d'en faire deux choses bien distinctes. Seulement, c'était loin d'être si simple et je me suis résous à mélanger, en quelque sorte, les deux. Seuls leur disposition du côté des dossiers sur le serveur n'est pas la même (dossier "pages" pour les sections et dossiers "modules" pour les systèmes).

Voilà, c'était juste pour signaler que j'avais pas mal réfléchi là-dessus mais que je n'avais trouvé aucune solution moins contraignante !

Les constantes, une véritable nouveauté !

Ah, on arrive au moment que je préfère: la découverte d'une nouvelle notion. On pourrait presque faire la relation avec les variables $_GET => je connaissais déjà l'existence des constante, mais je n'en voyais pas la réelle utilité ! Eh bien franchement, une fois encore, j'avais tort ! :oui: Les constantes sont d'une puissance extraordinaire ! Et encore, je ne suis sans doute pas au bout de mes surprises :)

Pour ceux qui ne connaisse pas la programmation, les constantes sont en fait des variables dont la valeur ne peut pas changer ! Exemple:

Code : Tout sélectionner
<?php
// Définition d'une variable
$variable = 5;

//Définition d'une constante
define('CONSTANTE', 5);

//Modification de la variable
$variable = 2;

//Modification de la constante
CONSTANTE = 2: // => ne fonctionne pas !

?>


Mais quel intérêt d'avoir une sorte de variable qu'on ne peut pas modifier ? C'était ma question que je me posais au départ, mais je suis content de leur avoir trouvé une utilité ! :) En fait, les constantes peuvent servir pour la taille maximale d'un avatar par exemple:

Code : Tout sélectionner
<?php

define
('TAILLE_AVATAR_MAX', 500);

?>


Mais il est possible aussi de définir une constante pour un chemin vers un dossier. C'est d'ailleurs cet exemple là qui m'a mis la puce à l'oreille. En effet, j'ai décidé de créer des constantes pour le chemin de chaque section ! De la même façon pour les images, ce qui nous donne un truc de ce genre:

Code : Tout sélectionner
<?php

define
('CHEMIN_IMG', '/img/');

// La saga des Final fantasy
define('IMG_FF1', CHEMIN_IMG . 'img_ff1/');
define('IMG_FF2', CHEMIN_IMG . 'img_ff2/');
define('IMG_FF3', CHEMIN_IMG . 'img_ff3/');

// La suite des RPG Maker
define('IMG_RMXP', CHEMIN_IMG . 'img_rmxp/');
define('IMG_RMVX', CHEMIN_IMG . 'img_rmvx/');

?>


Ce travail a été long à mettre en place car ces constantes devaient être utilisées partout ! Pour inclure une image dans une page de la section RPG Maker XP, voici les modifications que je devais faire:

Avant:
Code : Tout sélectionner
<img src="/img/img_rmxp/image.png" alt="Image" />

Après
Code : Tout sélectionner
<img src="<?php echo IMG_RMXP; ?>image.png" alt="Image" />


Ce fut long, laborieux et pas forcément très marrant à faire ^^ (plus de 100 pages à modifier, j'ai vu plus distrayant ^^). Mais maintenant que c'est fait, ça me donne un pouvoir bien supérieur ! Imaginez maintenant que je veuille changer le nom du dossier d'image de RPG Maker XP ou bien simplement le déplacer, c'était quelque chose d'impensable avant car j'aurais dû modifier toutes les pages pour que les images s'affichent correctement. Maintenant, il me suffit de changer la valeur de la constante adaptée !

Si vous pensez que la puissance des constantes s'arrête là, vous vous trompez lourdement ! En effet,j'ai aussi pu élaboré un nouveau système de "nommage" des pages. Vous n'avez peut être jamais fait attention, mais dans la barre tout en haut de votre navigateur, il y a le nom de la page que vous êtes en train de visualiser (si je ne me trompe pas, vous devriez voir ceci: "Final-RPG &bull; Voir le sujet - Récapitulatif sur la réorganisation du site !"). Dans chaque section du site, j'avais fait attention à choisir un nom pour les pages, le tout en suivant une sorte de hiérarchie. Pour le tutoriel sur les "Cartes" de la section RPG Maker XP par exemple, j'avais donné ce nom à la page: "Les cartes - RPG Maker XP - Final-RPG". On peut voir que j'ai fait en sorte d'avoir un ordre, un peu comme on pourrait le faire pour un fil d'Ariane => Il faut que l'utilisateur sache, en voyant le titre de la page, qu'il se trouve dans le tutoriel "Les cartes" de la section "RPG Maker XP" et sur le site "Final-RPG" (on sait jamais, dès fois qu'il oublierait ^^) => l'importance du titre n'est d'ailleurs pas négligeable pour le référencement !

Bon revenons à notre histoire de constante ! Vous pouvez remarquer qu'entre chaque "étage" de cette hiérarchie il y a des séparateurs (un tiret ici). Le premier test que j'ai fait avec l'utilisation des constantes était justement de modifier ce séparateur. Très rapidement, voici comment un titre est défini dans la nouvelle organisation (on va reprendre l'exemple des cartes de RPG Maker XP :) ):

Code : Tout sélectionner
<?php

$titre_page 
= 'Cartes' . SEPARATEUR_TITRE . $titre_page; //Définition du titre de la page

?>


(petite parenthèse pour dire que $titre_page a subi plusieurs modification dans la page d'index => à cette étape du code, elle a pour valeur "RPG Maker XP - Final-RPG")

On peut tout de suite voir que j'ai transformé ce séparateur en constante ! Ce qui me permet en deux trois clique de passer de ça:

titre_page.png
Le titre de la page avec un tiret comme séparateur !
titre_page.png (4.67 Kio) Consulté 7365 fois


à ça:

titre_page_2.png
Le titre de la page avec une barre oblique comme séparateur !
titre_page_2.png (4.79 Kio) Consulté 7365 fois


ou ça:

titre_page_3.png
Le titre de la page avec un cercle comme séparateur !
titre_page_3.png (4.75 Kio) Consulté 7365 fois


Bon, je ne m'exprimerais pas sur l'utilité de la chose ^^ Mais c'était juste pour savoir un peu de quoi étaient capables les constantes ! Et franchement, je suis pas déçu ! En 2 cliques, on peut modifier le titre de centaines de pages !

Avant de vous montrer en intégralité le fichier "config.php" qui contient toutes les constantes que j'ai défini jusqu'à ce jour, je vous donne un autre exemple de l'utilisation de leur puissance !

Oui, j'ai défini récemment des constantes me permettant d'activer ou de désactiver des parties ou l'intégralité du site !! Ainsi, pendant mes tests, je pourrais fermé les parties sur lesquelles je travaille afin d'être sûr de ne pas être dérangé par qui que ce soit (car j'ai fait en sorte que l'administrateur puisse accéder aux parties auxquelles les utilisateurs normaux n'ont pas accès). C'est peut être le seul changement "visible" que j'ai dû faire.

Bon aller, voici le fichier config.php que vous voyez un peu les possibilités des constantes !


Code : Tout sélectionner
<?php

//Désactivation du site
define('ACTIVE_SITE', TRUE);

// Identifiants pour la base de données. Nécessaires a PDO2.
define('SQL_DSN', 'mysql:dbname=tutoriel;host=localhost');
define('SQL_USERNAME', 'root');
define('SQL_PASSWORD', '');

define('CHEMIN_FORUM', '/forum/');
define('FORUM_NEWS', '20');

//Le Livre d'Or
define('LIVREOR_NB_MSG_PAGE', '10'); // Nombre de message affichés par page dans le livre d'or

// Le système de news
define('NEWS_NB_NEWS_ACCUEIL', '10'); // Nombre de news affichées sur la page d'accueil
define('NEWS_NB_COM_PAGE', '15'); // Nombre de commentaire affichés dans les commentaires de news sur le site

define('CHEMIN_LIB', 'libs/');
define('CHEMIN_INCLUDES', 'includes/');
define('CHEMIN_IMG', '/img/');
define('CHEMIN_STATS', '/modules/stats/');

define('CHEMIN_MODULES', 'modules/');
define('CHEMIN_PAGES', 'pages/');
define('CHEMIN_MENU', 'includes/menu/');
define('CHEMIN_STYLE', '/style/');

/******************** Définition des chemins de chaque module *************************************/

define('CHEMIN_ERREURS', CHEMIN_MODULES . 'erreurs/');
define('CHEMIN_LIVREOR', CHEMIN_MODULES . 'livreor/');
define('CHEMIN_CONTACT', CHEMIN_MODULES . 'contact/');
define('CHEMIN_NEWS', CHEMIN_MODULES . 'news/');
define('CHEMIN_ESPACE_MEMBRE', CHEMIN_MODULES . 'espace_membre/');
define('CHEMIN_TELECHARGER', 'telecharger/');
    define('CHEMIN_RPG', CHEMIN_TELECHARGER . 'rpg/');
    define('CHEMIN_MAKING', CHEMIN_TELECHARGER . 'making/');
    define('CHEMIN_EMULATION', CHEMIN_TELECHARGER . 'emulation/');

/******************** Définition des chemins de chaque section ************************************/

// La saga des Final fantasy
define('CHEMIN_FF1', CHEMIN_PAGES . 'ff1/');
define('CHEMIN_FF2', CHEMIN_PAGES . 'ff2/');
define('CHEMIN_FF3', CHEMIN_PAGES . 'ff3/');
define('CHEMIN_FF4', CHEMIN_PAGES . 'ff4/');
define('CHEMIN_FF5', CHEMIN_PAGES . 'ff5/');
define('CHEMIN_FF6', CHEMIN_PAGES . 'ff6/');
define('CHEMIN_FF7', CHEMIN_PAGES . 'ff7/');
    define('CHEMIN_FF7CC', CHEMIN_PAGES . 'ff7cc/');
define('CHEMIN_FF8', CHEMIN_PAGES . 'ff8/');
define('CHEMIN_FF9', CHEMIN_PAGES . 'ff9/');
define('CHEMIN_FF10', CHEMIN_PAGES . 'ff10/');
define('CHEMIN_FF10_2', CHEMIN_PAGES . 'ff10_2/');
define('CHEMIN_FF11', CHEMIN_PAGES . 'ff11/');
define('CHEMIN_FF12', CHEMIN_PAGES . 'ff12/');
define('CHEMIN_FF13', CHEMIN_PAGES . 'ff13/');

// La saga des Crystals Chronicles
define('CHEMIN_FFCC', CHEMIN_PAGES . 'ffcc/');
    define('CHEMIN_FFCC_CC', CHEMIN_PAGES . 'ffcc/cc/');
    define('CHEMIN_FFCC_ROF', CHEMIN_PAGES . 'ffcc/rof/');
    define('CHEMIN_FFCC_EOT', CHEMIN_PAGES . 'ffcc/eot/');
    define('CHEMIN_FFCC_MAK', CHEMIN_PAGES . 'ffcc/mak/');

// La suite des RPG Maker
define('CHEMIN_RMXP', CHEMIN_PAGES . 'rmxp/');
define('CHEMIN_RMVX', CHEMIN_PAGES . 'rmvx/');

// Les autres RPGs
define('CHEMIN_ZELDA', CHEMIN_PAGES . 'zelda/');
    define('CHEMIN_ZELDA_TP', CHEMIN_PAGES . 'zelda/TP/');
    

/******************** Définition des chemins d'image de chaque section **************************/

// La saga des Final fantasy
define('IMG_FF1', CHEMIN_IMG . 'img_ff1/');
define('IMG_FF2', CHEMIN_IMG . 'img_ff2/');
define('IMG_FF3', CHEMIN_IMG . 'img_ff3/');
define('IMG_FF4', CHEMIN_IMG . 'img_ff4/');
define('IMG_FF5', CHEMIN_IMG . 'img_ff5/');
define('IMG_FF6', CHEMIN_IMG . 'img_ff6/');
define('IMG_FF7', CHEMIN_IMG . 'img_ff7/');
    define('IMG_FF7CC', CHEMIN_IMG . 'img_ff7cc/');
define('IMG_FF8', CHEMIN_IMG . 'img_ff8/');
define('IMG_FF9', CHEMIN_IMG . 'img_ff9/');
define('IMG_FF10', CHEMIN_IMG . 'img_ff10/');
define('IMG_FF10_2', CHEMIN_IMG . 'img_ff10_2/');
define('IMG_FF11', CHEMIN_IMG . 'img_ff11/');
define('IMG_FF12', CHEMIN_IMG . 'img_ff12/');
define('IMG_FF13', CHEMIN_IMG . 'img_ff13/');

// La saga des Crystals Chronicles
define('IMG_FFCC', CHEMIN_IMG . 'img_ffcc/');
    define('IMG_FFCC_CC', CHEMIN_IMG . 'img_ffcc/cc/');
    define('IMG_FFCC_ROF', CHEMIN_IMG . 'img_ffcc/rof/');
    define('IMG_FFCC_EOT', CHEMIN_IMG . 'img_ffcc/eot/');
    define('IMG_FFCC_MAK', CHEMIN_IMG . 'img_ffcc/mak/');
    define('IMG_FFCC_TCB', CHEMIN_IMG . 'img_ffcc/tcb/');

// La suite des RPG Maker
define('IMG_RMXP', CHEMIN_IMG . 'img_rmxp/');
define('IMG_RMVX', CHEMIN_IMG . 'img_rmvx/');

// Les autres RPGs

define('IMG_ZELDA', CHEMIN_IMG . 'img_zelda/');
    define('IMG_ZELDA_TP', CHEMIN_IMG . 'img_zelda/TP/');

// Les modules

define('IMG_SITE', CHEMIN_IMG . 'img_site/');
define('IMG_PARTENAIRES', CHEMIN_IMG . 'img_partenaires/');
define('IMG_LIVREOR', CHEMIN_IMG . 'img_livreor/');
define('IMG_NEWS', CHEMIN_IMG . 'img_news/');
define('IMG_ERREURS', CHEMIN_IMG . 'img_erreurs/');
define('IMG_TELECHARGER', CHEMIN_IMG . 'img_telecharger/');


/*************************************** Séparateurs *******************************************/

define('SEPARATEUR_TITRE', ' _ ');
define('SEPARATEUR_FICHIER', '_');

/*********************************** Extensions de fichier *************************************/

// Pas franchement utile...
//define('EXTENSION_PHP', '.php'); 

/********************************** Activation des modules *************************************/

define('LIVREOR', TRUE);
define('NEWS', TRUE);
define('CONTACT', TRUE);
define('ESPACE_MEMBRE', TRUE);

/********************************** Inclusion des pages d'erreurs ******************************/

// Projet en réfléxion

/********************************** Les téléchargements ****************************************/

// Les final fantasy

define('TELECHARGER_FF1', CHEMIN_TELECHARGER . 'jeux_video/ff/ff1/');
define('TELECHARGER_FF2', CHEMIN_TELECHARGER . 'jeux_video/ff/ff3/');
define('TELECHARGER_FF3', CHEMIN_TELECHARGER . 'jeux_video/ff/ff3/');
define('TELECHARGER_FF4', CHEMIN_TELECHARGER . 'jeux_video/ff/ff4/');
define('TELECHARGER_FF5', CHEMIN_TELECHARGER . 'jeux_video/ff/ff5/');
define('TELECHARGER_FF6', CHEMIN_TELECHARGER . 'jeux_video/ff/ff6/');
define('TELECHARGER_FF7', CHEMIN_TELECHARGER . 'jeux_video/ff/ff7/');
define('TELECHARGER_FF8', CHEMIN_TELECHARGER . 'jeux_video/ff/ff8/');
define('TELECHARGER_FF9', CHEMIN_TELECHARGER . 'jeux_video/ff/ff9/');
define('TELECHARGER_FF10', CHEMIN_TELECHARGER . 'jeux_video/ff/ff10/');
define('TELECHARGER_FF10_2', CHEMIN_TELECHARGER . 'jeux_video/ff/ff10_2/');
define('TELECHARGER_FF11', CHEMIN_TELECHARGER . 'jeux_video/ff/ff11/');
define('TELECHARGER_FF12', CHEMIN_TELECHARGER . 'jeux_video/ff/ff12/');
define('TELECHARGER_FF13', CHEMIN_TELECHARGER . 'jeux_video/ff/ff3/');
define('TELECHARGER_FFCC', CHEMIN_TELECHARGER . 'jeux_video/ff/ffcc/');
    define('TELECHARGER_FFCC_EOT', CHEMIN_TELECHARGER . 'jeux_video/ff/ffcc/eot/');
    define('TELECHARGER_FFCC_ROF', CHEMIN_TELECHARGER . 'jeux_video/ff/ffcc/rof');

// Les autres rpg

define('TELECHARGER_ZELDA', CHEMIN_RPG . 'zelda/');
define('TELECHARGER_ZELDA_TP', CHEMIN_RPG . 'zelda/TP/');
define('TELECHARGER_GRANDIA', CHEMIN_RPG . 'grandia/');
    
// RPG Maker
    
define
('TELECHARGER_RMXP', CHEMIN_MAKING . 'rpg_maker_xp/');
define('TELECHARGER_RMVX', CHEMIN_MAKING . 'rpg_maker_vx/');

// L'émulation

define('TELECHARGER_NEOGEO', CHEMIN_EMULATION . 'neogeo/');
define('TELECHARGER_SNES', CHEMIN_EMULATION . 'snes/');
define('TELECHARGER_GBA', CHEMIN_EMULATION . 'gba/');

/******************** Activation et désactivation de chaque section du site **********************/

// Les final fantasy

define('ACTIVE_FF1', TRUE);
define('ACTIVE_FF2', TRUE);
define('ACTIVE_FF3', TRUE);
define('ACTIVE_FF4', TRUE);
define('ACTIVE_FF5', TRUE);
define('ACTIVE_FF6', TRUE);
define('ACTIVE_FF7', TRUE);
define('ACTIVE_FF8', TRUE);
define('ACTIVE_FF9', TRUE);
define('ACTIVE_FF10', TRUE);
define('ACTIVE_FF10_2', TRUE);
define('ACTIVE_FF11', TRUE);
define('ACTIVE_FF12', TRUE);
define('ACTIVE_FF13', TRUE);
define('ACTIVE_FFCC', TRUE);
    define('ACTIVE_FFCC_EOT', TRUE);
    define('ACTIVE_FFCC_ROF', TRUE);

// Les autres rpg

define('ACTIVE_ZELDA', TRUE);
define('ACTIVE_ZELDA_TP', TRUE);
define('ACTIVE_GRANDIA', TRUE);

// Les RPG Maker

define('ACTIVE_RMXP', TRUE);
define('ACTIVE_RMVX', TRUE);
    
// Les systèmes

define('ACTIVE_LIVREOR', TRUE);
define('ACTIVE_CONTACT', TRUE);
define('ACTIVE_NEWS', TRUE);
define('ACTIVE_NAVIGATION', TRUE);

?>


On peut voir que j'ai même été jusqu'à définir des constantes pour le nombre de news à afficher sur la page d'accueil, le nombre de commentaire par page dans les news ou encore le nombre de message par page dans le livre d'or ! Tout est contrôlable à partir de ce petit fichier, c'est un véritable centre de contrôle, et je ne compte pas m'arrêter là dans la déclaration de constante !
L'important n'est pas de connaître mais de savoir trouver !
La gentillesse ou la franchise ? Que choisir ?
Vive les otakus !!
Retourner sur le site
Avatar de l’utilisateur
Martial
Administrateur
Administrateur
 
Message(s) : 2520
Inscription : 10 Nov 2006, 23:41
Localisation : Rambouillet
Meilleurs scores: 12

Retour vers News

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)

cron