Erreur de squelette à cause de styliser_modele()
Un peu de contexte pour commencer :
- sur SPIP 4.0 ou 4.1
- avec le plugin GIS, configuré pour permettre la localisation des documents
- depuis la page
ecrire/?exec=document_edit&id_document=XX
(à laquelle on accède une fois un point créé et lié au document) à condition qu'un point GIS soit lié au document
J'obtiens l'erreur de squelettes modeles/doc : Paramètre d’inclusion incorrect : id
, qui n'est pas trop gênante en 4.0 mais qui génère une page blanche avec uniquement l'affichage de cette erreur en 4.1.
Après pas mal de recherches, j'ai trouvé :
- si je désactive l'inclure https://git.spip.net/spip-contrib-extensions/gis/src/branch/master/prive/objets/liste/gis_lies.html#L39 dans GIS l'erreur disparaît (ce qui ne semble avoir aucun rapport) 2 mais si je vide le contenu du squelette inclus à cette ligne l'erreur est toujours présente
- comme l'erreur mentionne un modele/doc, j'ai grepé le core pour en arriver à
[(#MODELE{doc,id_document=#ENV{id_document,''},largeur=320,hauteur=#GET{hauteur}}|extraire_balise{a})]
https://git.spip.net/spip/medias/src/branch/master/formulaires/editer_document.html#L56 qui génère l'erreur uniquement si un point est lié au document
Comme il n'y plus de modèle doc en 4.X, on passe par medias_modeles_styliser()
introduit par https://git.spip.net/SPIP/medias/commit/fa13018a9ef63c633e78da253106867d6bac8a78 et en mode debug je vois que lors de l'appel de modèle mentionné au point 3 la fonction reçoit un id qui vaut 0 dans tous les cas, et pour cause on lui passe un id_document et pas un id.
J'ai tenté de remplacer [(#MODELE{doc,id_document=#ENV{id_document,''},largeur=320,hauteur=#GET{hauteur}}|extraire_balise{a})]
par [(#MODELE{doc,id=#ENV{id_document,''},largeur=320,hauteur=#GET{hauteur}}|extraire_balise{a})]
et ça fixe bien le problème.
Je suis ensuite remonté vers styliser_modele()
introduite par 9108ca55 qui indique que :
'modeles' doit lister les modeles qui passeront dans le routeur pour l'objet concerne 'modeles_styliser' doit designer le nom de la fonction a appeler, qui recevra le nom initial du modele demande et l'id de l'objet que l'on veut afficher avec ce modele
J'ai donc pensé que le problème venait du fait que GIS déclare des modèles dans https://git.spip.net/spip-contrib-extensions/gis/src/branch/master/base/gis.php#L71 mais en fait non car à la lecture du code de styliser_modele()
on voit bien que seuls les modèles liés à une fonction déclarée dans modeles_styliser
sont concernés cf https://git.spip.net/spip/spip/src/branch/master/ecrire/public/assembler.php#L561
Puis, pensant que cette fonction s’emmêlait les pinceaux entre les modèles de GIS et le fameux modèle doc, j'ai simplement retiré le static
de la déclaration de la variable $styliseurs
dans la fonction cf https://git.spip.net/spip/spip/src/branch/master/ecrire/public/assembler.php#L555 => et là, paf, plus d'erreur oO
Donc, soit il y a un problème avec cette static
, soit il faut corriger les appels de modèles dans medias pour remplacer id_document par id. Mais peut-être que je passe à côté de la cause principale...
ping @cerdic car là je commence à me perdre :\