SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

289 Plugins, 197 contribs sur SPIP-Zone, 79 visiteurs en ce moment

Accueil > Outils pour plugins > Plugin Query Path > Query Path

Query Path

26 juillet 2012 – par Matthieu Marcillaud – commentaires

14 votes

Query Path (http://querypath.org/) est une librairie PHP permettant de récupérer, sélectionner et manipuler un contenu HTML comme le fait la librairie javascript jQuery. Ce plugin permet d’utiliser cette librairie dans SPIP.

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 :

  1. include_spip('inc/querypath');

Une fois le fichier chargé, vous avez à disposition les fonctions prévues par la librairie :

Ce plugin requiert une version de PHP >= 5.3

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 :

  1. function gma_formulaire_fond($flux) {
  2.         // sur le formulaire d'édition de groupe de mot
  3.         if ($flux['args']['form'] == 'editer_groupe_mot') {
  4.  
  5.                 $html = $flux['data'];
  6.                 $env = $flux['args']['contexte'];
  7.                
  8.                 // charger QueryPath
  9.                 include_spip('inc/querypath');
  10.                 $qp = spip_query_path($html, 'body');
  11.  
  12.                 // la parenté sur tous
  13.                 // on récupère le sélecteur et on l'ajoute après le titre...
  14.                 $selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env);
  15.                 $qp->top('body')->find('li.editer_titre')->after($selecteur_parent);
  16.  
  17.                 // les paramètres techniques sont uniquement sur les groupes racine
  18.                 if ($env['id_parent']) {
  19.                         $qp->top('body')->find('li.fieldset_config')->remove();
  20.                 }
  21.  
  22.                 // retourner le HTML modifie
  23.                 $flux['data'] = $qp->top('body>div')->xhtml();
  24.         }
  25.         return $flux;
  26. }

Télécharger

Voir en ligne : https://plugins.spip.net/querypath

Dernière modification de cette page le 12 novembre 2017

Retour en haut de la page

Vos commentaires

  • Le 11 septembre 2015 à 17:29, par Matthieu Marcillaud En réponse à : Query Path

    Comme je le signale ici http://zone.spip.org/trac/spip-zone/changeset/91788 il y a un gros bug avec la librairie libxml2 qui affecte querypath dans certaines versions récentes de PHP (5.6.4 en ce qui me concerne, avec libxml version 2.9.2).

    Pas d’alternative au bug, qui a lieu dès qu’un attribut ID est présent dans le code HTML, c’est à dire… quasiment tout le temps !

    Donc voilà, si vous avez « PHP Warning : DOMNode::cloneNode() : ID XXXXX already defined in quelquechose/DOMQuery.php on line 3176 » ou proche, c’est que ça provient certainement de ce bug :/

    Répondre à ce message

  • Le 4 février 2014 à 00:17, par touti En réponse à : Query Path

    Avec le pipeline _afficher_contenu_objet, on peut afficher différemment les champs extra. Ce code efface ces champs (div.afficher) de la page d’un auteur pour ajouter le squelette « auteur_extras_vue ».

    // charger QueryPath
    include_spip('inc/querypath');
                   
    $html = $flux['data'];
    $env = $flux['args']['contexte'];
    $qp = htmlqp($html, 'body');
                   
    //effacer tout les champs extras
    $qp->top('body')->find('div.afficher')->remove();
                   
    //stocker un squelette calculé
    $saisies_mieux = recuperer_fond('auteur_extras_vue', $env);

    // retourner le HTML modifie
    $flux['data'] = $saisies_mieux.$qp->top('body')->xhtml();
    • Le 5 février 2014 à 10:24, par touti En réponse à : Query Path

      Avec Querypath, difficile de trouver une solution à l’utf-8 et au Bom des fichiers de lang, par contre le remplacement est assez fort pour respecter la chaine traduite. Pour ne pas avoir un « Qui est l ?auteur ? » mais bien un « Qui est l’auteur » ce code récupère la chaine et la remet en place :

      $qui_est_lauteur=_T('entree_infos_perso_2');
      $qp->top('body')->find('.editer_bio label')->html($qui_est_lauteur);

    Répondre à ce message

  • Le 5 février 2013 à 21:10, par tcharlss 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

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • ScolaSPIP 4

    19 janvier 2016 – 345 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • Notifications

    23 juillet 2007 – 209 commentaires

    Le plugin notifications sait envoyer des mails quand les gens s’expriment dans le forum de l’espace privé, sous un article, ou dans la messagerie personnelle... Il permet également de notifier le ou les auteurs d’un article lors de la publication de (...)

  • Albums 3

    8 août 2014 – 279 commentaires

    Le plugin « Albums » évolue dans une version 3 pour SPIP 3. Avant d’effectuer une mise à jour depuis la version 1 ou 2, consultez les notes sur la rétro-compatibilité. Les modèles, notamment, on reçut quelques changements pour la bonne cause. En (...)

  • Plugin SEO

    6 août 2009 – 245 commentaires

    SEO est un plugin qui ajoute la possibilité d’insérer manuellement où vous le souhaitez ou de manière automatique dans la partie de votre site web : meta tags, URL canonique, Google webmaster tools Meta Code et Google Analytics javascript. Il est (...)

  • Les crayons

    23 avril 2008 – 840 commentaires

    Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.