Pathauto, ou comment se faire bananer par les traductions...
Pathauto est un module bien pratique permettant de créer automatiquement des alias lisibles par un humain sur les URL internes de Drupal. En terme simples, http://mon_site/node/1234 deviendra par exemple accessible par http://mon_site/le_titre_de_mon_article. Je ne vais pas m'étendre plus avant sur pathauto, le principe de base étant posé et le sujet n'étant clairement pas là.
Le problème de cette automatisation des alias, est que si je change le titre de mon article, l'URL de l'article va elle aussi changer, logique en soit. Logique mais peu pratique car si l'on a distribué cette URL, par exemple via RSS, tous nos visiteurs auront droit à une jolie 404...
Le hic c'est que cela ne marche pas... En effet, lorsque pour l'article sur CodeMirror un contributeur m'a fait remarquer que j'avais écrit "codeminor" dans le titre, la correction a eu pour effet de perdre l'ancienne URL malgré la sélection du mode "qui va bien". Une vérification dans la base de donnée permet de valider cela :
gaston$select dst from url_alias where src='node/367';pid | src | dst | language------+----------+------------------------------------------------+----------1376 | node/367 | articles/codemirror-lediteur-de-contenu-ultime | frVérification des URLS pour un article
Pas cool... Et j'ai mis pas mal de temps avant de me rendre compte que le soucis ne venait en réalité pas de pathauto en lui-même, mais de sa traduction française. Plutôt qu'un long discours, je vais simplement supprimer toute traduction sur pathauto :
gaston$delete from locales_target where lid in (select lid from locales_source where location like '%pathauto%');Vérification des URLS pour un article
Une fois le bon réglage rétabli, le titre de l'article remodifié, une petite vérification en base pour vérifier que cette fois cela fonctionne :
gaston$select dst from url_alias where src='node/367';pid | src | dst | language------+----------+------------------------------------------------+----------1376 | node/367 | articles/codeminor-lediteur-de-contenu-ultime | fr1401 | node/367 | articles/codemirror-lediteur-de-contenu-ultime | frVérification des URLS pour un article
C'est bon, cette fois j'ai bien deux alias pour le même article, celui de PID le plus élevé étant celui qui sera utilisé par défaut.
Conclusion
Que dire en conclusion ? Ce n'est au fond qu'un bug même si cette fois il s'agit de la traduction et que les effets peuvent être graves pour un site à forte enthropie de contenus.
Mais tout ceci me fait penser à une reflexion plus ancienne sur la notion même de paramétrage pour Drupal, et sur notre douloureuse dépendance vis à vis d'interfaces plus ou moins complexes, plus ou moins bien gaulées, avec cette très agaçante impossibilité de pouvoir visualiser, dupliquer, et déployer la configuration d'un site Drupal (et donc de ses modules)...
Peut-être est-ce mon background d'unixien qui parle ici, mais pour synthétiser, je trouve très problématique deux points en particuliers :
- Qu'il n'y ait aucune séparation entre les réglages d'un module, les contenus gérés par un module et les données temporaire qu'il est amené à manipuler.
- Que la configuration des modules ne soient pas de simple fichiers textes facilement manimulable, auditable, déployables, capitalisables, etc.
En somme, je pense qu'il est grand temps pour Drupal d'imposer à tous les modules une véritable API de serialisation lui permettant de lire et d'écrire ses réglages sans qu'il lui soit possible d'y déroger. C'est d'ailleurs assez choquant pour qui pratique l'architecture logiciel de laisser une telle liberté à des greffons. Maintenant, je comprend qu'il n'est pas facile de rattraper les dégâts avec plus de 3000 modules existants... Mais tant qu'à tout casser à chaque version majeur de Drupal (ce qui est aussi un vrai problème !) et ainsi obliger une quasi ré-écriture des modules, rajouter cela n'est pas la mer à boire.
De cette manière, la table variable cesserait peut-être d'être un véritable dépotoir et Drupal pourrait supprimer les réglages d'une module désinstallé. Cela implique aussi de fournir aux modules un moyen propre de gérer les données temporaires (ex. date de dernier CRON) ce qui éviterais de coller cela dans variable, une fois encore, qui fini par ressemble à la tristement célèbre registry de Windows.
Une piste de solution serait de fonctionner comme le très bien conçu gconf de Gnome. L'idée étant que toutes les applications fournissent le schema XSD de leurs réglages, et que ces réglages sont dés lors stockés au format XML. Ce ne serait le bonheur ? Vérifier les réglages d'un module d'un simple coup d'oeil ? Créer un nouveau site en répliquant les paramétrages éprouvés et testés d'un autre site par simple copier-coller ? Pouvoir stoquer toute la configuration de Drupal dans un dépôt de version comme GIT ou SVN et pouvoir déployer un site avec seulement des fichiers texte ? Et ce même sur un site existant, qui contient déjà du contenu, sans risque de perdre un article ? Un vrai déploiement quoi ! Pas une usine à gaz, à la features...
Je ne sais pas pour vous, mais moi ça me fait rêver...

Drupal a la réputation d'un outil aussi puissant qu'ardu à apréhender. Destiné aux concepteurs de site Web, cet ouvrage a été conçu pour permettre une prise en main progressive et pragmatique du CMS qui ne cesse de faire parler de lui.
Commentaires
Bonjour yoran,
Je suis totalement d'accord avec tes remarques sur le déploiement. Je signe la pétition dès qu'elle est disponible ;-). Par contre pour pathauto le problème si plusieurs alias pointent sur le même contenu c'est le duplicate content pour les moteur fr recherches sauf si tu sais faire dès redirect 301 sur les anciens alias. Moi je ne sais pas :-(.
ça me rassure de ne pas être tout seul :) A la liste des doléances, je rajouterais bien aussi le fait que l'on arrête de faire "joujou" avec les API en pétant tout à chaque nouvelle version. Ca allait bien à l'époque de drupal 4/5 qui était encore peu utilisé, mais cela devient un vrai problème maintenant que ce CMS est en production sur de (très) gros sites. Disons qu'à la longue cela va devenir un peu difficile à justifier la facture... "Alors, M. le client, le passage à Drupal 7, ça va être 40 jours ! Pourquoi ? Euh... pour rien, ça n'apportera pas de nouvelles fonctionnalité tout de suite, c'ets juste parce qu'on a décidé de tout casser les API de Drupal 6 pour que ce soit plus "joli"... mais sinon ça fait presque pareil qu'avant... Ah si, le nouveau truc, le backoffice super-cool-comme-wordpress ! Mais vous n'y aurez pas droit car vous avez voulu garder votre thème pour l'administration, faut assumer hein ! "
Sinon, histoire de redevenir construictif, pour ton problème de redirection, utilise le module global_redirect, ça fait tout le travail pour ne garder qu'une URL par contenu, le reste passant automatiquement par des redirections (y compris les node/XXX)
Concernant le problème de paramétrage dans un fichier XML, n'y a-t'il pas un risque au niveau des performances?
Sinon je plussois abondamment sur les problèmes de déploiement.
Concernant les problèmes d'API, je comprends le besoin originel de la remettre en cause à chaque version majeure, mais une fois une certaine maturité atteinte, je pense qu'il est nécessaire de trouver un autre rythme de développement et de nouvelles règles. Sur le long terme, j'ai peur que la communauté ne se lasse de refaire les modules à chaque version majeure au détriment de nouvelles fonctionnalités
Oui, et c'est une lassitude qui s'est bien senti lors du passage de D5 à D6 (je serais currieux de faire une stat sur le nombre de modules "morts" lors de cette migration). Et lorsque le vois le nombre de hook qui ont changé ou pire carrement disparu avec D7, je ne suis pas très confiant. Il faudrait vraiement que Drupal passe de l'ére du "on se fait plaisir" à "on se professionalise". J'imagine à peine le désastre si dans le monde Java/J2EE, les spécifications des servlets cassaient à chaque nouvelle version :) Ah mais c'est peut-être çà le truc, faudrait peut-être rentrer dans l'ére des spécifications ;p
Pour le XML, aucune raison que cela pose des problèmes de performances. Il va sans dire que ces fichiers sont juste "détectés comme modifiés", pour être parsés puis injectés en base et exploité via cache (comme la table "variable").
Ouais tout ça c'est sympa mais toujours pas de module dans la page
http://drupal.org/project/datasource
C'est dommage car ça m'aurait bien servi. Bon j'imagine que ça va venir.
En tout cas merci pour toutes ces bonnes infos.
Pas trop eu le temps de m'en occuper, je t'envoie cela en private.
Pour les redirections 301 il existe un tres bon module (integre probablement au nouveau core d7) qui redirigera l' ancien alias sur le nouveau contenu automatiquement en 301.
Path Redirect
Publier un nouveau commentaire