Mise à jour
Comme promis dans mon dernier billet, je vais présenter un générateur de code basé sur CoCKTaiL, qui accepte du code CoCKTaiL en entrée et génère du PHP pouvant être importé dans Drupal au moyen du module Content-copy de CCK.
Séance au DrupalCon
J'ai soumis une proposition de séance, Taming CCK configurations with CoCKTail, pour le DrupalCon Boston. Si vous aimeriez voir CoCKTaiL gagner en popularité, pensez à la consulter et à voter pour elle.
Code disponible par SVN anonyme
J'ai rendu le code accessible par SVN anonyme dans le dépôt SVN public de Raincity. J'invite toute personne intéressée à y jeter un coup d'œil, à l'essayer et à y contribuer! Mais attention : il s'agit encore d'un code très expérimental.
État d'avancement
La version actuelle du code fournit un validateur en ligne de commande qui vérifie le code CoCKTaiL. Le signalement des erreurs est encore extrêmement rudimentaire. Il y a aussi un générateur de code basé sur des gabarits, qui prend du CoCKTaiL en entrée et génère du code PHP pouvant être importé dans une application Drupal. Les deux sont définis comme des fichiers d'entrée PHP Lemon et partagent, bien sûr, une grammaire (et un analyseur lexical) communs.
Le générateur de code CoCKTaiL peut maintenant générer des champs texte; la prise en charge des autres champs « de base » sera implantée dans les prochains jours. Il y a une certaine prise en charge des liens et des noderefs.
Génération de code à partir de gabarits
Pour écrire un générateur de code qui produit des spécifications d'importation CCK (PHP) à partir de code CoCKTaiL, il faudra :
- faire correspondre les attributs fournis aux attributs du type donné (ce qui comprend les attributs de type, de groupe et de champ)
- fournir des valeurs par défaut pour chaque attribut obligatoire qui n'est pas nommé explicitement
Pour ce faire, il faudra connaître les types et les champs CCK ainsi que leurs attributs permis et obligatoires.
Le résultat sera un tableau PHP contenant une spécification de type.
La stratégie : les gabarits
Nous fournirons un gabarit pour tous les attributs par défaut. Les valeurs obtenues en analysant la description CoCKTaiL remplaceront les valeurs du gabarit, si elles ont une valeur appropriée.
Il y aura un gabarit pour chacun des éléments suivants :
- les attributs de type
- les attributs de groupe
- les attributs de champ
Des attributs de champ devront être ajoutés pour chaque nouveau champ, puisque CCK est évidemment extensible.
Quelques détails
Comme l'un des objectifs de CoCKTaiL est de faciliter la vie des développeurs, nous allons un peu plus loin que simplement copier les attributs fournis dans un gabarit. En particulier, le statut de publication, les commentaires et quelques autres attributs couramment utilisés pour les nœuds peuvent être fournis comme attributs scalaires plutôt que comme valeurs de tableau.
Autrement dit, on peut écrire
...
status true;
comment 2;
...
plutôt que
...
node-options array(
status true;
comment 2;
...
);
...
De plus, les gabarits peuvent contenir des stubs (espaces réservés) qui sont remplacés au moment de la génération du code.
Prochaines étapes
Comme je l'ai mentionné, je dois encore créer les gabarits pour les autres champs CCK de base. J'espère ainsi pouvoir valider l'utilité de l'approche par gabarits pour la génération de code.
Voici quelques-uns des grands enjeux qui restent à régler :
- comment gérer les champs partagés
- comment générer automatiquement les relations
- comment gérer les versions
Il semble y avoir beaucoup de défis intéressants à relever. Restez à l'écoute, ou mieux encore, mettez la main à la pâte, et d'ici là, n'oubliez pas de voter pour ma séance.