Zend_Feed-CustomFeed.xml 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.feed.custom-feed">
  5. <title>Classes personnalisées pour les flux et entrées</title>
  6. <para>
  7. Pour finir, vous pouvez étendre les classes de <classname>Zend_Feed</classname> si
  8. vous souhaitez créer votre propre format ou implémenter des améliorations comme par exemple
  9. la gestion automatique des éléments situés dans un espace de noms personnalisé.
  10. </para>
  11. <para>
  12. Voici un exemple d'entrée Atom personnalisée qui gère son propre espace de noms
  13. <code>monen</code>. Notez aussi que la classe se charge d'appeler la méthode
  14. <methodname>registerNamespace()</methodname> pour que l'utilisateur n'ait au final pas du tout à se
  15. soucier des espaces de noms.
  16. </para>
  17. <example id="zend.feed.custom-feed.example.extending">
  18. <title>
  19. Étendre la classe représentant les entrées Atom pour ajouter la gestion d'un
  20. espace de noms personnalisé
  21. </title>
  22. <programlisting language="php"><![CDATA[
  23. /**
  24. * La classe personnalisée connaît automatiquement l'URI du flux
  25. * (qui est optionnelle) et elle peut ajouter automatiquement
  26. * des espaces de noms supplémentaires.
  27. */
  28. class MonEntree extends Zend_Feed_Entry_Atom
  29. {
  30. public function __construct($uri = 'http://www.exemple.com/monflux/',
  31. $xml = null)
  32. {
  33. parent::__construct($uri, $xml);
  34. Zend_Feed::registerNamespace('monen',
  35. 'http://www.exemple.com/monen/1.0');
  36. }
  37. public function __get($var)
  38. {
  39. switch ($var) {
  40. case 'maMiseAJour':
  41. // On traduit maMiseAJour en monen:maj
  42. return parent::__get('monen:maj');
  43. default:
  44. return parent::__get($var);
  45. }
  46. }
  47. public function __set($var, $valeur)
  48. {
  49. switch ($var) {
  50. case 'maMiseAJour':
  51. // On traduit maMiseAJour en monen:maj
  52. parent::__set('monen:maj', $valeur);
  53. break;
  54. default:
  55. parent::__set($var, $valeur);
  56. }
  57. }
  58. public function __call($var, $unused)
  59. {
  60. switch ($var) {
  61. case 'maMiseAJour':
  62. // On traduit maMiseAJour en monen:maMiseAJour.
  63. return parent::__call('monen:maMiseAJour', $unused);
  64. default:
  65. return parent::__call($var, $unused);
  66. }
  67. }
  68. }
  69. ]]></programlisting>
  70. <para>
  71. Puis pour utiliser cette classe, instanciez-la directement et définissez la
  72. propriété <code>maMiseAJour</code>&#160;:
  73. </para>
  74. <programlisting language="php"><![CDATA[
  75. $entree = new MonEntree();
  76. $entree->maMiseAJour = '2005-04-19T15:30';
  77. // appel de type méthode géré par __call
  78. $entree->maMiseAJour();
  79. // appel de type propriété géré par __get
  80. $entree->maMiseAJour;
  81. ]]></programlisting>
  82. </example>
  83. </sect1>