Et une extension d'autoloader tierce.... une !

Après quelques questions et suite au T3DD14, Tim Lochmüller s'est décidé à publier son extension "autoloader", permettant le chargement automatique des composants Extbase dans des extensions tierces :  "pour avoir plus de temps pour un café en bonne compagnie" :-)

Voici comment les composantes de l'extension :

Structure

L'autoloader est une API simple utilisable dans une extension tierce pour charger automatiquement et à la demande certaines configurations au travers des contextes "ext_localconf" et/ou "ext_tables". Pour utiliser l'API dans les fichiers "EXT_*", il est nécessaire d'insérer les lignes suivantes :

Dans ext_localconf.php
\ HDNet \ Autoloader \ Loader :: extLocalconf ( 'VENDOR NAME' , 'extension_key' ) ; / /

Dans ext_tables.php
\ HDNet \ Autoloader \ Loader :: extTables ( 'VENDOR NAME' , 'extension_key' ) ;

L'autoloader fait appel à une série de "chargeurs". Pour les faire fonctionner, examinez les différents dossiers ou structures et chargez-les selon les configurations précédentes. De plus, les chargeurs sont divisés en blocs "cachables" et leur registre nous permet de déterminer quelle procédure de chargement les fichiers utilisent (Reflection, folders readout). Cela permet de réduire les temps de chargement au deuxième clic.

Chargeur (loader)

Voyons maintenant le chargeur central et ce qu'il fait. Pour TOUS les exemples la modification des fichiers de l'extension tierce (EXT_*) n'est pas nécessaire : 

Command Controller

Les "Command controllers" sont automatiquement déclarés dés que "/ Classes / Command est dans le dossier

Content Objects

Les "Content Objects" sont des objets intelligents (voir ci-après) et sont stockés dans le dossier "Classes / Domain / Model / content /". Les "Content objects" étendent "tt_content" mais peuvent aussi modifier des champs existants. Un éléments de contenu normal sous TYPO3 est déclaré pour chaque objet de contenu. Il est alors interprété par le contrôleur central et charge alors le "template" dans "Resources / Private / Templates / Content /" (même nom que le modèle).

Il passe alors le modèle et la ligne complète à l'élément de contenu.Pour faire court, cela signifie que quel le modèle et le template sont nécessaires pour construire un élément de contenu standard basé sur tt_content.

Flex Forms

Les "Flex Forms" sont chargés depuis "Configuration / Flex Forms /" et liés aux plugins. C'est possible grâce à leur nom. S'il existe un FlexForm "PluginA.xml",  il est automatiquement lié au plugin "PluginA".

Hooks

Les "Hooks" sont chargés dans "Classes / Hooks". A cet endroit, toutes les classes sont disponibles au travers d'une annotation "hook @", qui peut être, soit, une classe, soit une méthode (selon les modalités d'intégration de la cible et de la portée du "hook"). Cette annotation : "@ hook TYPO3_CONF_VARS | SC_OPTIONS | recordlist/mod1/index.php | drawFooterHook" permet de vérifier à quelle classe ou méthode est rattachée l'annotation.

Slots

Les "Slots" sont dans "Classes / slots". Ici les classes sont analysées et recherchées à partir de "@ class signal" et "signal @ name". Si ces commentaires/annotations sont trouvées, la méthode affectée est combinées avec le signal et ouvre le "slot".

Smart Objects

Les "Smart Objects" fournissent les bases pour les objets de contenus et aident à développer des modèles plus rapidement (stockés en couche de persistance).L'annotation centrale est "@ db". Lorsqu'un "@ db" est trouvé dans un modèle, le "smart object" les éléments en base de donnée sont crées en conséquence (selon les propriétés de l'objet).

Lorsqu'un "@ db" est trouvé dans une propriété, le type de données est déterminée selon le type de variable, afin que la requête SQL "CREATE TABLE" soit complète.

StaticTyposcript

Tous les paramètres de "setup" et les "constants" sont externalisés dans des fichiers texte, que l'on trouve dans : "Configuration / TypoScript" et sont chargés comme "static extension TypoScript". La recherche des éléments TypoScript est récursive pour permettre d'utiliser des sous-dossiers. La découverte des sous dossiers est automatique, grâce au chargeur :"TcaFiles".
Il parse les "smart objects" et génère le fichier TCA (même si cela n'est pas encore pleinement utile).

Xclass

Aprés la recherche des Xclasses (attention,il s'agit bien du nouveau système d'XClass :  TYPO3_CONF_VARS/SYS/Objects et non de l'ancien)  dans le dossier "Classes / xclass", les classes trouvées sont enregistrées et déclarées. Ce qui permet de stocker une classe dans le bon dossier et d'hériter de l'extension de classe automatiquement.

Et après ?

Cette extension vient d'être livrée sur le TER. Comme vous pouvez le voir, il s'agit (encore) d'une nouvelle façon de construire rapidement et facilement des objets de contenu - mais selon un mode opératoire plus technique. Dans l'extension, sous : Resources / Private / Examples; vous trouverez différents exemples. N'hésitez pas à faire part de vos retours à Tim en passant par les liens ci-dessous (forge).