Zend_Feed-CustomFeed.xml 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <sect1 id="zend.feed.custom-feed">
  2. <title>Classi personalizzate per feed ed elementi</title>
  3. <para>
  4. Infine, è possibile estendere la classe <code>Zend_Feed</code> se si desidera offrire un proprio formato o raffinatezze come la gestione automatica di elementi all'interno di namespace personalizzati.
  5. </para>
  6. <para>
  7. Ecco un esempio di un elemento personalizzato di un feed Atom che gestisce un proprio namespace <code>mions:</code>.
  8. Si noti come la classe si occupa di eseguire anche la richiesta a <code>registerNamespace()</code> in modo che l'utente finale non debba preoccuparsi affatto dell'uso dei namespace.
  9. </para>
  10. <example id="zend.feed.custom-feed.example.extending">
  11. <title>Estensione della classe elemento Atom con namespace personalizzati</title>
  12. <programlisting role="php"><![CDATA[<?php
  13. /**
  14. * La classe elemento personalizzata conosce l'URI del feed (opzionale) e
  15. * può aggiungere ulteriori namespace in automatico
  16. */
  17. class MyEntry extends Zend_Feed_Entry_Atom
  18. {
  19. public function __construct($uri = 'http://www.example.com/myfeed/',
  20. $xml = null)
  21. {
  22. parent::__construct($uri, $xml);
  23. Zend_Feed::registerNamespace('mions', 'http://www.example.com/mions/1.0');
  24. }
  25. public function __get($var)
  26. {
  27. switch ($var) {
  28. case 'myUpdated':
  29. // Converti myUpdated in mions:updated.
  30. return parent::__get('mions:updated');
  31. default:
  32. return parent::__get($var);
  33. }
  34. }
  35. public function __set($var, $value)
  36. {
  37. switch ($var) {
  38. case 'myUpdated':
  39. // Converti myUpdated in mions:updated.
  40. parent::__set('mions:updated', $value);
  41. break;
  42. default:
  43. parent::__set($var, $value);
  44. }
  45. }
  46. public function __call($var, $unused)
  47. {
  48. switch ($var) {
  49. case 'myUpdated':
  50. // Converti myUpdated to myns:updated.
  51. return parent::__call('myns:updated', $unused);
  52. default:
  53. return parent::__call($var, $unused);
  54. }
  55. }
  56. }]]>
  57. </programlisting>
  58. <para>
  59. A questo punto per utilizzare la classe è sufficiente crearne direttamente un'istanza ed impostare la proprietà <code>myUpdated</code>:
  60. </para>
  61. <programlisting role="php"><![CDATA[<?php
  62. $entry = new MyEntry();
  63. $entry->myUpdated = '2005-04-19T15:30';
  64. // la chiamata in stile metodo è gestita dalla funzione __call
  65. $entry->myUpdated();
  66. // la chiamata in stile proprietà è gestita dalla funzione __get
  67. $entry->myUpdated;]]>
  68. </programlisting>
  69. </example>
  70. </sect1>
  71. <!--
  72. vim:se ts=4 sw=4 et:
  73. -->