Archive

Articles taggués ‘template’

PHP : Le grand test

Crédits : photo-libre.fr

Crédits : photo-libre.fr

Houa, ce titre fait vraiment très racoleur, on se croirait presque sur France2 avec des tas d’invités-stars !

Bref. Vous êtes un particulier, une petite entreprise ou une société de services. Vous avez créé un site web en PHP. Il est super, il répond au besoin, il y a des tas de gens qui viennent dessus, tout le monde l’aime, tout le monde vous trouve génial, bref, c’est un succès.

Mais votre site PHP est-il bien fait ? Est-il vraiment robuste ? Est-il évolutif ? Est-ce que quelqu’un d’autre peut le maintenir sans tomber malade, sans sombrer dans une grave dépression ? Pour le savoir, positionnez votre site en le faisant rentrer dans une des catégories suivantes…

Niveau 0 : Néant

« Pas de PHP chez moi ! »

Résumé :

Votre site reste simple. Il n’y a pas besoin de dynamiser le contenu. Vous êtes manifestement seul à le mettre à jour ; vous connaissez bien le HTML, donc vous ne rencontrez aucun problème particulier. Il y a certes des redondances, des copier-coller ici et là pour uniformiser la charte, mais cela ne vous dérange pas outre mesure.

Résultat :

Si vous n’avez pas besoin de plus, restez dans cet état ! Vous avez le mérite de maîtriser tous les mécanismes de votre site, sans recourir à un CMS qui serait disproportionné par rapport à vos besoins.

Organisation type :

+ www/
  - index.html
  - menu.html
  - article.html

Niveau 1 : Scripts dispersés

« Je suis un débutant un peu perdu »

Résumé :

Votre site a commencé au niveau 0. Mais à partir d’un moment, par je ne sais quelle folie, vous avez voulu rajouter quelques fantaisies, comme afficher la date du jour, ou compter le nombre de visiteurs. Certes, cela donne immédiatement une classe folle à votre site, mais attention : vous venez de rentrer dans l’engrenage sans fin d’un site en PHP !

Vous avez tout d’abord inséré en plein milieu de votre code HTML des petits bouts de code trouvés de-ci, de-là lors de vos pérégrinations sur l’Internet. Puis vous avez commencé à apprendre la syntaxe de PHP, sans trop vous préoccuper de futilités comme le typage, l’indentation, les commentaires, MVC, la POO, etc. Vous avez rajouté vos propres morceaux de code, pour par exemple permettre aux visiteurs de s’inscrire, de laisser des commentaires ou de participer au contenu.

Résultat :

Votre site est un sacré bazar. Il a pris plus d’ampleur que ce que vous n’aviez prévu au début, et maintenant vous avez sur les bras tout plein de bouts de ficelles raccordés les uns aux autres. D’ailleurs, vous avez laissé tomber et votre site est à l’abandon.

Organisation type :

+ www/
  - index.php
  - script_kikoo_by_PHPCS.php
  - menu.php3
  - article.php4

Niveau 2 : Scripts factorisés

« Je suis un amateur, mais avisé »

Résumé :

Dégoûté par votre expérience du niveau 1, vous avez décidé de faire un brin de refactoring, en rassemblant toutes vos précédentes petites horreurs en un seul endroit. Organisées en fonctions distinctes, vous venez de créer une vraie petite bibliothèque de fonctions !

Désormais, vous avez un gros fichier avec une nom très cool, comme « fonctions.php », qui contient tous vos traitements PHP. Du coup, vos pages HTML se contentent d’appeler les fonctions qui leur plaisent, et c’est tout de suite plus lisible. En plus, cela vous a permis de factoriser un peu certaines redondances, comme les connexions à la base de données.

Résultat :

Vous avez bien rattrapé le coup, votre code redevient à peu près maintenable. En revanche, votre fichier faisant office de bibliothèque devient de plus en plus long. Mais cela ne vous perturbe pas, vous avez le dernier éditeur à la mode qui permet de « collapser » les fonctions à volonté !

Organisation type :

+ www/
  - index.php
  - menu.php
  - article.php
  - fonctions.php

Niveau 3 : Mi-script, mi-objet

« Je suis un gros cool avec mon PHP et mes objets partout »

Résumé :

Très satisfait des progrès apportés par votre passage au niveau 2, vous avez décidé de ne pas vous arrêter en si bon chemin. D’ailleurs, vous venez de lire sur un site quelconque plutôt mauvais que la programmation orientée objet, c’est ou’achement bien. Il paraît que cet oiseau là il permet de faire du code clair, structuré, réutilisable et donc… maintenable ! En plus, c’est la grosse nouveauté de PHP5, alors c’est forcément à la mode !

Ni une, ni deux, vous foncez sur un tutoriel plutôt mauvais pris au hasard, et paf ! Vous devenez expert en POO (même si c’est marqué que non). Vous rajoutez des classes à droite, à gauche, portant des noms qui prouvent que vous avez porté une attention toute particulière à la modélisation : « class PageAccueil {} », « class FonctionsDiverses {} », « class MotDePasse {} ». Par la même occasion, vous avez rempli la racine de votre site avec une multitude de nouveaux fichiers aux noms fumeux, qui contiennent vos classes fraîchement créées.

