*Par défaut*, le plugin Médias ne prévoit pas de page pour les documents, et la balise #URL_DOCUMENT renvoie donc l'URL du fichier.
La déclaration de l'objet précise donc une page vide ('page'=>'') et une fonction dédiée à l'objet "document" génère cet URL particulier.
Mais du coup, cette fonction précise ne gère pas le cas où l'on indiquerait un nom de squelette pour cet objet (ce qui est donc explicitement une demande d'avoir une vraie page, logiquement).
La fonction dédiée pour l'URL_DOCUMENT ne devrait-elle donc pas gérer très simplement ce cas basique ?
- Si l'option 'page' est vide, on génère l'URL dérogatoire qui est celle du fichier, comme d'hab.
- Si l'option 'page' est remplie, c'est qu'on veut une vraie page : on appelle le fonctionnement générique comme pour les autres objets.
Et en fait je m'aperçois que ça ne peut pas vraiment être fait car *toutes* les implémentations d'URLs commencent chacune par :
if ($generer_url_externe = charger_fonction("generer_url_$type",'urls',true)) {…}
Du coup, impossible dans une fonction plus précise de rappeler le fonctionnement générique dans certains cas (vive les vrais héritages qui permettent d'appeler la fonction mère…), sinon ça tourne en boucle.
Bof bof, je ne trouve pas ce découpage super (pas assez unitaire comme fonction). Une énième raison pour reprendre tout le routage…
Et du coup ça ne répond pas à ma question de départ : comment faire pour avoir des vraies pages pour les documents, et leur générer des URLs suivant le type choisi, comme pour les autres objets ?
Voici comment j'ai fait :
1) Je fais toujours mes squelettes en tant que plugin et donc ils ont un XML.
2) Dans le XML de mes squelettes, je dis que ça nécessite le plugin Médias (pour pouvoir le surcharger).
3) Dans ce même XML je déclare utiliser le pipeline "declarer_tables_objets_sql" (SPIP 3 uniquement).
4) Dans un PHP j'utilise ce pipeline en modifiant le flux des tables d'objet <code>$tables['spip_documents']['page'] = 'document';</code>.
5) Je crée un dossier "urls" avec un fichier "generer_url_document.php" VIDE (pour surcharger celui de Médias qui change les URLs génériques).
J'ai désormais bien des URLs de vraies pages pour les documents.
Ça marche, mais ce n'est pas super pratique, ni évident, ni logique. Uniquement changer le "page" aurait dû suffire à mon humble avis.
En revanche, impossible de changer le squelette et l'URL pour le type de page. J'ai en effet testé de mettre "page" => "photo" et… rien. Ça marche hein, mais ça reste à "spip.php?document123" + "document.html" quelque soit la valeur de "page". Je croyais que c'était le nom du type de page pour cet objet, justement ? Non ?