Zend_Feed_Writer.xml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 19802 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.feed.writer">
  5. <title>Zend_Feed_Writer</title>
  6. <sect2 id="zend.feed.writer.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. <classname>Zend_Feed_Writer</classname> ist die Bruderkomponente zu
  10. <classname>Zend_Feed_Reader</classname> und verantwortlich für die Erzeugung von
  11. Feeds für die Ausgabe. Sie unterstützt die Atom 1.0 Spezifikation (RFC 4287) und
  12. RSS 2.0 wie vom RSS Advisory Board (RSS 2.0.11) spezifiziert. Es ist kein Nachkomme
  13. dieser Standard. Trotzdem bietet es ein einfaches System der Erweiterung welches es
  14. erlaube jede Erweiterung/Modul für jede der zwei Spezifikationen zu implementieren
  15. wenn diese nicht von Haus aus angeboten werden.
  16. </para>
  17. <para>
  18. Auf vielen Wegen ist <classname>Zend_Feed_Writer</classname> das Gegenteil von
  19. <classname>Zend_Feed_Reader</classname>. Wobei <classname>Zend_Feed_Reader</classname>
  20. darauf fokusiert ist ein einfach zu verwendendes Architektur Frontend durch Getter
  21. Methoden anzubieten, und <classname>Zend_Feed_Writer</classname> durch ähnlich
  22. benannte Setter oder Mutatoren. Das stellt sicher das die API keine weitere Lernkurve
  23. erfordert wenn jemand bereits mit <classname>Zend_Feed_Reader</classname> bekannt ist.
  24. </para>
  25. <para>
  26. Als Ergebnis dieses Designs, ist der Rest sogar einleuchtend. Dahinter, wird jedes
  27. Datenset eines <classname>Zend_Feed_Reader</classname> Objekts wärend der
  28. Darstellungszeit in ein <classname>DOMDocument</classname> Objekt übersetzt indem die
  29. notwendigen Feed Elemente verwendet werden. Für jeden unterstützten Feed Typen gibt es
  30. beide, sowohl einen Atom 1.0 als auch einen RSS 2.0 Renderer. Die Verwendung von
  31. <classname>DOMDocument</classname> statt einer Template Lösung hat viele Vorteile.
  32. Der offensichtlichste ist die Möglichkeit das <classname>DOMDocument</classname> zu
  33. exportieren um es weiter zu bearbeiten und auf PHP DOM für die Korrakturen und
  34. richtige Darstellung zu setzen.
  35. </para>
  36. <para>
  37. Wie bei <classname>Zend_Feed_Reader</classname> ist
  38. <classname>Zend_Feed_Writer</classname> ein alleinstehender Ersatz für
  39. <classname>Zend_Feed</classname>'s Builder Architektur und nicht kompatibel mit diesen
  40. Klassen.
  41. </para>
  42. </sect2>
  43. <sect2 id="zend.feed.writer.architecture">
  44. <title>Architektur</title>
  45. <para>
  46. Die Architektur von <classname>Zend_Feed_Writer</classname> ist sehr einfach. Es hat
  47. zwei Kernsets von Klassen: Container und Renderer.
  48. </para>
  49. <para>
  50. Der Container enthält die Klassen <classname>Zend_Feed_Writer_Feed</classname> und
  51. <classname>Zend_Feed_Writer_Entry</classname>. Die Einstiegsklassen können bei jeder
  52. Feed Klasse angehängt werden. Der einzige Zweck dieses Containers ist es Daten über den
  53. zu erstellenden Feed zu sammelnindem ein einfaches Interface von Setter Methoden
  54. verwendet wird. Diese Methode führen einige Test zur Datenprüfung durch. Zum Beispiel
  55. prüft er übergebene URIs, Datum, usw. Diese Checks sind nicht an einen der Feed
  56. Standards gebunden. Das Container Objekt enthält auch Methoden welche die schnelle
  57. Darstellung und den Export des endgültigen Feeds erlauben, und Sie können auf Wunsch
  58. wiederverwendet werden.
  59. </para>
  60. <para>
  61. Wärend es zwei Daten Container gibt, gibt es vier Renderer - zwei passende Container
  62. Renderer pro unterstütztem Feed Typ. Der Renderer akzeptiert einen Container, und
  63. basierend auf seinem Container versucht er einen gültigen Feed zu erstellen. Wenn der
  64. Renderer nicht in der Lage ist einen gültigen Feed zu erstellen, möglicherweise weil dem
  65. Container ein obligatorischer Datenpunkt fehlt, dann wird er dies melden indem eine
  66. <classname>Exception</classname> geworfen wird. Wärend es möglich ist
  67. <classname>Exception</classname>s zu ignorieren, würde das diese alle standardmäßigen
  68. Sicherheiten entfernen welche sicherstellen das gültige Daten gesetzt wurden um einen
  69. komplett gültigen Feed darzustellen.
  70. </para>
  71. <para>
  72. Da das System in Datencontainer und Renderer geteilt ist, kann es Erweiterungen
  73. interessant machen. Eine typische Erweiterung welche namespaced Feeds und Entry Level
  74. Elemente bietet, muss selbst exakt die gleiche Atchitektur reflektieren, z.B. anbieten
  75. von Feed und Entry Level Daten Containern, und passenden Renderern. Das ist,
  76. glücklicherweise, keine komplexe Integrationsarbeit da alle Erweiterungsklassen einfach
  77. registriert und automatisch von den Kern Klassen verwendet werden. Wir kommen später in
  78. diesem Kapitel im Detail zu den Erweiterungen.
  79. </para>
  80. </sect2>
  81. <sect2 id="zend.feed.writer.getting.started">
  82. <title>Beginnen</title>
  83. <para>
  84. Die Verwendung von <classname>Zend_Feed_Reader</classname> ist so einfach wie das Setzen
  85. von Daten und dem Ausführen des Renderers. Hier ist ein Beispiel um einen minimalen Atom
  86. 1.0 Feed zu erstellen.
  87. </para>
  88. <programlisting language="php"><![CDATA[
  89. /**
  90. * Den Eltern Feed erstellen
  91. */
  92. $feed = new Zend_Feed_Writer_Feed;
  93. $feed->setTitle('Paddy\'s Blog');
  94. $feed->setLink('http://www.example.com');
  95. $feed->setFeedLink('http://www.example.com/atom', 'atom');
  96. $feed->addAuthor(array(
  97. 'name' => 'Paddy',
  98. 'email' => 'paddy@example.com',
  99. 'uri' => 'http://www.example.com',
  100. ));
  101. $feed->setDateModified(time());
  102. $feed->addHub('http://pubsubhubbub.appspot.com/');
  103. /**
  104. * Einen oder mehrere Einträge hinzufügen. Beachten das Einträge
  105. * manuell hinzugefügt werden müssen sobald Sie erstellt wurden
  106. */
  107. $entry = $feed->createEntry();
  108. $entry->setTitle('All Your Base Are Belong To Us');
  109. $entry->setLink('http://www.example.com/all-your-base-are-belong-to-us');
  110. $entry->addAuthor(array(
  111. 'name' => 'Paddy',
  112. 'email' => 'paddy@example.com',
  113. 'uri' => 'http://www.example.com',
  114. ));
  115. $entry->setDateModified(time());
  116. $entry->setDateCreated(time());
  117. $entry->setDescription(
  118. 'Die Schwierigkeiten erklären Spiele ins englische zu portieren.'
  119. );
  120. $entry->setContent(
  121. 'Ich schreibe diesen Artikel nicht. Das Beispiel ist lang genug ;).');
  122. $feed->addEntry($entry);
  123. /**
  124. * Den ergebenden Feed in Atom 1.0 darstellen und $out zuordnen. Man kann
  125. * "atom" mit "rss" ersetzen um einen RSS 2.0 feed zu erstellen
  126. */
  127. $out = $feed->export('atom');
  128. ]]></programlisting>
  129. <para>
  130. Die dargestellt Ausgabe sollte folgende sein:
  131. </para>
  132. <programlisting language="xml">
  133. &#60;?xml version="1.0" encoding="utf-8"?&#62;
  134. &#60;feed xmlns="http://www.w3.org/2005/Atom"&#62;
  135. &#60;title type="text"&#62;Paddy's Blog&#60;/title&#62;
  136. &#60;subtitle type="text"&#62;Writing about PC Games since 176 BC.&#60;/subtitle&#62;
  137. &#60;updated&#62;2009-12-14T20:28:18+00:00&#60;/updated&#62;
  138. &#60;generator uri="http://framework.zend.com" version="1.10.0alpha"&#62;
  139. Zend_Feed_Writer
  140. &#60;/generator&#62;
  141. &#60;link rel="alternate" type="text/html" href="http://www.example.com"/&#62;
  142. &#60;link rel="self" type="application/atom+xml" href="http://www.example.com/atom"/&#62;
  143. &#60;id&#62;http://www.example.com&#60;/id&#62;
  144. &#60;author&#62;
  145. &#60;name&#62;Paddy&#60;/name&#62;
  146. &#60;email&#62;paddy@example.com&#60;/email&#62;
  147. &#60;uri&#62;http://www.example.com&#60;/uri&#62;
  148. &#60;/author&#62;
  149. &#60;link rel="hub" href="http://pubsubhubbub.appspot.com/"/&#62;
  150. &#60;entry&#62;
  151. &#60;title type="html"&#62;&#60;![CDATA[All Your Base Are Belong To Us]]&#62;&#60;/title&#62;
  152. &#60;summary type="html"&#62;
  153. &#60;![CDATA[Die Schwierigkeiten erklären Spiele ins englische zu portieren.]]&#62;
  154. &#60;/summary&#62;
  155. &#60;published&#62;2009-12-14T20:28:18+00:00&#60;/published&#62;
  156. &#60;updated&#62;2009-12-14T20:28:18+00:00&#60;/updated&#62;
  157. &#60;link rel="alternate" type="text/html" href="http://www.example.com/all-your-base-are-belong-to-us"/&#62;
  158. &#60;id&#62;http://www.example.com/all-your-base-are-belong-to-us&#60;/id&#62;
  159. &#60;author&#62;
  160. &#60;name&#62;Paddy&#60;/name&#62;
  161. &#60;email&#62;paddy@example.com&#60;/email&#62;
  162. &#60;uri&#62;http://www.example.com&#60;/uri&#62;
  163. &#60;/author&#62;
  164. &#60;content type="html"&#62;
  165. &#60;![CDATA[Ich schreibe diesen Artikel nicht. Das Beispiel ist lang genug ;).]]&#62;
  166. &#60;/content&#62;
  167. &#60;/entry&#62;
  168. &#60;/feed&#62;
  169. </programlisting>
  170. <para>
  171. Das ist ein perfekt gültiges Beispiel für Atom 1.0. Es sollte erwähnt sein das die
  172. Unterdrückung von obligatorischen Datenpunkten, wie dem Titel, eine
  173. <classname>Exception</classname> werfen wenn diese als Atom 1.0 dargestellt werden.
  174. Das unterscheidet sich für RSS 2.0 wo ein Titel unterdrückt werden kann solange eine
  175. Beschreibung vorhanden ist. Dadurch werden Exceptions geworfen die sich zwischen beiden
  176. Standards unterscheiden abhängig vom Renderer der Verwendet wird. Vom Design her wird
  177. <classname>Zend_Feed_Writer</classname> einen ungültigen Feed für keinen Standard
  178. darstellen solange der End-Benutzer nicht definiert das alle Exceptions ignoriert werden
  179. sollen.
  180. </para>
  181. </sect2>
  182. <sect2 id="zend.feed.writer.setting.feed.data.points">
  183. <title>Die Datenpunkte eines Feeds setzen</title>
  184. <para>
  185. Bevor ein Feed dargestellt werden kann, müssen zuerst die notwendigen Daten, für den
  186. Feed der dargestellt werden soll, gesetzt werden. Hierbei wird eine einfache Setter
  187. artige API verwendet welche auch als initiale Methode für die Prüfung von Daten herhält
  188. wenn diese gesetzt werden. Vom Design her entspricht die API stark der von
  189. <classname>Zend_Feed_Reader</classname> um Unklarheiten und Unsicherheiten zu vermeiden.
  190. </para>
  191. <para>
  192. <classname>Zend_Feed_Writer</classname> bietet diese API über seine Datencontainer
  193. Klassen <classname>Zend_Feed_Writer_Feed</classname> und
  194. <classname>Zend_Feed_Writer_Entry</classname> an. Diese Klassen speichern nahezu alle
  195. Feed Daten in einer vom Typ unabhängigen Art, was bedeutet das man jeden Datencontainer
  196. mit jedem Renderer wiederverwenden kann ohne das zusätzliche Arbeit notwendig ist. Beide
  197. Klassen sind auch offen für Erweiterungen, was bedeutet das eine Erweiterung seine
  198. eigenen Containerklassen definieren kann welche bei den Basis Containerklassen als
  199. Erweiterung registriert sind, und geprüft werden sobald irgendein Methodenaufruf die
  200. <methodname>__call()</methodname> Methode des Basiscontainers auslöst.
  201. </para>
  202. <para>
  203. Hier ist eine Zusammenfassung der Kern <acronym>API</acronym> für Feeds. Man sollte
  204. beachten das Sie nicht nur die Standards für <acronym>RSS</acronym> und Atom umfasst,
  205. sondern auch eine Anzahl von Erweiterungen welche in
  206. <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benamung dieser Erweiterungs
  207. Methoden ist recht generisch - alle Erweiterungs Methoden arbeiten auf dem gleichen
  208. Level wie die Kern <acronym>API</acronym> da wir es erlauben jedes Erweiterungs Objekt
  209. seperat zu empfangen wenn das notwendig ist.
  210. </para>
  211. <table>
  212. <title>API Methoden auf Feed Level</title>
  213. <tgroup cols="2">
  214. <tbody>
  215. <row>
  216. <entry><methodname>setId()</methodname></entry>
  217. <entry>
  218. Setzt eine eindeutige ID die mit diesem Feed assoziiert ist. Für Atom
  219. 1.0 ist das ein atom:id Element, und für RSS 2.0 wird es als guid
  220. Element hinzugefügt. Diese sind optional solange ein Link hinzugefügt
  221. wird, wenn z.B. der Link als ID gesetzt ist.
  222. </entry>
  223. </row>
  224. <row>
  225. <entry><methodname>setTitle()</methodname></entry>
  226. <entry>Setzt den Titel des Feeds.</entry>
  227. </row>
  228. <row>
  229. <entry><methodname>setDescription()</methodname></entry>
  230. <entry>Setzt die textuelle Beschreibung des Feeds.</entry>
  231. </row>
  232. <row>
  233. <entry><methodname>setLink()</methodname></entry>
  234. <entry>
  235. Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym> Website
  236. welche die gleichen oder ähnliche Informationen wie dieser Feed
  237. enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
  238. <acronym>URI</acronym> des Blogs anbieten unter welche die
  239. <acronym>HTML</acronym> Version der Einträge gelesen werden können).
  240. </entry>
  241. </row>
  242. <row>
  243. <entry><methodname>setFeedLinks()</methodname></entry>
  244. <entry>
  245. Fügt einen Link zu einem XML Feed hinzu, entweder der erzeugte Feed oder
  246. eine alternative URI zeigen auf den gleichen Feed, aber in einem
  247. anderen Format. Es ist mindestens notwendig einen Link zum erstellten
  248. Feed zu inkludieren damit dieser eine identifizierbare endgültige URI
  249. hat, welche es dem Client erlaubt Änderungen des Orts mitzubekommen ohne
  250. das dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array
  251. von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri"
  252. enthält. Der Type sollte "atom", "rss" oder "rdf" sein. Wenn ein Typ
  253. unterdrückt wird, ist er standardmäßig mit dem Typ identisch mit dem
  254. der Feed dargestellt wird.
  255. </entry>
  256. </row>
  257. <row>
  258. <entry><methodname>setAuthors()</methodname></entry>
  259. <entry>
  260. Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays
  261. wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
  262. enthalten kann. Der Wert "uri ist nur für Atom Feeds anwendbar da RSS
  263. keine möglichkeit enthält Ihn anzuzeigen. Für RSS 2.0 werden bei der
  264. Darstellung zwei Elemente erzeugt - ein Autor Element welches die
  265. Referenz zur Email enthält und dem Namen in Klammern, und ein Dublin
  266. Core Creator Element welches nur den Namen enthält.
  267. </entry>
  268. </row>
  269. <row>
  270. <entry><methodname>setAuthor()</methodname></entry>
  271. <entry>
  272. Setzt die Daten für einen einzelnen Autor und folgt dem selben Format
  273. wie vorher für ein einzelnes Unter-Array beschrieben.
  274. </entry>
  275. </row>
  276. <row>
  277. <entry><methodname>setDateCreated()</methodname></entry>
  278. <entry>
  279. Setzt das Datum an dem dieser Feed erstellt wurde. Generell nur
  280. für Atom anwendbar wo es das Datum beschreibt zu der die Ressource,
  281. die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
  282. erwartete Parameter muss ein UNIX Timestamp oder ein
  283. <classname>Zend_Date</classname> Objekt sein.
  284. </entry>
  285. </row>
  286. <row>
  287. <entry><methodname>getDateModified()</methodname></entry>
  288. <entry>
  289. Setzt das Datum zu dem dieser Feed das letzte Mal geändert wurde. Der
  290. erwartete Parameter muss ein UNIX Timestamp oder ein
  291. <classname>Zend_Date</classname> Objekt sein.
  292. </entry>
  293. </row>
  294. <row>
  295. <entry><methodname>setLanguage()</methodname></entry>
  296. <entry>
  297. Setzt die Sprache des Feeds. Diese wird unterdrückt solange Sie nicht
  298. gesetzt ist.
  299. </entry>
  300. </row>
  301. <row>
  302. <entry><methodname>getGenerator()</methodname></entry>
  303. <entry>
  304. Erlaubt es einen Generator zu setzen. Der Parameter sollte ein Array
  305. sein welche die Schlüssel "name", "version" und "uri" enthält. Wenn er
  306. unterdrückt wird, wird ein standardmäßiger Generator hinzugefügt welcher
  307. auf <classname>Zend_Feed_Writer</classname>, die aktuelle Version vom
  308. Zend Framework und die URI des Frameworks verweist.
  309. </entry>
  310. </row>
  311. <row>
  312. <entry><methodname>setCopyright()</methodname></entry>
  313. <entry>
  314. Setzt eine Copyright Notiz die mit dem Feed assoziiert ist.
  315. </entry>
  316. </row>
  317. <row>
  318. <entry><methodname>setHubs()</methodname></entry>
  319. <entry>
  320. Akzeptiert ein Array von Pubsubhubbub Hub Endpunkten die im Feed als
  321. Atom Links dargestellt werden damit PuSH Abonnenten den eigenen Feed
  322. abbonieren können. Es ist zu beachten das man einen Pubsubhubbub
  323. Herausgeber implementieren muss damit Real-Time Updates ermöglicht
  324. werden. Ein Herausgeber kann implementiert werden indem
  325. <classname>Zend_Feed_Pubsubhubbub_Publisher</classname> verwendet wird.
  326. </entry>
  327. </row>
  328. <row>
  329. <entry><methodname>setCategories()</methodname></entry>
  330. <entry>
  331. Akzepziert ein Array an Kategorien für die Darstellung, wobei jedes
  332. Element selbst ein Array ist dessen möglich Schlüssel "term", "label"
  333. und "scheme" enthalten. "term" ist typischerweise der Name einer
  334. Kategorie welche für die Aufnahme in einer URI passen. "label" kann
  335. ein menschlich lesbarer Name einer Kategorie sein der spezielle Zeichen
  336. unterstützt (er wird wärend der Darstellung kodiert) und ist ein
  337. benötigter Schlüssel. "scheme" (im RSS auch die Domain genannt) ist
  338. optional muss aber eine gültige URI sein.
  339. </entry>
  340. </row>
  341. </tbody>
  342. </tgroup>
  343. </table>
  344. </sect2>
  345. <sect2 id="zend.feed.writer.setting.entry.data.points">
  346. <title>Setzen der Datenpunkt für Einträge</title>
  347. <para>
  348. Hier ist eine Zusammenfassung der Kern <acronym>API</acronym> für Einträge/Elemente.
  349. Man sollte beachten das Sie nicht nur die Standards für <acronym>RSS</acronym> und Atom
  350. umfasst, sondern auch eine Anzahl von Erweiterungen welche in
  351. <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benamung dieser Erweiterungs
  352. Methoden ist recht generisch - alle Erweiterungs Methoden arbeiten auf dem gleichen
  353. Level wie die Kern <acronym>API</acronym> da wir es erlauben jedes Erweiterungs Objekt
  354. seperat zu empfangen wenn das notwendig ist.
  355. </para>
  356. <table>
  357. <title>API Methoden auf Eintrags Level</title>
  358. <tgroup cols="2">
  359. <tbody>
  360. <row>
  361. <entry><methodname>setId()</methodname></entry>
  362. <entry>
  363. Setzt eine eindeutige ID die mit diesem Feed assoziiert ist. Für Atom
  364. 1.0 ist das ein atom:id Element, und für RSS 2.0 wird es als guid
  365. Element hinzugefügt. Diese sind optional solange ein Link hinzugefügt
  366. wird, wenn z.B. der Link als ID gesetzt ist.
  367. </entry>
  368. </row>
  369. <row>
  370. <entry><methodname>setTitle()</methodname></entry>
  371. <entry>Setzt den Titel des Feeds.</entry>
  372. </row>
  373. <row>
  374. <entry><methodname>setDescription()</methodname></entry>
  375. <entry>Setzt die textuelle Beschreibung des Feeds.</entry>
  376. </row>
  377. <row>
  378. <entry><methodname>setLink()</methodname></entry>
  379. <entry>
  380. Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym> Website
  381. welche die gleichen oder ähnliche Informationen wie dieser Feed
  382. enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
  383. <acronym>URI</acronym> des Blogs anbieten unter welche die
  384. <acronym>HTML</acronym> Version der Einträge gelesen werden können).
  385. </entry>
  386. </row>
  387. <row>
  388. <entry><methodname>setFeedLinks()</methodname></entry>
  389. <entry>
  390. Fügt einen Link zu einem XML Feed hinzu, entweder der erzeugte Feed oder
  391. eine alternative URI zeigen auf den gleichen Feed, aber in einem
  392. anderen Format. Es ist mindestens notwendig einen Link zum erstellten
  393. Feed zu inkludieren damit dieser eine identifizierbare endgültige URI
  394. hat, welche es dem Client erlaubt Änderungen des Orts mitzubekommen ohne
  395. das dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array
  396. von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri"
  397. enthält. Der Type sollte "atom", "rss" oder "rdf" sein. Wenn ein Typ
  398. unterdrückt wird, ist er standardmäßig mit dem Typ identisch mit dem
  399. der Feed dargestellt wird.
  400. </entry>
  401. </row>
  402. <row>
  403. <entry><methodname>setAuthors()</methodname></entry>
  404. <entry>
  405. Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays
  406. wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
  407. enthalten kann. Der Wert "uri ist nur für Atom Feeds anwendbar da RSS
  408. keine möglichkeit enthält Ihn anzuzeigen. Für RSS 2.0 werden bei der
  409. Darstellung zwei Elemente erzeugt - ein Autor Element welches die
  410. Referenz zur Email enthält und dem Namen in Klammern, und ein Dublin
  411. Core Creator Element welches nur den Namen enthält.
  412. </entry>
  413. </row>
  414. <row>
  415. <entry><methodname>setAuthor()</methodname></entry>
  416. <entry>
  417. Setzt die Daten für einen einzelnen Autor und folgt dem selben Format
  418. wie vorher für ein einzelnes Unter-Array beschrieben.
  419. </entry>
  420. </row>
  421. <row>
  422. <entry><methodname>setDateCreated()</methodname></entry>
  423. <entry>
  424. Setzt das Datum an dem dieser Feed erstellt wurde. Generell nur
  425. für Atom anwendbar wo es das Datum beschreibt zu der die Ressource,
  426. die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
  427. erwartete Parameter muss ein UNIX Timestamp oder ein
  428. <classname>Zend_Date</classname> Objekt sein.
  429. </entry>
  430. </row>
  431. <row>
  432. <entry><methodname>getDateModified()</methodname></entry>
  433. <entry>
  434. Setzt das Datum zu dem dieser Feed das letzte Mal geändert wurde. Der
  435. erwartete Parameter muss ein UNIX Timestamp oder ein
  436. <classname>Zend_Date</classname> Objekt sein.
  437. </entry>
  438. </row>
  439. <row>
  440. <entry><methodname>setLanguage()</methodname></entry>
  441. <entry>
  442. Setzt die Sprache des Feeds. Diese wird unterdrückt solange Sie nicht
  443. gesetzt ist.
  444. </entry>
  445. </row>
  446. <row>
  447. <entry><methodname>getGenerator()</methodname></entry>
  448. <entry>
  449. Erlaubt es einen Generator zu setzen. Der Parameter sollte ein Array
  450. sein welche die Schlüssel "name", "version" und "uri" enthält. Wenn er
  451. unterdrückt wird, wird ein standardmäßiger Generator hinzugefügt welcher
  452. auf <classname>Zend_Feed_Writer</classname>, die aktuelle Version vom
  453. Zend Framework und die URI des Frameworks verweist.
  454. </entry>
  455. </row>
  456. <row>
  457. <entry><methodname>setCopyright()</methodname></entry>
  458. <entry>
  459. Setzt eine Copyright Notiz die mit dem Feed assoziiert ist.
  460. </entry>
  461. </row>
  462. <row>
  463. <entry><methodname>setHubs()</methodname></entry>
  464. <entry>
  465. Akzeptiert ein Array von Pubsubhubbub Hub Endpunkten die im Feed als
  466. Atom Links dargestellt werden damit PuSH Abonnenten den eigenen Feed
  467. abbonieren können. Es ist zu beachten das man einen Pubsubhubbub
  468. Herausgeber implementieren muss damit Real-Time Updates ermöglicht
  469. werden. Ein Herausgeber kann implementiert werden indem
  470. <classname>Zend_Feed_Pubsubhubbub_Publisher</classname> verwendet wird.
  471. </entry>
  472. </row>
  473. <row>
  474. <entry><methodname>setCategories()</methodname></entry>
  475. <entry>
  476. Akzepziert ein Array an Kategorien für die Darstellung, wobei jedes
  477. Element selbst ein Array ist dessen möglich Schlüssel "term", "label"
  478. und "scheme" enthalten. "term" ist typischerweise der Name einer
  479. Kategorie welche für die Aufnahme in einer URI passen. "label" kann
  480. ein menschlich lesbarer Name einer Kategorie sein der spezielle Zeichen
  481. unterstützt (er wird wärend der Darstellung kodiert) und ist ein
  482. benötigter Schlüssel. "scheme" (im RSS auch die Domain genannt) ist
  483. optional muss aber eine gültige URI sein.
  484. </entry>
  485. </row>
  486. </tbody>
  487. </tgroup>
  488. </table>
  489. </sect2>
  490. </sect1>