Résultat :

Vous ne voyez pas l’intérêt de faire de l’objet par rapport à votre bonne vieille bibliothèque. Vous êtes bien embêté car vous avez l’impression que quelque chose ne va pas, que quelque chose cloche dans votre « architecture », bref, que tout ça n’est pas très logique. En plus, vous vous retrouvez avec pleins de fichiers. Votre code est redevenu immaintenable.

Organisation type :

+ www/
  - index.php
  - PageAccueil.php
  - mot_de_passe.class.php
  - fonctionsDiverses.php
  - article.php
  - menu.php

Niveau 4 : Objet

« Les objets, c’est mon dada »

Résumé :

Après plusieurs périodes de dépression impliquées par votre passage par le niveau 3, vous avez décidé d’apprendre la programmation orientée objet autrement qu’en lisant simplement la syntaxe d’une classe en PHP. Vous avez alors découvert de nouveaux horizons, et vous rigolez bien en lisant votre code de niveau 3 : « Haha, comment j’étais un gros naze ».

Typiquement, vous êtes un étudiant qui a appris le Java ou le C++ en cours, et vous vous êtes acheté un livre sur le PHP, parce-qu’à après tout, tout cela se ressemble drôlement.

Vous avez donc entièrement ré-écrit votre code PHP. Vous avez désormais des classes qui représent quelque chose de concret : « class Utilisateur {} », « class BaseDeDonnees {} », « class Article {} » etc. Comble du luxe, vous avez même fait du polymorphisme, avec des tas d’héritages, de surcharges et de redéfinitions. Vous avez rassemblé tout ça dans un répertoire « class » pour faire plus propre.

Résultat :

Votre code ressemble de nouveau à quelque chose. Vous êtes satisfait de votre modèle objet ; il est clair, logique et bien commenté. Toutes mes félicitations.

Organisation type :

+ www/
  - index.php
  - menu.php
  + class/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  - article.php

Niveau 5 : Modèle, Vue et Contrôleur

« Du HTML dans du PHP, ou du PHP dans du HTML ? »

Résumé :

Maintenant que vous avez passé le niveau 4 et que votre modèle objet est sans défauts, vous jetez un oeil du côté de votre code HTML. Et là, vous vous posez une question existentielle : « Pourquoi c’est illisible ? ». En effet, vous voyez des tas de if/else, de boucles, d’appels de méthodes, de créations d’objets éparpillés au milieu de balises HTML. À d’autres endroits, c’est l’inverse : des tas d’ »echo » qui génèrent du code HTML, ce qui rend la structure de la présentation parfaitement incompréhensible.

Alors, qu’est-ce qu’il faut faire ? Du PHP dans du HTML, ou du HTML dans du PHP ? Et bien je vais vous le dire : du PHP dans du HTML. Sinon, il est inutile de faire du PHP, n’importe quel langage avec CGI serait beaucoup plus adapté. L’avantage de PHP étant en effet de pouvoir s’intégrer directement dans le code source d’une page web. Les « echo(« <h1>Coin coin</h1> ») » sont donc à bannir ! Bien sûr, il est quand même nécessaire pour la lisibilité de minimiser les appels PHP dans votre page web, en créant un maximum de classes/méthodes dans des fichiers à part.

Par exemple, tous les traitements qui suivent la validation d’un formulaires sont beaucoup mieux en dehors du fichier de la page HTML. De même, toutes les variables calculées utilisées dans la page seront aussi bien dans un fichier PHP à part, qui affichera ensuite la page HTML en lui passant les variables en paramètre (par exemple).

Résultat :

Bravo ! Sans vous en rendre compte, vous avez appliqué la structure MVC à votre site ! Votre modèle objet est bien séparé de votre vue HTML, elle-même séparée des différents traitements de contrôle.

Organisation type :

+ www/
  - index.php
  + modele/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  + vue/
    - article.php
    - menu.php
    - edition.php
  + controleur/
    - article.ctrl.php
    - menu.ctrl.php
    - identification.ctrl.php

Niveau 6 : Collaboratif

« Je me sens un peu seul »

Résumé :

Maintenant que vous avez séparé le modèle de la vue du contrôleur (!), il devient assez simple pour n’importe qui de venir vous aider. On peut très bêtement imaginer trois personnes travaillant sur votre site : la première se charge du modèle, la deuxième du contrôleur et la troisième de la vue.

Et bien en fait, cela ne marche pas. Le modèle n’est pas amené à beaucoup changer, donc il y aura deux personnes sur le contrôleur. Et quand les interfaces seront terminées, il y aura trois personnes travaillant possiblement sur le même fichier. Soit vous jouez à celui qui enregistrera le fichier en dernier, soit vous utilisez un VCS pas trop mal bien que discutable. Vous optez pour la deuxième solution, et tout devient plus simple : vous pouvez tous envoyer allègrement vos modifications sans craindre des conflits insolubles, revenir à une ancienne version, faire des développements parallèles, visualiser l’historique des modifications et plein d’autres choses encore.

