Dotclear › DotclearNx

12/05/2022

Dotclear Nx - Késako

Mais pourquoi donc réinventé la roue ! dotclear fonctionne très bien aujourd'hui, il est bien écrit, rapide et est solide.

Tout simplement parce que j'aime m'amuser, j'aime tout cassé. Et puis les dernières versions de PHP apportent pas mal de changements à la fois sympa et … incompatibles. Avec le temps dotclear va devenir de plus en plus difficile à maintenir et le code ne sera plus du tout lisible par les petits jeunes qui arrivent. Et puis se demander à quoi pourrait ressembler le futur si on fait sauter les barrières de rétro compatibilité, ça peut-être intéressant de tester de nouvelles pistes, quitte à tout casser. Bien entendu, je baigne dans l'environnement dotclear depuis des années donc je garde en tête la vision de se moteur de blogs et j'essaie d'y rester attacher. Je remercie ici au passage le grand patron qui est toujours à l'écoute et sait me conseiller quand j'hésite ou je patauge.

Pourquoi dotclear Nx ? Parce que je suis fainéant. Le N pour namespace qui j'écris toujours en dyslexie, et le X parce que ce n'est (et sera peut-être) pas une version de dotclear !

C'est quoi le but ?

Bref, techniquement parlant, quelles sont les grandes lignes, les principales idées qui cassent tout de cette branche de dotclear:
  • Tout passer en espace de noms et rendre compatible avec des outils moderne tel que composer (même si ça ne sert pas à grand chose avec dotclear qui n'a besoin de personne pour tourner !),
  • Améliorer la gestion des plugins et thèmes avec du multi répertoire, par plateforme, par config, par blog ou que sais je,
  • Améliorer la gestion des dates (encore un truc qui casse tout…),
  • Virer tout ce qu'il y a de l'ancien monde PHP: globales, constantes, méthodes magiques, etc., fourre tout. (oui j'y vais un peu fort là),
  • Repérer et simplifier le typage des méthodes,
  • Fourniture des toutes les ressources à travers un gestionnaire (permettant aux dites ressources de se cacher n'importe ou

Y a quoi dedans ?

Petit tour des nouveautés de Dotclear Nx par rapport à dotclear 2
  • Requière PHP 8.1 (va encore monté en version avec le temps)
  • Arborescence en espace de nom
  • Compatible composer, PSR4, PSR12
  • Inclue la librairies clearbricks
  • Fichier de configuration plus complet. (Plus de contante de configuration)
  • Classe Core en singleton, disponible n'importe ou dans le code.
  • Gestion par Process (Admin, Public, Install, etc)
  • Gestion similaire des plugins et theme en Modules (Plugin, Theme), permettant le multi répertoire plus poussé et une écriture de code simplifiée.
  • Gestion standardisé des dates, UTC dans la base et dans la manipulation des dates, fuseaux horaire du blog coté public, fuseaux horaire de l'utilisateur coté admin.

C'est quoi qui est cassé ?

Petit tour de tout ce qui casse la compatibilité directe entre dotclear 2 et Dotclear Nx.
  • Toutes les fonctions, tous les fichiers, toutes les classes sont retravaillées en classe avec une classe par fichier,
  • L'arborescence des répertoires est complètement revu avec un structuration plutôt axée sur le type, la portée, le processus lié à la classe utilisée,
  • La librairie clearbricks a été intégré a dotclear et seul les méthodes utilisées dans dotclear sont restées,
  • La cœur de dotclear souvent nommée $core et fréquemment appelée en globale n'existe plus, il est remplacée par un instance singleton nommée App:core(),
  • Les pages public, admin, install, etc sont devenue des Processus qui cloisonnent ce qui est accessible,
  • Tous les appelles à des globales sont proscrits, le fait que tout passe par des classes ne nécessite plus ce genre d'utilisation,
  • Toutes les constantes sont proscrites, des classes de configuration avec interdiction de réécriture sont disponibles pour ce genre d'utilisation,
  • Les méthodes magiques __get(), _set(), __call() sont proscrites (autant que possible),
  • Une grande majorité des classes statiques sont devenues dynamiques (exceptions faites de sclasses d'outils appelées Helper),
  • La Classe core a été divisé par type et est devenue Core, un conteneur d'instance de sous classes (User, Blog, etc...),
  • La gestions de plugins et des thèmes est regroupé sous une même bannière nommé Modules de type Plugin ou Theme,
  • Toute la gestion de date passe par une unique classe, toutes les dates en base de données sont exprimées en UTC,
Au fil du temps, je ferais des articles pour expliquer certaines choses pour ceux qui veulent comprendre ou même tester cette branche. Même si cette version ne sort jamais elle sera, je l'espère, une mine d'idée pour le futur.

PS: 

J'oublie le principale ! Si vous voulez voir le code de cette branche chez moi:

Haut de page