en | fr | Contact  | Imprimer  | Partager

FrameBeurk documentation

10. Miscellaneous

10.1. Fichier .htaccess

Exemple de fichier .htaccess avec réécriture d’URL, à placer à la racine du site :

SetEnv PHP_VER 5 SetEnv REGISTER_GLOBALS 0 SetEnv MAGIC_QUOTES 0   <IfModule mod_rewrite.c>  RewriteEngine  on RewriteBase /Fmbk/ # exclusions RewriteRule ressources/(.*) - [L] RewriteRule ^index.php(.*) - [L] RewriteRule ^ajax.php(.*) - [L] RewriteRule ^js.php(.*) - [L] RewriteRule ^css.php(.*) - [L] RewriteRule ^rss.php(.*) - [L]   # redirection RewriteRule (.*) interpreteur.php </IfModule>

10.2. Pages perso free.fr

FrameBeurk a été conçu pour pouvoir être utilisé sur les pages perso de free.fr, avec quelques limitations :

  • Les variables d’environnement PHP ne peuvent être fixées dans le fichier .htaccess.
  • Pour bénéficier de la version 5 de php, le fichier .htaccess doit contenir l’instruction « php 1 »
  • Le module rewriteEngine d’Apache n’est pas disponible. La réécriture d’URI ne fonctionnera pas (*) et doit être désactivée dans le fichier config.php.
  • L’interface mysqli n’est pas disponible. La couche de communication appelée dans le bootstrap devra être « mysql_layer.php ».

Le fichier .htaccess ci-dessous est recommandé :

php 1 ErrorDocument 404 /forum2/interpreteur.php

(*) : L’instruction ErrorDocument permet de rediriger les URI non résolues vers l’interpréteur. On pourrait envisager de se servir de ce moyen pour mettre en place la réécriture d’URI. Malheureusement les paramètres envoyés par la méthode POST sont perdus par la redirection 404. Donc la plupart des actions Maj ne fonctionnent pas

10.3. La notion d’URI

L’ « adresse » envoyée au framework en méthode GET ne répond pas à la définition d’une URL (Uniform Ressource Locator) ou d’une URI (Uniform Ressource Identifier), puisqu’elle peut contenir une action de Maj, une alternative (Vue ou Vue Erreur) et mener à des affichages différents. Il faudrait un autre terme plus général pour qualifier les « adresses » utilisées.

A noter que le bloc (2) du schéma sur la réécriture d’URI (chapitre « Fonctionnalités ») correspond à la notion d’URI et que c’est ce bloc (2) qui est renvoyé par le serveur en tant qu’URL canonique de la page.

10.4. Règles d’implémentation

Ce framework est construit en programmation procédurale et dès que c'est possible, en programmation séquentielle, les séquences de code étant rassemblées par des instructions include et require. Tout le code partage le même espace de noms. Voici les règles d’implémentation qui ont été choisies :

  • Les tableaux $CONFIG, $DIALOG et $TRANSAC sont à utiliser pour véhiculer des données entre différents composants, selon la durée de vie de ces données
  • Les paramètres des actions de la requête sont instanciées en variables globales par les contrôleurs Maj et Vue.
  • En dehors des 2 cas précédents, les variables rencontrées dans le code sont des variables temporaires locales qui pourraient (devraient ?) être détruites en fin de fichier .php.
  • Les noms des fonctions PHP commencent par le nom du module avec sa lettre initiale en majuscule, suivi d’un tiret bas. Exemple : Kom1_ajouteMaj(...)
  • Les noms des fonctions Javascript commencent par le nom du module avec sa lettre initiale en minuscule, suivi d’un tiret bas. Exemple : kom1_basculeAffichage(...).

10.5. Génération du code HTML

Ayant exploré plusieurs style d’implémentation pour la sortie (echo) du code HTML, les points suivants me sont apparus :

  • Les instructions php embarquées dans le HTML par <?php echo … ?> diminuent la lisibilité du code dès que leur fréquence augmente
  • Les notations abrégées < ? ou < ?= diminuent la portabilité du code
  • L’usage de moteur de templates n’allège pas tellement la syntaxe du code, nécessite l’apprentissage d’un nouveau langage, rajoute de la complexité dans le code PHP en amont du template, nécessite une étape de compilation du template…
  • L’indentation du code HTML ne « marche » que localement dans le fichier PHP où il est inscrit. Il est très difficile de réaliser une indentation correcte sur l’ensemble d’un fichier HTML généré… ce qui est d’autre part fonctionnellement inutile.

Aussi, je me suis arrêté sur un style de notation discutable mais qui devrait présenter les avantages de la concision et de la plus grande rapidité d’exécution par le moteur PHP. Exemple (sans contexte) :

echo '<div id="', $nomDiv, '" class= "test"> ', $ligne1, '<br /> ', $ligne2, '<br /> </div> ';
  • Les libellés sont placés entre simple-quotes,
  • L’indentation est supprimée du code HTML, et disparait localement du code PHP –l'opérande de l'instruction echo est ancrée à gauche.
  • Les retours à la ligne « \n » ont disparus au profit de véritables sauts-de-ligne présents à l’intérieur même du libellé.
  • Le principe pourrait être exprimé ainsi : 1 ligne dans le code PHP = 1 ligne dans le code HTML

L’utilisation de l’opérateur ternaire est toujours possible dans cette notation, mais la lisibilité s’en trouve diminuée :

echo '<div id="', $nomDiv, '" class= "test"> ',(($cas1 == true) ? ($ligne1 . '<br /> ' . $ligne2 . '<br />') : 'Pas dans le cas 1<br />'), '</div> ';

Cette notation n’est en aucun cas obligatoire pour utiliser FrameBeurk.

10.6. Prospective

Bien entendu ce n’est qu’une version alpha et il reste beaucoup à faire. Dans le court ou moyen terme :

  • Corriger tous les bugs !
  • Supprimer les adhérences encore présentes entre les différents modules. Par exemple la table des Utilisateurs du module Uzers contient une colonne pour stocker le nombre de commentaires créés dans le module Rhum…
  • Gérer l’internationalisation.
  • Apporter la gestion des évènements à l’interface cliente.
  • Externaliser la gestion des avis et des alertes dans le module Kom1. Pouvoir associer des commentaires à d’autres entités que les Sujets.
  • Apporter au module Zeek un modèle de données pour stocker en base mp3, morceaux, albums, auteurs… et une interface pour le gérer.

Dans le long terme, comme le suggère la radiographie cérébrale de Beurky PHP en illustration de cette documentation, je veux donner à ce framework une architecture faisant de chaque site construit avec lui une Intelligence Artificielle, ayant potentiellement un comportement d'agent.


© ToolOscope SASU 2010-2015. © Arnaud De Rette 2016-2018. Tous droits réservés.