Ce plugin permet d’utiliser dans SPIP la librairie QueryPath dans le code PHP d’un plugin. Cette librairie est entre autre un portage en PHP des sélecteurs et des manipulateurs de document de jQuery. Cela dit QueryPath permet bien d’autres choses également.
Pour l’utiliser, il faut charger inc/querypath.php :
- include_spip('inc/querypath');
Une fois le fichier chargé, vous avez à disposition les fonctions prévues par la librairie :
-
qp() -
htmlqp() - ou encore directement la classe
QueryPathReportez vous à la documentation de QueryPath pour connaître les paramètres et fonctions.
Manipuler du HTML
J’ai été confronté à différents problèmes lors de mon utilisation avec pour source un morceau de page HTML issu d’un pipeline de SPIP. Aussi, pour faciliter l’utilisation, une fonction apportée par ce plugin est aussi disponible avec les mêmes paramètres que les fonctions d’origine :
-
spip_query_path()
La fonction retourne pareillement un objet QueryPath, mais le chargement modifie certaines propriétés (lire inc/querypath.php pour plus de détails) pour que le fonctionnement soit le plus simple et transparent pour les développeurs.
Je n’ai pas encore tout le recul nécessaire pour savoir si cela fonctionne à tous les coups, mais vos tests le diront certainement :)
Exemple d’utilisation
Dans le plugin Groupes de mots arborescents, j’utilise ce plugin pour ajouter du code HTML sous le formulaire d’édition d’un groupe après le titre, et pour enlever une partie du HTML également lorsque nous sommes dans un groupe enfant d’un autre. Cela se fait (le jour de l’écriture) de la sorte :
- function gma_formulaire_fond($flux) {
- // sur le formulaire d'édition de groupe de mot
- if ($flux['args']['form'] == 'editer_groupe_mot') {
- $html = $flux['data'];
- $env = $flux['args']['contexte'];
- // charger QueryPath
- include_spip('inc/querypath');
- $qp = spip_query_path($html, 'body');
- // la parenté sur tous
- // on récupère le sélecteur et on l'ajoute après le titre...
- $selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env);
- $qp->top('body')->find('li.editer_titre')->after($selecteur_parent);
- // les paramètres techniques sont uniquement sur les groupes racine
- if ($env['id_parent']) {
- $qp->top('body')->find('li.fieldset_config')->remove();
- }
- // retourner le HTML modifie
- $flux['data'] = $qp->top('body>div')->xhtml();
- }
- return $flux;
- }



Version 1.0.0
Vos commentaires
# Le 5 février à 21:10, par drBouvierLeduc
En réponse à : Query Path
Merci pour ce plugin, je suis tombé dessus presque par hasard au moment même où j’avais besoin de quelque sorte de la sorte.
Très pratique pour modifier des morceaux de squelettes sans avoir à les surcharger, ou en complément des champs extras afin d’afficher les nouveaux champs exactement où on veut dans la page.
Dommage que la doc oficielle soit un peu spartiate cependant.
Ah, et un truc étrange : je n’ai pas testé avec spip_query_path(), mais pour moi seul htmlqp() fonctionne avec l’espace privé, qp() me renvoit plein d’erreurs, même en désactivant l’option correspondante.
Pourtant si j’ai bien lu, htmlqp est réservé au pages html de ’mauvaise’ qualité... Mystère.
Répondre à ce message
# Le 5 novembre 2012 à 16:05, par Stéphane Santon
En réponse à : Query Path
Intéressant... Cela pourrait donc être utilisé, lorsque l’on veut des formulaires un peu simplifiés par rapport ceux de la dist, de ne pas les surcharger dans notre plugin par une réécriture, mais en éliminant par QueryPath les champs d’édition non désirés ? ...
Répondre à ce message