Compatibilité PHP

minim n'utilise pas (encore) les nouveaux opérateurs de PHP 7 (entre autres) afin d'assurer la rétro-compatibilité avec PHP 5.3 encore beaucoup utilisé aujourd'hui.

Cependant, aucune fonction dépréciée ou supprimée dans PHP 7 n'est utilisée non plus.

Libre à vous donc de coder vos modules en fonction de la version de PHP dont vous disposez sur votre serveur.

La version actuelle supportée (en production) est la version 7.0.33.

Conventions - normes

Les classes PHP

Plusieurs types de fichiers PHP peuvent être intégrés en respectant ces quelques normes :

  • class.MyClass.php : Vos classes métier ou de gestion de modèle (pris en charge par l'autoloader).
  • svc.MyService.php : Vos services. En effet, minim respecte une structure MVC, tout ce qui concerne les vues doit être appelé via un service (pris en charge par l'autoloader).
  • package.MyPackage.php : permet de regrouper plusieurs classes similaires comme pour la gestion des sessions. Il faut pour les intégrer les inclure dans le fichier inc.coreAutoConfig.php.
  • Toolz_MyTool.php : Vous pouvez ajouter vos classes d'outils dans le répertoire Toolz. Pour les appeler, Toolz_MyTool::myMethod();
  • Attention : Toutes les classes des modules installés doivent être copiées dans /Core/lib/modules/ afin d'être prisent en compte.

Les variables

Afin de faciliter la relecture du code, nous utilisons une convention de nommage des variables assez simple à comprendre.

  • Le nom des variables est en anglais
  • Les variables qui contiennent une valeur de type int commencent par un "i" minuscule.
  • Les variables qui contiennent une valeur de type float commencent par un "f" minuscule.
  • Les variables qui contiennent une valeur de type string commencent par un "s" minuscule.
  • Les variables qui contiennent une valeur de type array commencent par un "a" minuscule.
  • Les variables qui contiennent une valeur de type objet commencent par un "o" minuscule.
  • Les variables qui contiennent une valeur de type ressource commencent par un "r" minuscule.
  • Les variables qui contiennent une valeur de type mixte commencent par un "m" minuscule.

MVC

Cerise sur le gâteau, minim vous propose un système MVC

Modèle-vue-contrôleur ou MVC est un motif d'architecture logicielle destiné aux interfaces graphiques lancé en 1978 et très populaire pour les applications web. Le motif est composé de trois types de modules ayant trois responsabilités différentes : les modèles, les vues et les contrôleurs.

  • Un modèle (Model) contient les données à afficher.
  • Une vue (View) contient la présentation de l'interface graphique.
  • Un contrôleur (Controller) contient la logique concernant les actions effectuées par l'utilisateur.

Source : wikipedia.

Dans minim :

  • Toutes les vues et pages sont dans des templates, certains sont construits à la volée.
  • Les traductions à injecter dans les templates sont rangées par langue dans des fichiers XML.
  • Il convient de créer des classes spécifiques à la gestion des données (CRUD).
  • Au niveau PHP, ce sont les services (svc.MyService.php) qui génèrent les vues.
  • Enfin, les classes de modèle et les classes métiers se nomment class.MyClass.php.

Internationalisation

Comme vous pouvez le voir dans l'arborescence en illustration, les traductions du front se trouvent à la racine, les traductions du backoffice se trouvent dans le dossier admin et enfin les traductions communes dans le répertoire common.

L'organisation est la même dans les modules.

Exemple de traduction :

<?xml version="1.0" encoding="UTF-8"?><translations><TOOLS><[CDATA[Outils]]></TOOLS></translations>

Exemple d'utilisation dans les templates :

<ul><li>{__TOOLS__}</li></ul>

Attention : les fichiers de traductions doivent porter le même nom que le template associé.


Sécurité

Pour la sécurité, nous avons mis en place :

  • Un système d'authentification (backoffice) personnalisable.
  • La possibilité d'une double authentification (backoffice) par email.
  • Un token d'application.
  • Des formulaires sans captcha.

Vous pouvez bien sûr adapter tout cela à vos besoins !


Cache

Le système de cache est apparut naturellement avec l'internationalisation.

Devoir lire le template, le fichier de traduction correspondant en fonction de la langue demandée et générer le html adapté demandait alors beaucoup de travail pouvant être évité.

Le cache a donc été mis en place dans ce sens à la base, puis a été étendu autant que possible, épargnant de fait la charge du serveur hôte.

Come vous pouvez vous en douter, les fichiers de cache du backoffice se trouvent dans le répertoire "admin" et les fichiers de cache du noyau se trouvent dans le répertoire "core".

Dans le cache du noyau, pour l'instant un seul fichier : modulesAvailable.list. Ce fichier contient la liste des modules installés.

Un autre type de cache est à prendre en compte : les classes PHP construites dynamiquement.

En effet, pour la configuration des pages (métas, robots...), une classe abstraite est montée afin de répondre aux questions de configuration des pages le plus rapidement possible sans à avoir à parser un fichier de configuration. Il en est de même pour les routes.


AJAX

En ajoutant la classe CSS ajaxLink à un lien et en précisant la page demandée dans l'attribut "id", vous déclenchez la navigation en AJAX.

Si plusieurs liens doivent cohabiter sur une même page, vous devez ajouter des "_" en préfixe du nom de la page demandée pour éviter d'avoir plusieurs "id" identiques.

Un meilleur solution est en cours d'étude, à savoir utiliser des attributs data-*.


Données

Stockage

L'arborescence de minim a évolué au fil du temps et a été pensée pour être la plus instinctive possible.

Aussi, il ne faut garder dans le répertoire "data" du noyau que les fichiers de données de minim.

Pour stocker des fiches produit, des articles ou autre, il convient d'utiliser le répertoire "data" du modules dont dépendent ces données.

Types de données

On peut distinguer plusieurs types de données :

  • Les fichiers de configuration.
  • Certains fichiers de cache très spécifiques.
  • Certains templates spécifiques (Google analytics par exemple).
  • Les fichiers de version (.version, mais pas encore vraiment utilisés).
  • Des pages en HTML (oui, carrément).

Rapide tour des fichiers présents dans les données de minim :

  • class.PagesConf.php : classe PHP construite à la volée lors des paramétrages depuis le backoffice pour les configurations des pages.
  • class.RoutesConf.php : classe PHP construite à la volée lors des paramétrages depuis le backoffice pour les routes.
  • codeCounter.html : gadget qui stock en cache le nombre de ligne de code par type d'extension.
  • concat_css.xml, css.xml, concat_js.xml, js.xml : fichiers d'inclusions des css et des js.
  • google-analytics.tpl : templates pour google analytics. Il ne se trouve pas dans les templates, puisque sa valeur change d'une application à une autre.
  • minim.conf.xml : configuration globale de minim (backoffice).
  • minim.routes.back.xml : routes utilisées sur le front (backoffice).
  • minim.routes.front.xml : routes utilisées dans le backoffice (backoffice).
  • pagesList.xml : liste des pages de l'application (backoffice).
  • rights.xml : droits des utilisateurs (backoffice).

Il va de soit que si vous ajoutez des fonctionnalités au noyau nécessitant des données variables, ces dernières ont leur place ici.


Plugins

Intégration des plugins

Minim est devenu un framework à force de réutiliser du code qui avait fait ses preuves.

A mesure, la notion de garder un noyau propre et réutilisable à volonté d'un côté et des modules plus spécifiques de l'autre est devenue évidente.

Penser une structure propre pour les modules sans s'appuyer sur le fonctionnement du noyau aurait compliqué la compréhension globale du fonctionnement mais surtout pourquoi réinventer la roue...

Les modules respectent donc à peu près la structure du noyau, avec juste quelques répertoires en moins.

La gestion des modules est native dans minim, ce dernier étant considéré comme un module lui-même.

Choses importantes à savoir pour intégrer un module (et surtout qu'il fonctionne) :

  • Les templates ainsi que les traductions correspondantes (s'il y en a) des pages statiques, et donc non appelées via une route doivent être placées dans les répertoires "tpl" et "locales" du noyau.
  • Les classes PHP doivent être copiées dans le répertoire lib/modules du noyau.
  • Les css et les js doivent être déclarés dans les fichiers concat_css.xml et concat_js.xml présents dans le répertoire "data" du noyau.
  • Il n'y a plus qu'à coder !