Aide pour la création d'un flux RSS

Aide pour la création d'un flux RSS - PHP - Programmation

Marsh Posté le 20-11-2007 à 09:57:47    

Bonjour,

 

Je suis en train de mettre en place un flux RSS pour mon site et j'ai un souci avec DomDocument->get_element_by_id() qui me retourne cette erreur :
"Fatal error: Call to a member function on a non-object in [...]" correspondant à la ligne "$element_channel = $file->get_elements_by_id("news" );"

 

J'ai essayé de remplacer par $element_channel = $file->get_elements_by_tagname("channel" ); et là tout fonctionne bien.

 

Pourquoi cela ne fonctionne-t-il pas avec get_element_by_id() ?

 


Voici mon code :

Code :
  1. <?php
  2. function createXML(){
  3. // Création du fichier en mémoire
  4. $file = domxml_new_doc("1.0" );
  5. // Création du noeud racine
  6. $root = $file->create_element("rss" ); //On crée l élément racine
  7. $root->set_attribute("version", "2.0" ); //On lui ajoute l attribut version (2.0)
  8. $root = $file->append_child($root); //On insère la racine dans le document
  9. // Création du noeud channel
  10. $element_channel = $file->create_element("channel" );//On crée un élément channel
  11. $element_channel->set_attribute("id", "news" ); //On donne un attribut id à notre channel
  12. $element_channel = $root->append_child($element_channel);//On ajoute cet élément à la racine
  13. // Création du noeud description
  14. $element_description = $file->create_element("description" );//On crée un élément description
  15. $element_description = $element_channel->append_child($element_description);//On ajoute cet élément au channel
  16. // Création du texte pour le noeud description
  17. $texte_description = $file->create_text_node("Nouveautés sur Mon-Cobaye.net" ); //On crée un texte
  18. $texte_description = $element_description->append_child($texte_description); //On insère ce texte dans le noeud description
  19. // Création du noeud link et ajout du texte à l élément
  20. $element_link = $file->create_element("link" );
  21. $element_link = $element_channel->append_child($element_link);
  22. $texte_link = $file->create_text_node("http://www.mon-cobaye.net" );
  23. $texte_link = $element_link->append_child($texte_link);
  24. // Création du noeud title et ajout du texte à l élément
  25. $element_title = $file->create_element("title" );
  26. $element_title = $element_channel->append_child($element_title);
  27. $texte_title = $file->create_text_node("Mon-Cobaye" );
  28. $texte_title = $element_title->append_child($texte_title);
  29. //On retourne le fichier XML
  30. return $file;
  31. }
  32. function addOneNews($file, $title, $date, $author, $nouveaute){
  33. //On récupère le channel
  34. //$element_channel = $file->get_element_by_id("news" );
  35. $element_channel = $file->get_elements_by_tagname("channel" );
  36. // Création du noeud item
  37. $element_item = $file->create_element("item" );
  38. $element_item = $element_channel[0]->append_child($element_item);
  39. // Création du noeud title et ajout du texte à l élément
  40. $element_title = $file->create_element("title" );
  41. $element_title = $element_item->append_child($element_title);
  42. $texte_title = $file->create_text_node($title);
  43. $texte_title = $element_title->append_child($texte_title);
  44. // Création du noeud link et ajout du texte à l élément
  45. $element_link = $file->create_element("link" );
  46. $element_link = $element_item->append_child($element_link);
  47. $texte_link = $file->create_text_node("http://www.mon-cobaye.net/nouveautes.php" );
  48. $texte_link = $element_link->append_child($texte_link);
  49. // Création du noeud pubDate et ajout du texte à l élément
  50. $element_date = $file->create_element("pubDate" );
  51. $element_date = $element_item->append_child($element_date);
  52. $texte_date = $file->create_text_node($date);
  53. $texte_date = $element_date->append_child($texte_date);
  54. // Création du noeud author et ajout du texte à l élément
  55. $element_author = $file->create_element("author" );
  56. $element_author = $element_item->append_child($element_author);
  57. $texte_author = $file->create_text_node($author);
  58. $texte_author = $element_author->append_child($texte_author);
  59. // Création du noeud description et ajout du texte à l élément
  60. $element_desc = $file->create_element("description" );
  61. $element_desc = $element_item->append_child($element_desc);
  62. $texte_desc = $file->create_text_node(utf8_encode($nouveaute));
  63. $texte_desc = $element_desc->append_child($texte_desc);
  64. }
  65. function saveXML($file){
  66. //Sauvegarde du fichier
  67. $file->dump_file("news/news.xml",false, true);
  68. }
  69. $link = mysql_connect("localhost", "user","pass" ) or die(mysql_error()."<br />".$query);
  70. mysql_select_db("moncobay",$link) or die(mysql_error()."<br />".$query);
  71. $query="select n.*, u.pseudo from nouveautes n, user u where n.id_user=u.id_user order by idn desc limit 0,10";
  72. $resultn=mysql_query($query,$link) or die(mysql_error()."<br />".$query);
  73. //Création du fichier XML
  74. $file = createXML();
  75. while ($rown = mysql_fetch_array($resultn))
  76. {
  77. addOneNews($file,$rown['titre'],strftime("%d/%m/%Y %H:%M",strtotime($rown['date'])),$rown['pseudo'],nl2br($rown['nouveaute']));
  78. }
  79. saveXML($file);
  80. mysql_close($link);
  81. ?>
 

Pouvez-vous m'aider ?


Message édité par nero27 le 20-11-2007 à 11:51:17
Reply

Marsh Posté le 20-11-2007 à 09:57:47   

Reply

Marsh Posté le 20-11-2007 à 15:18:20    

get_elements_by_id
Un id est censé être unique. Pourquoi est ce que la fonction aurait un nom qui laisse croire qu'elle en retournera plusieurs? Enlève donc le "s" à "elements" et ça marchera.

Reply

Marsh Posté le 20-11-2007 à 16:01:15    

omega2 a écrit :

get_elements_by_id
Un id est censé être unique. Pourquoi est ce que la fonction aurait un nom qui laisse croire qu'elle en retournera plusieurs? Enlève donc le "s" à "elements" et ça marchera.


Il y a un s à get_elements_by_tagname mais pas à get_element_by_id ;)
 
Par contre, j'ai trouvé un début de réponse : il semblerait que la ligne $element_channel->set_attribute("id", "news" ); ne fonctionne pas.
Le fichier XML créé a une balise <channel> sans id : vous savez d'où cela peut venir ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed