[spip-dev] SPIP 3.1+ Critère {traduction} et sitemap.xml en erreur

Bonjour,

Depuis SPIP 3.1, le commit http://zone.spip.org/trac/spip-zone/changeset/86214 a ajouté sur le sitemap.xml un critère {traduction} sur une boucle de rubriques.

Ce critère utilise un champ 'id_trad' qui n'est pas présent par défaut sur cette table (sans l'utilisation du plugin tradrub ou autre).

Du coup, sur les sites par défaut, une erreur SQL se déclenche :

Unknown column 'rubriques.id_trad' in 'where clause'
SELECT rubriques.lang, rubriques.id_rubrique, rubriques.titre FROM spip_rubriques AS `rubriques` WHERE (rubriques.statut = 'publie') AND (((rubriques.id_trad = 0) AND (rubriques.id_rubrique = 2)) OR ((rubriques.id_trad > 0) AND (rubriques.id_trad = '')))

Faudrait-il, au choix :
- enlever cette boucle ?
- tester que le champ id_trad existe (dans ce squelette) pour utiliser cette boucle
- modifier le critère traduction pour qu'il mette un where 0=1 dans le cas ou id_trad n'existe pas sur la table ? éventuellement un log d'information en plus ?
- ou accepter {traduction ?} qui dans ce cas ne lèverait pas d'erreur si id_trad n'existe pas et ajouterait where 0=1

Des avis ?

MM.

Hop,

Ce critère utilise un champ 'id_trad' qui n'est pas présent par défaut
sur cette table (sans l'utilisation du plugin tradrub ou autre).

Faudrait-il, au choix :
- enlever cette boucle ?

À première vue je proposerais bien de virer cette boucle, étant donné que les squelettes par défaut ont une prise en charge limitée du multilinguisme (due au fait qu'il y a plusieurs méthodes pour le mettre en place). De plus, cela ferait une modif dans le core pour une fonction disponible uniquement à l'aide d'un plugin. Mais...

- modifier le critère traduction pour qu'il mette un where 0=1 dans le
cas ou id_trad n'existe pas sur la table ? éventuellement un log
d'information en plus ?
- ou accepter {traduction ?} qui dans ce cas ne lèverait pas d'erreur si
id_trad n'existe pas et ajouterait where 0=1

Une de ces deux solutions (avec une préférence pour la dernière) me semble plus sympa que la première :slight_smile:

This.

C'est le plus générique, et ça profitera ensuite à n'importe quel objet et à n'importe quel squelette.

Ce qui m'ennuie juste c'est que ça fait exécuter la requête SQL même si on sait (à l'avance) qu'elle va échouer si id_trad n'est pas là.

Peut être qu'on peut essayer de reprendre du code du critère SI justement, pour que {traduction ?} ajoute un SI sur la présence du champ id_trad sur la boucle, ce qui aurait l'avantage de ne pas l'exécuter du tout si le champ n'est pas là.

C'est peut être encore mieux non ?

MM.