Gestion d'URL d'administration

Billet

La version 2.27 de Dotclear embarque des changements côté URL, dont certains non rétro compatibles.

Déprécié

Avec le passage aux espaces de noms PHP, la classe dcAdminURL devient Dotclear\Core\Backend\Url.
Et son instance se déplace également de dcCore::app()->adminurl vers dcCore::app()->admin->url.
A noter que grâce au plugins dcProxyV1, les anciens noms restent accessibles.

Obsolète

Dûe à la mise en place de la nouvelle structure de l'application, l'utilisation des URLs écrites directement est proscrite. C'est à dire que partout où un plugin écrivait 'plugin.php?p=monPlugin' le code ne fonctionnera plus. Il faut impérativement utiliser le gestionnaire d'URL dcCore::app()->admin->url et ses méthodes.

<?php
// dcCore::app()->adminurl->get('admin.plugin.monPlugin', ['var' => 1]);
dcCore::app()->admin->url->get('admin.plugin.monPlugin', ['var' => 1]);
// ou encore mieux
My::manageURL(['var' => 1]);

// Http::redirect('plugin.php?p=monPlugin&var=1);
dcCore::app()->admin->url->redirect('admin.plugin.monPlugin', ['var' => 1]);
// ou encore mieux
My::redirect(['var' => 1]);

Pourquoi ? Parce que l'ajout du Process en cours est fait automatiquement par ce biais. Le code ci-dessus renverra l'URL /index.php?process=Plugin&p=monPlugin&var=1.

Nouveauté

Une nouvelle URL débarque dans le gestionnaire, celle de déconnexion, elle permet de se déconnecter de l'interface d'administration même en cas de plantage d'un plugin ou d'un thème. Son identifiant est 'admin.logout'. Si vous souhaitez par exemple déconnecter l'utilisateur depuis votre script il suffit de faire dcCore::app()->redirect('admin.logout');.

Pour des raisons d'uniformisation, l'identifiant d'URL 'admin.popup_posts' sera a terme remplacé par 'admin.popup.posts' et un autre nouvel identifiant 'admin.help.charte' peu utilisé est ajouté.

Attention

Ce n'est pas tout, en rapport au gestionnaire d'URL et à la nouvelle structure de l'application, certains formulaires ne fonctionneront pas comme il faut. En effet les formulaires utilisant la method GET ne peuvent embarquer dans l'URL le process, du moins il le perd en chemin ! (Merci monsieur HTML) Il faut donc impérativement ajouter un champ caché contenant process=xxx ou xxx est l'identifiant de la page qu'il souhaite atteindre enregistré dans le gestionnaire d'URL. Exemple pour la page principale d'un plugin il faudra ajouter dans le formulaire new Form\Hidden('process', 'Plugin'); ou form::hidden('process', 'Plugin'); ou '<input type="hidden" name="process" value="Plugin" />'. Dans la majorité des cas, les formulaires utilisant la méthode POST, ainsi que les filtres de listes tiennent compte du process.

A noter que la classe My d'aide des modules propose des méthodes simplifiant l'accès aux URLs du module.

Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.

La discussion continue ailleurs

URL de rétrolien : https://dotclear.watch/trackback/15