Par la même occasion, vous utilisez un « bugtracker » pour permettre aux utilisateurs de remonter les problèmes, pour vous répartir les tâches à faire et pour en discutailler joyeusement (au lieu de travailler).

Résultat :

C’est bien. Vous êtes plusieurs, vous allez plus vite.

Organisation type :

+ trunk/
  + modele/
  + vue/
  + controleur/
+ branches/
+ tags/

Niveau 7 : Templates

« Les <?php … ?> c’est rigolo 5 minutes »

Résumé :

Vous avez admiré votre strucutre MVC pendant des semaines durant, et maintenant vous êtes un peu lassé. Vous voulez aller plus loin. D’ailleurs, vous trouvez que votre code HTML n’est pas encore assez séparé du code PHP, et que certaines parties de votre contrôleur (celles qui appellent les pages HTML), pourraient être automatisées. En fait, vous voudriez que votre code HTML ne soit plus qu’un squelette, un gabarit… bref : un template. Et parfois même, vous vous surprenez à rêver d’un système de cache qui accélèrerait l’affichage de vos pages pour vos visiteurs.

Il vous faut donc un moteur de template ! Vous en prenez un au hasard, lisez un minimum de documentation et paf ! C’est fini. Puisque vous aviez déjà séparé au maximum le PHP du HTML, en réduisant le PHP dans le HTML à de simples appels de fonctions, la transition a été immédiate.

Résultat :

Votre code a tout de suite une allure beaucoup plus scintillante. Et désormais, n’importe quel designer pourra relooker vos pages sans avoir à se soucier une seule seconde de votre code PHP !

Organisation type :

+ www/
  - index.php
  + modele/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  + smarty/
  + vue/
    - article.tpl
    - menu.tpl
    - edition.tpl
  + controleur/
    - article.ctrl.php
    - menu.ctrl.php
    - identification.ctrl.php

Niveau 8 : Framework

« Marre de réinventer la roue (carrée) »

Résumé :

Voilà maintenant longtemps que votre site est en ligne. Au fur et à mesure de vos développements, vous vous êtes aperçu que certaines parties auraient pu être générées, car elles sont en fait très classiques. Par exemple : vos classes de gestion des utilisateurs, des identifications, etc. et les requêtes à la base de données correspondantes.

Par ailleurs, vous aimeriez être guidé pour vos développements futurs afin de mettre en place les « best-practices » qui ont fait leur preuves, et non plus vos propres conventions que vous seul connaissez.

Vous décidez donc d’utiliser un framework rien chouette ! En trois coups de cuillère à pot, vous indiquez via yaml, xml ou autre le modèle de votre architecture, et le bazar vous génère tout comme un grand ! Il ne vous reste plus qu’à compléter avec vos morceaux de codes spécifiques, la plupart des traitements étant déjà implémentés pour vous. De plus, le framework vous propose des tas de facilités, comme des appels Ajax simplifiés. La classe américaine quoi.

Résultat :

Votre code est devenu terriblement agréable à lire. Le framework vous a forcé à faire les choses de la meilleure façon, la plupart des traitements complexes sont cachés, la structure est claire et compréhensible.

Organisation type :

+ www/
  + sf_sandbox/
    + apps/
      + frontend/
    + cache/
    + config/
    + data/
    + doc/
    + lib/
    + log/
    + plugins/
    + test/
    + web/
      + css/
      + images/
      + js/

(Qui a dit que j’ai tout lâchement copié/collé ?)

Niveau 9 : Utilisateur

« C’est déjà fait et c’est mieux »

Résumé :

Vous venez de découvrir qu’un système déjà tout prêt fait exactement la même chose que votre site. Mais en mieux. Et en plus joli. Et en moins buggé. Du coup, vous téléchargez (ou achetez ?) le CMS/Blog/Wiki/ERP qui fait ce dont vous avez besoin. Comble du luxe, vous pouvez y adjoindre des modules pour qu’il fasse des choses auxquelles vous n’auriez jamais pensé.

Résultat :

C’est l’idéal : vous n’avez plus de code à maintenir ! Vous utilisez le logiciel en tant qu’utilisateur, comme une boîte noire. Vous n’avez plus à vous souciez de rien, sauf de votre contenu. Vous gagnez en tout, et surtout en temps.

Organisation type :

+ www
  - wordpress

(Oui, je me foule de moins en moins).

Niveau 10 : Logiciel Libre

« Je suis libre d’utiliser, d’étudier, de modifier et de redistribuer »

Résumé :

Le logiciel que vous avez choisi au niveau 9 est libre. Joie ! Quand certaines fonctionnalités manquent pour votre site, vous pouvez les ajouter, et même en faire profiter la communauté !

Mieux : c’est votre logiciel (celui qui date du niveau 0 et que vous avez rendu open-source), que les gens utilisent, étudient, modifient et redistribuent ! Vous êtes devenu une sorte de guru du logiciel libre. Félicitations.

Résultat :

Vous avez tout compris, vous êtes trop fort. Vous êtes l’avenir de l’informatique.

Organisation type :

(Heu, ça dépend)

Et voilà

Comme dirait l’instructeur de tir : « Au résultat ! »