[PHP5/DOM] CLASSE DE CREATION DE FLUX RSS VIA UN FICHIER XML

Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
- - Dernière réponse : cs_jean84
Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
- 4 oct. 2006 à 16:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39680-php5-dom-classe-de-creation-de-flux-rss-via-un-fichier-xml

Afficher la suite 
cs_jean84
Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Etant donne que c'est mon premier code du genre et que j'ai du apprendre sur le tas, il n'est evidement pas exclu que le code soit imparfait.
J'attend donc vos suggestions/commentaires !

Merci ;-)
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
hello jean,

je n'ai pas eu le temps d'aller uploader ton code avant que tu ne le mettes ici, désolé, je suis un peu "sous l'eau" en ce moment.
Mais comme j'ai un petit moment ce soir, j'en profite pour mater un peu ce que tu nous as concocté :-)
Je ne vais pas pouvoir approfondir ni tester ce soir, mais ...d'emblée, ça a l'air pas mal!
Je devance une remarque que l'on te fera sûrement : quand tu utilises une fonction qui ne renvoie que true ou false, le === true est inutile. MAIS...cela ne nuit pas non plus, et peut très bien entrer dans le cadre d'une standardisation du code. Donc, pourquoi pas.
Ceci dit :
if ( empty($Element->item(0)->nodeValue) === false )
c'est carrémént perturbant, pour moi...question d'habitude, sans doute.
Un plus pour l'utilisation de XPath afin de palier à l'éventulle défaillance de DOMDocument::getElementById() sur certains systèmes...:-)
Même si xml:id est tout aussi efficace, lol.

Par contre, je ne comprends pas pourquoi dans CRss::CreateXMLRSS() tu passes par une variable temporaire pour créer l'amorce de ton fichier xml et le sauvegarder dans le fichier passé en paramètre au constructeur. Pourquoi ne pas avoir utilisé directement le flux en tant que propriété de ta classe ? De plus, pour la réation, j'aurais plutôt passé le nom du fichier dans la méthode initialisant la création. Idem pour la lecture, en fait.
Ou via un setter. (__set)
Parce que là, tu te trimbales plein de $handleXML qui sont inutiles, à mon avis. Et cela permettrait d'utiliser une seule instance pour traiter plusieurx flux. Là, il faut instancier un nouvel objet à chaque fois qu'on veut changer de flux.
au lieu de tes echo, il eu mieux valu une gestion des erreurs laissant l'opportunité à un intégrateur de créer son interface récupérant les erreurs/alertes générées par ta classe, et affichant ce qu'il veut. En l'état, c'est inutilisable dans le cadre d'une intégration. Et chiant à modifier :-) Tu devrais centraliser ça, par exemple dans un tableau de messages, avec des codes de message. Modifiables.
Tien, je me rends compte que tu initialise une propriété non présente dans les déclaration des propriétés de ta classe, dans le constructeur :
$this->HandleXML = new DOMDocument('1.0', 'iso-8859-1');
Et je ne vois pas où tu l'utilises ensuite, en plus ?

Sinon, c'est pas mal! Y a du boulot, et des possibilités. Une utilisation de DOM qui reste simple et efficace :-)
cs_jean84
Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Merci beaucoup Malalam de tes conseils !

Pour repondre a ta (tes) question(s) :
- j'avais bel et bien au debut utilise, lors de l'appel au constructeur, un seul HandleXML pour toute la classe. Malheureusement, etant encore novice dans la gestion des nodes, je me suis retrouve avec des erreurs partout car j'utilisais a chaque fois le pointeur de l'element DOMDocument dans mes fonctions ce qui faisait "perdre" son statut (je crois qu'il se transformer en DOMElement ou quelque chose dans le meme ton). Pour prevenir tout bug pendant la conception, j'ai pris l'initiative d'ouvrir un nouvel Handle a chaque fonction pour eviter ce genre de probleme (je sai spas si j'ai ete clair). C'ets vrai que maintenant que j'ai mieux compris le DOM (enfin ! ^^), je vais m'attacher a corriger sa (c'est un peu comme si j'avais compile en debug plutot qu'en release en fait ^^)

- pour le ===, grand moment de solitude. Vu qu'on en avait parler sur ce topic => http://www.phpcs.com/codes/LECTURE-TOUS-SOUS-DOSSIERS-FICHIERS-REPERTOIRE_39422.aspx, je pensais avoir compris qu'il fallait en mettre partout .... apparement pas ^^ Si tu pouvais m'expliquer STP !! Parce que moi ecrire if ( $Var === true ) sa me choque grave a chaque fois que je code sa (je viens du C++ alors forcement)

- je suis ravi que tu ai vus ma petite modif en XPath ;-) C'est vrai que je m'en suis fait une motagne alors que finallement, avec un peu de rigueur c'est relativement digeste. Bon par contre c'est evident que je dois utiliser 10% des capacites de ce language mais bon, faut bien commence quelque part !

- if ( empty($Element->item(0)->nodeValue) false ) a part le false qui doit etre choquant, le reste ne vas pas bien ? parce que certaine classe renvoi un DOMNodeList vide en guise de reponse (super ...) donc c'est le seul moyen de tester si un noeud est vide ou pas. J'ai bô essayer la propriete leght, rien y fait cela me renvoi toujours 0 (en fait rien donc je suppose que c'est 0)

En tout cas merci de ton commentaire, c'est tres encourageant ! Je vais faire en sorte de mettre a jour la classe rapidement pour etre au top (cette classe va servir pour un site avec lequel je travaille et qui va bientot passer en V3)

@++
xque19
Messages postés
47
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
19 novembre 2006
1 -
Salut!

Un petit récapitulatifs des différents opérateurs de PHP. :)

Exemple Nom Résultat
$a == $b Egal TRUE si $a est égal à $b .
$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type (introduit en PHP 4).
$a != $b Différent TRUE si $a est différent de $b .
$a <> $b Différent TRUE si $a est différent de $b .
$a !== $b Différent TRUE si $a est différent de $b ou bien
qu'ils ne sont pas du même type. (introduit en PHP 4)
$a < $b Plus petit que TRUE si $a est strictement plus petit que $b .
$a > $b Plus grand TRUE si $a est strictement plus grand que $b .
$a <= $b Inférieur ou égal TRUE si $a est plus petit ou égal à $b .
$a >= $b Supérieur ou égal TRUE si $a est plus grand ou égal à $b .

++
cs_jean84
Messages postés
450
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Salut !

Merci pour ton commentaire xque19 mais je ne suis quand meme pas a ce point ! La ou j'ai fait une erreur, c'est dans l'utilisation des === qui compare 2 types de donnees identiques. Ce n'etait meme pas une erreur mais c'en fait un defaut d'optimisation ^^, a ne pas confondre ;-)