Mootools Css selecteurs en php

131
Eléphanteau du PHP | 45 Messages

31 oct. 2008, 12:03

Ca n'interessera que peut de personnes, mais si d'aventure vous jetez un oeil sur la methodologie des selecteurs css de mootools ( un framework javascript ), vous en apprecierez surement la qualitée.
Aussi, j'ai betement porté cette intelligence en php, parce que je veux savoir à quelle heure et de quelle release je peux trouver le dernier episode de prison break.

L'adresse est
http://selectors.svn.exyks.org/
Une utilisation c'est
<?
$url_file = http://selectors.svn.exyks.org/file.htm
$doc = simplexml_load_file($url_file, "Element");
$second_reason = $doc->getElement(".box+li");
?>
Etvoila

Mammouth du PHP | 2937 Messages

31 oct. 2008, 14:34

Une formule de salutation n'est jamais superflue. :roll:
<?
...
Il est mieux de coder la balise d'ouverture de PHP sous sa forme complète <?php. ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 oct. 2008, 15:30

Je vais peut être passé pour un idiot, mais comment est-ce qu'on utilise ton développement ?
J'entend par là que tu instancie un objet SimpleXML, et que tu passes des éléments de recherche, mais a quel moment est-ce que tu as modifié quelque chose ?

Le résultat donne des idées, me parrait bien pratique, mais je ne vois pas l'apport de nouvelles fonctionnalités :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

131
Eléphanteau du PHP | 45 Messages

31 oct. 2008, 22:44

L'immense interet de simplexml est de pouvoir etre etendu.
$doc = simplexml_load_string($mystring, "MyDerivedClass");

Pour cela MyDerivedClass doit être signé

MyDerivedClass extends simpleXmlElement.

La premiere chose, c'est donc d'instancier son simplexml sur la classe Element.
La classe Element apporte méthodes (additionnelles )
- getElements($css_selector); // retourne toutes les nodes (array) matchant le selecteur
- getElement($css_selector); // retourne la premiere node matchant le selecteur

Les objets etendu de simplexml en retournent d'autres
$doc = simplexmlload_string("$mystring, "Element") // Element object
$doc->body // Est AUSSI un Element object.

donc, on peut facilement chainer ses méthodes
$doc->getElement("body")->getElement("ul"); // Element object.


Une chose à savoir c'est que simplexml est ... simple et n'a que tres peu de fonction de navigation dans son dom ( en fait, juste children() et xpath, et biensur, la possiblité d'acceder aux collections de childnode via l'opérateur -> ).
J'ai donc cette structure

Element extends XHTMLElement
- getElements
- getElement
XHTMLElement extends SimpleXmlElement
- getParent();
- ... autres fonctions de navigation dans le dom

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 oct. 2008, 22:52

Pas mal ...

Non seulement j'apprend une super fonctionnalité de simpleXML, mais en plus, je trouve que ta contribution est franchement bien.

Beau boulot :pouce:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

131
Eléphanteau du PHP | 45 Messages

31 oct. 2008, 23:12

Donc pour la suite, [strike]je vais[/strike] il y a du travail sur deux fronts :
Manipulation d'Element et tout ce qui peut aller avec
->get("text"); //equivalent de .contentText
->get("html"); //equivalent de .innerHTML
Et toutes les autres fonctionnalitées qui rendent la vie plus belle

Manipulation XHTML ( palliations aux faiblesses de simplexml )
->remove() // supprime une node
->getParent() // renvoie le parent

->getElementById // et oui, ca n'existe pas en simplexml
->getElementsByTagName

Dans l'idée, une emulation de toutes les fonctions DOM classiques
Et je me rend compte que ma classe XHTMLElement aurait pour meilleur nom SimpleXHTML



[Edit] Et je supporte maintenant les pseudo selecteurs.