Voici une librairie que j’ai longtemps cherchée! phpQuery est un portage de la populaire librairie Javascript jQuery en PHP. phpQuery offre une multitude de fonctionnalités excellentes, tournant pour la majorité par rapport a la manipulation du DOM. Avec phpQuery, vous pouvez chercher les noeuds fils d’un noeud donné, appliquer des filtres de recherche ou encore manipuler les éléments d’un formulaire.

phpQuery est très utile quand vous avez a manipuler du html cote serveur.

Ce qui est vraiment intéressant c’est que la librairie est a jour et elle suit exactement la meme syntaxe que jQuery. Par exemple :

// remplace tous les liens par "newVal", enleve la classe CSS "className" et met le texte du lien a "newHtml"
pq('a')->attr('href', 'newVal')->removeClass('className')->html('newHtml');

La technique de chaining en utilisant les « fluent interfaces » permet d’avoir une syntaxe lisible et minimise le nombre de lignes.

Instanciation et chargement

Les methodes newDocument* et newDocumentFile* permettent respectivement de charger du contenu depuis une chaine de caractères ou un fichier. Exemple :

// charge un document XHTML
phpQuery::newDocumentFileXHTML('my-xhtml.html')->find('p');
$ul = pq('ul');

il est possible de charger du contenu/fichier HTML, XHTML, XML et PHP.

Ajax

Il est possible d’effectuer des appels Ajax et récupérer des éléments html. Par exemple :

// permet de charger les elements qui ont une classe .inline-selector depuis http://somesite.com/page et les affecte a l'element #element
pq('#element')->load('http://somesite.com/page .inline-selector') ...;

getJSON, get, post et getScript sont aussi disponibles!

Support PHP5

La librairie implémente quelques classes SPL comme Countable, ArrayAccess et Iterator. C’est possible donc de faire un truc du genre :

// recupere tous les li dont la ul liste a la classe 'im-the-list'
$LIs = pq('ul.im-the-list > li');
if (count($LIs)) {
	foreach($LIs as $li) {
  		pq($li)->addClass('foreached');
	}
}

$pq = phpQuery::newDocumentFile('somefile.html');
// print first list outer HTML
print $pq['ul:first'];

Excellent non ?

CLI

phpQuery peut être utilisée en ligne de commande. Exemple :

phpquery 'http://code.google.com/p/phpquery/downloads/list?can=1' \
  --find '.vt.col_4 a' --contents \
  --getString null array_sum

Plugins

phpQuery est aussi extensible via un système de plugins. Deux bons exemples de plugins sont jQueryServer et WebBrowser.

Conclusion

phpQuery est une librairie extrêmement puissante. La documentation est également disponible sur la Wiki du site officiel de phpQuery