Zend_Feed_Writer.xml 29 KB

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