Comment ça marche 

De l'installation au point d'entrée et comment créer une page en plusieurs langues, nous vous expliquons tout ici.


Installation

L'installation se fait très simplement :

  • Créez autant de répertoires sur votre serveur que d'environnement désirés (si vous souhaitez avoir une version de développement, une version de test, une version de production...).
  • Vos noms de répertoires doivent être de la forme
    • /dev.website.ext pour la version de développement.
    • /test.website.ext pour la version de test.
    • /website.ext pour la version de production.
    Cette norme de nommage permet au fichier inc.autoconfig.php de déterminer le type d'environnement dans lequel il se trouve et d'adapter en fonction le niveau d'erreur ainsi que certains comportements.
  • Vous pouvez compléter ce fichier si vous souhaitez la prise en charge d'un environnement de recette (par exemple) en plus des trois environnements cités plus haut.
  • Nous vous recommandons de faire pointer les DNS de la manière suivante
    • dev.myWebsite.ext vers votre répertoire de développement.
    • dev-admin.myWebsite.ext vers votre répertoire de développement.
    • test.myWebsite.ext vers votre répertoire de test.
    • test-admin.myWebsite.ext vers votre répertoire de test.
    • myWebsite.ext vers votre répertoire de production.
    • admin.myWebsite.ext vers votre répertoire de production.
    Ceci-dit, vous pouvez nommer vos sous domaines comme vous le souhaitez sauf pour le backoffice dont le sous domaine le plus bas doit comporter la chaîne "admin", indifféremment de l'environnement (comme dans les exemples ci dessus).
  • Préparez un minimum la configuration (fichier /Core/data/minim.conf.xml) en renseignant les nœuds :
    • DOMAIN_NAME : le nom de domaine.
    • SITE_URL_PROD : l'URL du front en PROD.
    • SITE_URL_DEV : l'URL du front en DEV.
    • ADMIN_URL_PROD : l'URL du backoffice en PROD.
    • ADMIN_URL_DEV : l'URL du backoffice en DEV.
    • ERROR_MAIL : l'adresse email pour les erreurs.
  • Depuis le backoffice, lancez une régénération du cache (avec les css qui ne fonctionnent pas, oui) et tout devrait commencer à fonctionner.
  • Alimentez ces deux répertoire ensuite avec vos dernières évolutions.

L'arborescence

Comme vous pouvez le constater dans l'arborescence en illustration, il n'y a qu'un index.php à la racine du site, il s'agit bien du point d'entrée.

L'index, comme vous allez le découvrir plus tard, va amorcer minim et lui transmettre toutes les informations nécessaires pour enfin renvoyer ce qu'on lui demande.

Pour se faire, il convient de paramétrer le serveur hôte de manière à ce que toutes les requêtes, ou presque, soient redirigées vers cet index.

Un exemple vous est donné plus bas pour les serveurs Apache.


L'arborescence II (le retour)

Comprendre toute l'arborescence est important pour expliquer la suite.

Nous parlons ici de l'arborescence du "noyau".

Détails

  • _backups : stock les versions des pages mises à jour via le backoffice.
  • _sessions : stock les fichiers de session.
  • _updates : stock les mises à jour de l'application (pas encore au point).
  • cache : stock les fichiers de cache.
  • data : stock les données comme les fichiers de configuration mais pas que.
  • drafts : stock les brouillons des pages modifiées.
  • inc : stock les fichiers à inclure (y'en a que 2 mais ils sont super importants).
  • lib : stock toutes les classes et les interfaces PHP (de manière plutôt bien rangé).
  • locales : stock tous les fichiers de traduction (un répertoire par langue, sans racisme et sans haine).
  • logs : stock les fichiers de log PHP (bein y'a des bugs, donc voila).
  • modules : stock les modules installés (et les bugs qui vont avec).
  • tpl : stock les templates (hors module, sauf pour les templates des pages statiques.).

Rediriger les requêtes HTTP(S) vers l'index

Cette étape est indispensable au fonctionnement de minim, ici un exemple pour le serveur Apache.

Dans cet exemple, le HTTPS est forcé, ce que nous vous recommandons afin que votre site/application ne réponde pas sur le HTTP et le HTTPS, ce qui provoquerai du duplicate content pénalisant votre référencement.

Pensez à exclure de la redirection les fichiers d'image, de son, les polices...


index.php, l'amorce

Peu de lignes pour un site qui peut comporter une quantité infinie de page !

Un premier fichier est inclus, l'autoconfig ; et on en parle juste après.

Ensuite vient le routeur qui va lancer la machine puis un pile de récupération d'exceptions histoire d'alimenter les logs et surtout d’être informé.

Il y a 2 niveaux d'attrapage des exceptions, le premier gère lui-même les envois de mails en cas d'erreur et en tenant compte de l'environnement.

Il suffit de suivre le signal maintenant !


Configuration automatique

Définir le contexte

Tout ne se fait pas tout seul évidemment, mais certaines choses si, et l'idée est de ne pas s'en priver.

Définir dynamiquement les différents chemins vers les différents répertoires de l'application par exemple, le chargement des classes, le comportement à adopter en fonction du contexte (back, front, développement, production...)...

Voilà le rôle du fichier inc.coreAutoConfig.php.

Mais pas que ! Il permet également de :

  • Mettre à plat quelques normes (timezone, encodage).
  • Charger les classes essentielles.
  • Inclure l'autoloader.
  • Définir le gestionnaire d'erreurs.
  • Charger le premier niveau d'outils.
  • Charger la configuration globale et initialiser les constantes nécessaires.
  • Réaliser la connexion avec la base de données (si besoin).
  • Soigner les attaques XSS.
  • Définir la langue par défaut.
  • Définir la page par défaut.

Enfin, il initialise le "starter" de minim que nous allons voir juste après.

Nous vous invitons à lire ce code directement pour bien comprendre l'importance de ce fichier et ce qu'il apporte.

Les classes essentielles à charger

Le système a besoin de certaines classes pour fonctionner.

Dans l'ordre :

  • inc.coreFunctions.php.
  • class.GenericException.php.
  • package.exceptions.errors.php.
  • package.Session.php.
  • class.RoutesConf.php.
  • class.PagesConf.php.
  • class.UserRequest.php.
  • class.SimpleXmlMgr.php.
  • class.Config.php.

Vous n'avez rien à faire si vous n'avez pas fait n'importe quoi dans ce fichier et que vous avez bien gardé tout ce qu'il faut dans le répertoire "Core".

Et la base de données ?

Pour le fonctionnement de minim, aucune base de données n'est requise. Cependant, vous pouvez très bien en avoir besoin d'une pour le développement d'un module.

Pas de panique, c'est prévu.

Il vous suffit de renseigner dans le fichier de configuration minim.conf les nœuds suivants :

  • SYS_DB_NEED : 3 valeurs sont possible ici, à savoir :
    • YES : la connexion à la base de données se fera pour le front et le back.
    • BACK : la connexion à la base de données se fera uniquement pour le front.
    • FRONT : la connexion à la base de données se fera uniquement pour le back.
  • SYS_DB_DEV_DATABASE : nom de la base de données de développement.
  • SYS_DB_PROD_DATABASE : nom de la base de données de production.
  • SYS_DB_HOST : URL du serveur de votre base de données.
  • SYS_DB_USER : utilisateur de la base de données.
  • SYS_DB_PWD : mot de passe de l'utilisateur de la base de données.

Il vous suffit ensuite de récupérer votre objet PDO quand vous en avez besoin avec un simple

$oPdo = SPDO::getInstance();

Le starter

Starter::start($_SERVER, $_GET, $_POST, $_FILES, $_COOKIE);

Ici s'initialise la classe UserRequest, permettant de retrouver à tout moment dans le code la page demandée, la langue en cours, les arguments fournis dans l'URL, etc.

Détails

  • C'est ici que le mode "maintenance" sera activé si défini en configuration.
  • C'est ici que le mode "prévisualisation" des brouillons va s'activer si c'est ce que l'on demande.
  • Initialisation de la classe UserRequest
  • Initialisation de la session
  • Initialisation de la classe de gestion des langues

C'est à la fois le démarreur du système et le barrage filtrant.


Le routeur

Tout est prêt, on envoie la sauce : $oRouter->checkRequest();

Détails

  • C'est ici que l'application basculera en front ou backoffice.
  • Si c'est le backoffice, redirection automatique vers la page d'identification.
  • C'est ici que va être vérifié et lancé si besoin la route correspondante à la page demandée.
  • Tout est fait dans cette classe pour donner la réponse la mieux adaptée.

Cette classe est le rond-point incontournable du système.

Vous trouverez plus d'informations sur le routage dans la section portant le même nom de cette documentation.

Le mieux pour tout bien comprendre reste de mettre le nez dans le code et de suivre les différents déroulements possibles, cette partie n'étant pas spécialement vouée à évoluer, sauf pour des améliorations, de sécurité notamment.


La vue et les pages.

La gestion des vues se fait dans la classe class.view.php.

C'est ici que l'on va stocker dans un SplObjectStorage les méthodes des classes de placeholders sur lesquels nous reviendront dans la section suivante.

Comme vous pouvez le voir dans l'extrait en complément, les partie dynamiques de la vue sont représentés par des placeholders du type {__METATAGS__}, comme pour les traductions dans les templates, ou {##SITE_URL##} pour le remplacement de certaines valeurs par le moteur de template.

Chaque placeholder correspond à une méthode qui sera appelée à la volée pour mettre en place le bon contenu (méthode buildView($sViewPath)).

Le contenu de la page viendra se placer en lieu et place du tag {__CONTENT__} de la vue.


Les placeholders

La classe class.Placeholders.php embarque toutes les méthodes de base pour construire la vue.

  • getLang() : Renvoie la langue en cours.
  • getMetaTags() : Renvoie les métadonnées de la page demandée.
  • getCss() : Renvoie les appels css.
  • getDev_Banner() : Place une bannière en haut de la page pour indiquer que l'on est en version de développement (si c'est le cas bien sûr).
  • getLogin_Value() : Renvoie le login.
  • getFlags() : Place les drapeaux permettant de changer de langue.
  • getMenu() : Place le menu.
  • getContent() : Renvoie le contenu de la page désirée.
  • getSocial_networks() : Renvoie les boutons des réseaux sociaux.
  • getJs() : Renvoie les appels js.
  • getCookies_Consent() : Place le message pour les cookies.
  • getMinim_Version() : Renvoie la version courante de minim.

Vous pouvez rajouter vos propres méthodes dans des classes du type class.myModulePlaceholders.php.


Le moteur de template

La classe class.TplMgr.php embarque les méthodes de base pour gérer les templates et les traductions (en équipe avec la classe class.Lang.php).

Elle permet en plus de gérer la mise en place des traductions d'assurer le remplacement de certaines valeurs, autant dans la vue que dans la page demandée.

  • {##WEB_PATH##} : L'URL du projet avec un "/" à la fin.
  • {##SITE_URL##} : L'URL du projet sans "/" à la fin.
  • {##FRONT_URL##} : L'URL du front du projet (tient compte de l'environnement, développement ou production).
  • {##STATIC_SERVER_URL##} : L'URL du serveur statique du projet (tient compte de l'environnement, développement ou production).
  • {##EMAIL_CONTACT##} : L'email à utiliser pour les notifications d'erreur.
  • {##LANG##} : La langue en cours.
  • {##PAGE##} : La page en cours.
  • {##APP_TOKEN##} : Le token de l'application.
  • {##DOMAIN_NAME##} : Le nom de domaine.
  • {##YEAR##} : L'année en cours.

La plupart de ces informations sont récupérées directement dans la configuration.


Organisation des templates

Les templates sont regroupés par type et par "face", soit back ou front.

Suivant le type de template, il portera le nom de la page qu'il représente ou de la partie de la fonction à laquelle il sert.

  • admin : tout ce qui va concerner le backoffice
    • content : les pages en elles-même.
    • parts : les templates propres à des parties de contenu.
    • view : les vues utilisables.
  • contents : les pages en elles-même.
  • core : les templates propres au cœur du système.
  • inc : les templates des inclusions (le template des métadonnées par exemple).
  • parts : les templates propres à des parties de contenu.
  • socialNetwork : les templates propres aux réseaux sociaux.
  • view : les vues utilisables

Métadonnées du framework

minim génère quelques métadonnées pour son fonctionnement et sa sécurité.

  • app_token
  • app_current_page
  • app_lang
  • app_lang_available