Zend_Feed_Writer.xml 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21676 -->
  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_Writer</classname> Daten Container 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 der DOMDocument Klasse 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: Daten 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 sammeln, indem 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. eine der Feed Standard Definitionen gebunden. Das Container Objekt enthält auch Methoden
  59. welche die schnelle Darstellung und den Export des endgültigen Feeds erlauben, und Sie
  60. können auf Wunsch wiederverwendet werden.
  61. </para>
  62. <para>
  63. Zusätzlich zu den hauptsächlichen Daten Container Klassen gibt es zwei Atom 2.0
  64. spezifische Klassen. <classname>Zend_Feed_Writer_Source</classname> und
  65. <classname>Zend_Feed_Writer_Deleted</classname>. Die erstere implementiert Atom 2.0
  66. Quell-Elemente welche Feed Metadaten der Quelle für spezielle Einträge im verwendeten
  67. Feed enthalten (z.B. wenn der aktuelle Feed nicht die Originale Quelle des Eintrags
  68. enthält). Die letztere implementiert Atom Timbstones RFC und erlaubt es Feeds Referenzen
  69. zu Einträgen zu haben welche bereits gelöscht wurden.
  70. </para>
  71. <para>
  72. Wärend es zwei hauptsächliche Datencontainer-Typen gibt, gibt es vier Renderer - zwei
  73. passende Container Renderer pro unterstütztem Feed Typ. Jeder Renderer akzeptiert einen
  74. Container, und basierend auf seinem Container versucht er ein gültiges Feed-Markup zu
  75. erstellen. Wenn der Renderer nicht in der Lage ist ein gültiges Feed-Markup zu
  76. erstellen, möglicherweise weil dem Container ein obligatorischer Datenpunkt fehlt, dann
  77. wird er dies melden indem eine <classname>Exception</classname> geworfen wird. Wärend es
  78. möglich ist <classname>Exception</classname>s zu ignorieren, würde das diese alle
  79. standardmäßigen Sicherheiten entfernen welche sicherstellen das gültige Daten gesetzt
  80. wurden um einen komplett gültigen Feed darzustellen.
  81. </para>
  82. <para>
  83. Um dies etwas genauer zu erklären, kann man ein Set von Daten Containern für einen Feed
  84. erstellen wobei es einen Feed Container gibt in dem einige Entry Container hinzugefügt
  85. wurden und ein Deleted (gelöschter) Container. Dies formt eine Daten Hierarchie die
  86. einen normalen Feed nachstellt. Wenn die Darstellung durchgeführt wird, dann übergibt
  87. diese Hierarchie Ihre Teile den betreffenden Darstellern und die partiellen Feeds (alle
  88. DOMDocuments) werden dann zusammen geworfen um einen kompletten Feed zu erstellen. Im
  89. Falle von Source oder Deleted (Tomestone) Containern werden diese nur für Atom 2.0
  90. dargestellt und für RSS ignoriert.
  91. </para>
  92. <para>
  93. Da das System in Datencontainer und Renderer geteilt ist, kann es Erweiterungen
  94. interessant machen. Eine typische Erweiterung welche namespaced Feeds und Entry Level
  95. Elemente bietet, muss selbst exakt die gleiche Atchitektur reflektieren, z.B. anbieten
  96. von Feed und Entry Level Daten Containern, und passenden Renderern. Das ist,
  97. glücklicherweise, keine komplexe Integrationsarbeit da alle Erweiterungsklassen einfach
  98. registriert und automatisch von den Kern Klassen verwendet werden. Wir kommen später in
  99. diesem Kapitel im Detail zu den Erweiterungen.
  100. </para>
  101. </sect2>
  102. <sect2 id="zend.feed.writer.getting.started">
  103. <title>Beginnen</title>
  104. <para>
  105. Die Verwendung von <classname>Zend_Feed_Reader</classname> ist so einfach wie das Setzen
  106. von Daten und dem Ausführen des Renderers. Hier ist ein Beispiel um einen minimalen Atom
  107. 1.0 Feed zu erstellen. Dies demonstriert dass jeder Feed oder Eintrag einen eigenen
  108. Container verwendet.
  109. </para>
  110. <programlisting language="php"><![CDATA[
  111. /**
  112. * Den Eltern Feed erstellen
  113. */
  114. $feed = new Zend_Feed_Writer_Feed;
  115. $feed->setTitle('Paddy\'s Blog');
  116. $feed->setLink('http://www.example.com');
  117. $feed->setFeedLink('http://www.example.com/atom', 'atom');
  118. $feed->addAuthor(array(
  119. 'name' => 'Paddy',
  120. 'email' => 'paddy@example.com',
  121. 'uri' => 'http://www.example.com',
  122. ));
  123. $feed->setDateModified(time());
  124. $feed->addHub('http://pubsubhubbub.appspot.com/');
  125. /**
  126. * Einen oder mehrere Einträge hinzufügen. Beachten das Einträge
  127. * manuell hinzugefügt werden müssen sobald Sie erstellt wurden
  128. */
  129. $entry = $feed->createEntry();
  130. $entry->setTitle('All Your Base Are Belong To Us');
  131. $entry->setLink('http://www.example.com/all-your-base-are-belong-to-us');
  132. $entry->addAuthor(array(
  133. 'name' => 'Paddy',
  134. 'email' => 'paddy@example.com',
  135. 'uri' => 'http://www.example.com',
  136. ));
  137. $entry->setDateModified(time());
  138. $entry->setDateCreated(time());
  139. $entry->setDescription(
  140. 'Die Schwierigkeiten erklären Spiele ins englische zu portieren.'
  141. );
  142. $entry->setContent(
  143. 'Ich schreibe diesen Artikel nicht. Das Beispiel ist lang genug ;).');
  144. $feed->addEntry($entry);
  145. /**
  146. * Den ergebenden Feed in Atom 1.0 darstellen und $out zuordnen. Man kann
  147. * "atom" mit "rss" ersetzen um einen RSS 2.0 feed zu erstellen
  148. */
  149. $out = $feed->export('atom');
  150. ]]></programlisting>
  151. <para>
  152. Die dargestellt Ausgabe sollte folgende sein:
  153. </para>
  154. <programlisting language="xml"><![CDATA[
  155. <?xml version="1.0" encoding="utf-8"?>
  156. <feed xmlns="http://www.w3.org/2005/Atom">
  157. <title type="text">Paddy's Blog</title>
  158. <subtitle type="text">Writing about PC Games since 176 BC.</subtitle>
  159. <updated>2009-12-14T20:28:18+00:00</updated>
  160. <generator uri="http://framework.zend.com" version="1.10.0alpha">
  161. Zend_Feed_Writer
  162. </generator>
  163. <link rel="alternate" type="text/html" href="http://www.example.com"/>
  164. <link rel="self" type="application/atom+xml"
  165. href="http://www.example.com/atom"/>
  166. <id>http://www.example.com</id>
  167. <author>
  168. <name>Paddy</name>
  169. <email>paddy@example.com</email>
  170. <uri>http://www.example.com</uri>
  171. </author>
  172. <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  173. <entry>
  174. <title type="html"><![CDATA[All Your Base Are Belong To
  175. Us]]]]><![CDATA[></title>
  176. <summary type="html">
  177. <![CDATA[Exposing the difficultly of porting games to
  178. English.]]]]><![CDATA[>
  179. </summary>
  180. <published>2009-12-14T20:28:18+00:00</published>
  181. <updated>2009-12-14T20:28:18+00:00</updated>
  182. <link rel="alternate" type="text/html"
  183. href="http://www.example.com/all-your-base-are-belong-to-us"/>
  184. <id>http://www.example.com/all-your-base-are-belong-to-us</id>
  185. <author>
  186. <name>Paddy</name>
  187. <email>paddy@example.com</email>
  188. <uri>http://www.example.com</uri>
  189. </author>
  190. <content type="html">
  191. <![CDATA[I am not writing the article.
  192. The example is long enough as is ;).]]]]><![CDATA[>
  193. </content>
  194. </entry>
  195. </feed>
  196. ]]></programlisting>
  197. <para>
  198. Das ist ein perfekt gültiges Beispiel für Atom 1.0. Es sollte erwähnt sein das die
  199. Unterdrückung von obligatorischen Datenpunkten, wie dem Titel, eine
  200. <classname>Exception</classname> werfen wenn diese als Atom 1.0 dargestellt werden.
  201. Das unterscheidet sich für <acronym>RSS</acronym> 2.0 wo ein Titel unterdrückt werden
  202. kann solange eine Beschreibung vorhanden ist. Dadurch werden Exceptions geworfen die
  203. sich zwischen beiden Standards unterscheiden abhängig vom Renderer der Verwendet wird.
  204. Vom Design her wird <classname>Zend_Feed_Writer</classname> einen ungültigen Feed für
  205. keinen Standard darstellen solange der End-Benutzer nicht definiert das alle Exceptions
  206. ignoriert werden sollen. Diese eingebaute Sicherheit wurde hinzugefügt um
  207. sicherzustellen dass sich Benutzer ohne tiefe Kenntnisse der betreffenden
  208. Spezifikationen keine Sorgen machen muss.
  209. </para>
  210. </sect2>
  211. <sect2 id="zend.feed.writer.setting.feed.data.points">
  212. <title>Die Datenpunkte eines Feeds setzen</title>
  213. <para>
  214. Bevor ein Feed dargestellt werden kann, müssen zuerst die notwendigen Daten, für den
  215. Feed der dargestellt werden soll, gesetzt werden. Hierbei wird eine einfache Setter
  216. artige <acronym>API</acronym> verwendet welche auch als initiale Methode für die Prüfung
  217. von Daten herhält wenn diese gesetzt werden. Vom Design her entspricht die
  218. <acronym>API</acronym> stark der von <classname>Zend_Feed_Reader</classname> um
  219. Unklarheiten und Unsicherheiten zu vermeiden.
  220. </para>
  221. <note>
  222. <para>
  223. Benutzer haben angemerkt dass das nicht Vorhandensein einer einfachen Array
  224. Schreibweise für Eingabedaten zu langen Codeabschnitten führt. Das wird in
  225. zukünftigen Versionen behoben.
  226. </para>
  227. </note>
  228. <para>
  229. <classname>Zend_Feed_Writer</classname> bietet diese <acronym>API</acronym> über seine
  230. Datencontainer Klassen <classname>Zend_Feed_Writer_Feed</classname> und
  231. <classname>Zend_Feed_Writer_Entry</classname> an (nicht zu erwähnen die Atom 2.0
  232. spezifischen Erweiterungsklassen). Diese Klassen speichern nahezu alle
  233. Feed Daten in einer vom Typ unabhängigen Art, was bedeutet das man jeden Datencontainer
  234. mit jedem Renderer wiederverwenden kann ohne das zusätzliche Arbeit notwendig ist. Beide
  235. Klassen sind auch offen für Erweiterungen, was bedeutet das eine Erweiterung seine
  236. eigenen Containerklassen definieren kann welche bei den Basis Containerklassen als
  237. Erweiterung registriert sind, und geprüft werden sobald irgendein Methodenaufruf die
  238. <methodname>__call()</methodname> Methode des Basiscontainers auslöst.
  239. </para>
  240. <para>
  241. Hier ist eine Zusammenfassung der Kern <acronym>API</acronym> für Feeds. Man sollte
  242. beachten das Sie nicht nur die Standards für <acronym>RSS</acronym> und Atom umfasst,
  243. sondern auch eine Anzahl von Erweiterungen welche in
  244. <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benamung dieser Erweiterungs
  245. Methoden ist recht generisch - alle Erweiterungs Methoden arbeiten auf dem gleichen
  246. Level wie die Kern <acronym>API</acronym> da wir es erlauben jedes Erweiterungs Objekt
  247. seperat zu empfangen wenn das notwendig ist.
  248. </para>
  249. <para>
  250. Die API für Daten auf Level des Feeds ist in
  251. <classname>Zend_Feed_Writer_Feed</classname> enthalten. Zusätzlich zu der anbei
  252. beschriebenen API, implementiert die Klasse auch die Interfaces
  253. <classname>Countable</classname> und <classname>Iterator</classname>.
  254. </para>
  255. <table>
  256. <title>API Methoden auf Feed Level</title>
  257. <tgroup cols="2">
  258. <tbody>
  259. <row>
  260. <entry><methodname>setId()</methodname></entry>
  261. <entry>
  262. Setzt eine eindeutige ID die mit diesem Feed assoziiert ist. Für Atom
  263. 1.0 ist das ein atom:id Element, und für <acronym>RSS</acronym> 2.0 wird
  264. es als guid Element hinzugefügt. Diese sind optional solange ein Link
  265. hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist.
  266. </entry>
  267. </row>
  268. <row>
  269. <entry><methodname>setTitle()</methodname></entry>
  270. <entry>Setzt den Titel des Feeds.</entry>
  271. </row>
  272. <row>
  273. <entry><methodname>setDescription()</methodname></entry>
  274. <entry>Setzt die textuelle Beschreibung des Feeds.</entry>
  275. </row>
  276. <row>
  277. <entry><methodname>setLink()</methodname></entry>
  278. <entry>
  279. Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym> Website
  280. welche die gleichen oder ähnliche Informationen wie dieser Feed
  281. enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
  282. <acronym>URI</acronym> des Blogs anbieten unter welche die
  283. <acronym>HTML</acronym> Version der Einträge gelesen werden können).
  284. </entry>
  285. </row>
  286. <row>
  287. <entry><methodname>setFeedLinks()</methodname></entry>
  288. <entry>
  289. Fügt einen Link zu einem <acronym>XML</acronym> Feed hinzu, entweder der
  290. erzeugte Feed oder eine alternative <acronym>URI</acronym> zeigen auf
  291. den gleichen Feed, aber in einem anderen Format. Es ist mindestens
  292. notwendig einen Link zum erstellten Feed zu inkludieren damit dieser
  293. eine identifizierbare endgültige <acronym>URI</acronym> hat, welche es
  294. dem Client erlaubt Änderungen des Orts mitzubekommen ohne das dauernde
  295. Umleitungen notwendig sind. Dieser Parameter ist ein Array von Arrays,
  296. wobei jedes Unter-Array die Schlüssel "type" und "uri" enthält. Der Type
  297. sollte "atom", "rss" oder "rdf" sein.
  298. </entry>
  299. </row>
  300. <row>
  301. <entry><methodname>addAuthors()</methodname></entry>
  302. <entry>
  303. Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays
  304. wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
  305. enthalten kann. Der Wert "uri ist nur für Atom Feeds anwendbar da
  306. <acronym>RSS</acronym> keine Möglichkeit enthält Ihn anzuzeigen. Für
  307. <acronym>RSS</acronym> 2.0 werden bei der Darstellung zwei Elemente
  308. erzeugt - ein Autor Element welches die Referenz zur Email enthält und
  309. dem Namen in Klammern, und ein Dublin Core Creator Element welches nur
  310. den Namen enthält.
  311. </entry>
  312. </row>
  313. <row>
  314. <entry><methodname>addAuthor()</methodname></entry>
  315. <entry>
  316. Setzt die Daten für einen einzelnen Autor und folgt dem selben Array
  317. Format wie vorher für ein einzelnes Unter-Array beschrieben.
  318. </entry>
  319. </row>
  320. <row>
  321. <entry><methodname>setDateCreated()</methodname></entry>
  322. <entry>
  323. Setzt das Datum an dem dieser Feed erstellt wurde. Generell nur
  324. für Atom anwendbar wo es das Datum beschreibt zu der die Ressource,
  325. die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
  326. erwartete Parameter muss ein <acronym>UNIX</acronym> Timestamp oder ein
  327. <classname>Zend_Date</classname> Objekt sein.
  328. </entry>
  329. </row>
  330. <row>
  331. <entry><methodname>setDateModified()</methodname></entry>
  332. <entry>
  333. Setzt das Datum zu dem dieser Feed das letzte Mal geändert wurde. Der
  334. erwartete Parameter muss ein <acronym>UNIX</acronym> Timestamp oder ein
  335. <classname>Zend_Date</classname> Objekt sein.
  336. </entry>
  337. </row>
  338. <row>
  339. <entry><methodname>setLanguage()</methodname></entry>
  340. <entry>
  341. Setzt die Sprache des Feeds. Diese wird unterdrückt solange Sie nicht
  342. gesetzt ist.
  343. </entry>
  344. </row>
  345. <row>
  346. <entry><methodname>getGenerator()</methodname></entry>
  347. <entry>
  348. Erlaubt es einen Generator zu setzen. Der Parameter sollte ein Array
  349. sein welche die Schlüssel "name", "version" und "uri" enthält. Wenn er
  350. unterdrückt wird, wird ein standardmäßiger Generator hinzugefügt welcher
  351. auf <classname>Zend_Feed_Writer</classname>, die aktuelle Version vom
  352. Zend Framework und die <acronym>URI</acronym> des Frameworks verweist.
  353. </entry>
  354. </row>
  355. <row>
  356. <entry><methodname>setCopyright()</methodname></entry>
  357. <entry>Setzt eine Copyright Notiz die mit dem Feed assoziiert ist.</entry>
  358. </row>
  359. <row>
  360. <entry><methodname>addHubs()</methodname></entry>
  361. <entry>
  362. Akzeptiert ein Array von Pubsubhubbub Hub Endpunkten die im Feed als
  363. Atom Links dargestellt werden damit PuSH Abonnenten den eigenen Feed
  364. abbonieren können. Es ist zu beachten das man einen Pubsubhubbub
  365. Herausgeber implementieren muss damit Real-Time Updates ermöglicht
  366. werden. Ein Herausgeber kann implementiert werden indem
  367. <classname>Zend_Feed_Pubsubhubbub_Publisher</classname> verwendet wird.
  368. Die Methode <methodname>addHub()</methodname> erlaubt es gleichzeitig
  369. nur einen Hub hinzuzufügen.
  370. </entry>
  371. </row>
  372. <row>
  373. <entry><methodname>addCategories()</methodname></entry>
  374. <entry>
  375. Akzepziert ein Array an Kategorien für die Darstellung, wobei jedes
  376. Element selbst ein Array ist dessen möglich Schlüssel "term", "label"
  377. und "scheme" enthalten. "term" ist typischerweise der Name einer
  378. Kategorie welche für die Aufnahme in einer <acronym>URI</acronym>
  379. passen. "label" kann ein menschlich lesbarer Name einer Kategorie sein
  380. der spezielle Zeichen unterstützt (er wird wärend der Darstellung
  381. kodiert) und ist ein benötigter Schlüssel. "scheme" (im
  382. <acronym>RSS</acronym> auch die Domain genannt) ist optional muss aber
  383. eine gültige <acronym>URI</acronym> sein. Die Methode
  384. <methodname>addCategory()</methodname> erlaubt es gleichzeitig nur eine
  385. Kategorie hinzuzufügen.
  386. </entry>
  387. </row>
  388. <row>
  389. <entry><methodname>createEntry()</methodname></entry>
  390. <entry>
  391. Gibt eine neue Instanz von <classname>Zend_Feed_Writer_Entry</classname>
  392. zurück. Das ist der Daten Container auf Level des Eintrags. Neue
  393. Einträge müssen <methodname>addEntry()</methodname> explizit aufrufen um
  394. Einträge für die Darstellung hinzuzufügen.
  395. </entry>
  396. </row>
  397. <row>
  398. <entry><methodname>addEntry()</methodname></entry>
  399. <entry>
  400. Fügt eine Instanz von <classname>Zend_Feed_Writer_Entry</classname> zum
  401. aktuellen Feed Container für die Darstellung hinzu.
  402. </entry>
  403. </row>
  404. <row>
  405. <entry><methodname>createTombstone()</methodname></entry>
  406. <entry>
  407. Gibt eine neue Instanz von
  408. <classname>Zend_Feed_Writer_Deleted</classname> zurück. Das ist der
  409. Daten Container auf Level des Atom 2.0 Tombstone. Neue Einträge werden
  410. dem aktuellen Feed nicht automatisch zugeordnet. Man muss also
  411. <methodname>addTombstone()</methodname> explizit aufrufen um den
  412. gelöschten Eintrag für die Darstellung hinzuzufügen.
  413. </entry>
  414. </row>
  415. <row>
  416. <entry><methodname>addTombstone()</methodname></entry>
  417. <entry>
  418. Fügt dem aktuellen Feed Container eine Instanz von
  419. <classname>Zend_Feed_Writer_Deleted</classname> für die Darstellung
  420. hinzu.
  421. </entry>
  422. </row>
  423. <row>
  424. <entry><methodname>removeEntry()</methodname></entry>
  425. <entry>
  426. Akzeptiert einen Parameter welche des Array Index eines Eintrags
  427. anzeigt welche vom Feed zu entfernen ist.
  428. </entry>
  429. </row>
  430. <row>
  431. <entry><methodname>export()</methodname></entry>
  432. <entry>
  433. Exportiert die komplette Datenhierarchie in einen XML Feed. Die Methode
  434. has zwei Parameter. Der erste ist der Feedtyp, entweder "atom" oder
  435. "rss". Der zweite in ein optionaler Boolean der zeigt ob Exceptions
  436. geworfen werden oder nicht. Er ist Standardmäßig TRUE.
  437. </entry>
  438. </row>
  439. </tbody>
  440. </tgroup>
  441. </table>
  442. <note>
  443. <para>
  444. Zusätzlich zu diesen Settern gibt es passende Getter um Daten von den
  445. Eintrags-Daten-Containern zu erhalten.
  446. </para>
  447. </note>
  448. <!-- remaining feed stuff -->
  449. </sect2>
  450. <sect2 id="zend.feed.writer.setting.entry.data.points">
  451. <title>Setzen der Datenpunkt für Einträge</title>
  452. <para>
  453. Hier ist eine Zusammenfassung der Kern <acronym>API</acronym> für Einträge und Elemente.
  454. Man sollte beachten das Sie nicht nur die Standards für <acronym>RSS</acronym> und Atom
  455. umfasst, sondern auch eine Anzahl von Erweiterungen welche in
  456. <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benamung dieser Erweiterungs
  457. Methoden ist recht generisch - alle Erweiterungs Methoden arbeiten auf dem gleichen
  458. Level wie die Kern <acronym>API</acronym> da wir es erlauben jedes Erweiterungs Objekt
  459. seperat zu empfangen wenn das notwendig ist.
  460. </para>
  461. <para>
  462. Die API auf Level des Eintrags ist in <classname>Zend_Feed_Writer_Entry</classname>
  463. enthalten.
  464. </para>
  465. <table>
  466. <title>API Methoden auf Eintrags Level</title>
  467. <tgroup cols="2">
  468. <tbody>
  469. <row>
  470. <entry><methodname>setId()</methodname></entry>
  471. <entry>
  472. Setzt eine eindeutige ID die mit diesem Eintrag assoziiert ist. Für Atom
  473. 1.0 ist das ein atom:id Element, und für <acronym>RSS</acronym> 2.0 wird
  474. es als guid Element hinzugefügt. Diese sind optional solange ein Link
  475. hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist.
  476. </entry>
  477. </row>
  478. <row>
  479. <entry><methodname>setTitle()</methodname></entry>
  480. <entry>Setzt den Titel des Eintrags.</entry>
  481. </row>
  482. <row>
  483. <entry><methodname>setDescription()</methodname></entry>
  484. <entry>Setzt die textuelle Beschreibung des Eintrags.</entry>
  485. </row>
  486. <row>
  487. <entry><methodname>setContent()</methodname></entry>
  488. <entry>Setzt den Inhalt des Eintrags.</entry>
  489. </row>
  490. <row>
  491. <entry><methodname>setLink()</methodname></entry>
  492. <entry>
  493. Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym> Website
  494. welche die gleichen oder ähnliche Informationen wie dieser Eintrag
  495. enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
  496. <acronym>URI</acronym> des Blog Artikels anbieten unter welche die
  497. <acronym>HTML</acronym> Version des Eintrags gelesen werden kann).
  498. </entry>
  499. </row>
  500. <row>
  501. <entry><methodname>setFeedLinks()</methodname></entry>
  502. <entry>
  503. Fügt einen Link zu einem <acronym>XML</acronym> Feed hinzu, entweder der
  504. erzeugte Feed oder eine alternative <acronym>URI</acronym> zeigen auf
  505. den gleichen Feed, aber in einem anderen Format. Es ist mindestens
  506. notwendig einen Link zum erstellten Feed zu inkludieren damit dieser
  507. eine identifizierbare endgültige <acronym>URI</acronym> hat, welche es
  508. dem Client erlaubt Änderungen des Orts mitzubekommen ohne
  509. das dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array
  510. von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri"
  511. enthält. Der Type sollte "atom", "rss" oder "rdf" sein. Wenn ein Typ
  512. unterdrückt wird, ist er standardmäßig mit dem Typ identisch mit dem
  513. der Feed dargestellt wird.
  514. </entry>
  515. </row>
  516. <row>
  517. <entry><methodname>addAuthors()</methodname></entry>
  518. <entry>
  519. Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays
  520. wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
  521. enthalten kann. Der Wert "uri ist nur für Atom Feeds anwendbar da
  522. <acronym>RSS</acronym> keine Möglichkeit enthält Ihn anzuzeigen. Für
  523. <acronym>RSS</acronym> 2.0 werden bei der Darstellung zwei Elemente
  524. erzeugt - ein Autor Element welches die Referenz zur Email enthält und
  525. dem Namen in Klammern, und ein Dublin Core Creator Element welches nur
  526. den Namen enthält.
  527. </entry>
  528. </row>
  529. <row>
  530. <entry><methodname>addAuthor()</methodname></entry>
  531. <entry>
  532. Setzt die Daten für einen einzelnen Autor und folgt dem selben Format
  533. wie vorher für ein einzelnes Unter-Array beschrieben.
  534. </entry>
  535. </row>
  536. <row>
  537. <entry><methodname>setDateCreated()</methodname></entry>
  538. <entry>
  539. Setzt das Datum an dem dieser Feed erstellt wurde. Generell nur
  540. für Atom anwendbar wo es das Datum beschreibt zu der die Ressource,
  541. die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
  542. erwartete Parameter muss ein <acronym>UNIX</acronym> Timestamp oder ein
  543. <classname>Zend_Date</classname> Objekt sein. Wenn es nicht angegeben
  544. wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle
  545. Zeit sein.
  546. </entry>
  547. </row>
  548. <row>
  549. <entry><methodname>getDateModified()</methodname></entry>
  550. <entry>
  551. Setzt das Datum zu dem dieser Feed das letzte Mal geändert wurde. Der
  552. erwartete Parameter muss ein <acronym>UNIX</acronym> Timestamp oder ein
  553. <classname>Zend_Date</classname> Objekt sein. Wenn es nicht angegeben
  554. wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle
  555. Zeit sein.
  556. </entry>
  557. </row>
  558. <row>
  559. <entry><methodname>setCopyright()</methodname></entry>
  560. <entry>
  561. Setzt eine Copyright Notiz welche mit dem Feed assoziiert wird.
  562. </entry>
  563. </row>
  564. <row>
  565. <entry><methodname>setCategories()</methodname></entry>
  566. <entry>
  567. Akzepziert ein Array an Kategorien für die Darstellung, wobei jedes
  568. Element selbst ein Array ist dessen möglich Schlüssel "term", "label"
  569. und "scheme" enthalten. "term" ist typischerweise der Name einer
  570. Kategorie welche für die Aufnahme in einer <acronym>URI</acronym>
  571. passen. "label" kann ein menschlich lesbarer Name einer Kategorie sein
  572. der spezielle Zeichen unterstützt (er wird wärend der Darstellung
  573. kodiert) und ist ein benötigter Schlüssel. "scheme" (im
  574. <acronym>RSS</acronym> auch die Domain genannt) ist optional muss aber
  575. eine gültige <acronym>URI</acronym> sein.
  576. </entry>
  577. </row>
  578. <row>
  579. <entry><methodname>setCommentCount()</methodname></entry>
  580. <entry>
  581. Setzt die Anzahl an Kommentaren welche mit diesem Eintrag assoziiert
  582. sind. Die Darstellung unterscheidet sich zwischen <acronym>RSS</acronym>
  583. und Atom 2.0 abhängig vom benötigten Element oder Attribut.
  584. </entry>
  585. </row>
  586. <row>
  587. <entry><methodname>setCommentLink()</methodname></entry>
  588. <entry>
  589. Setzt einen Link zu einer HTML Seite welche Kommentare enthält die mit
  590. diesem Eintrag assoziiert sind.
  591. </entry>
  592. </row>
  593. <row>
  594. <entry><methodname>setCommentFeedLink()</methodname></entry>
  595. <entry>
  596. Setzt einen Link zu einem XML Feed welcher Kommentare enthält welche mit
  597. diesem Eintrag assoziiert sind. Der Parameter ist ein Array welches die
  598. Schlüssel "uri" und "type" enthält, wobei der Typ entweder "rdf", "rss"
  599. oder "atom" ist.
  600. </entry>
  601. </row>
  602. <row>
  603. <entry><methodname>setCommentFeedLinks()</methodname></entry>
  604. <entry>
  605. Gleich wie <methodname>setCommentFeedLink()</methodname> ausser das Sie
  606. ein Array von Array akzeptiert wobei jedes Unterarray die von
  607. <methodname>setCommentFeedLink()</methodname> erwarteten Parameter
  608. enthält.
  609. </entry>
  610. </row>
  611. <row>
  612. <entry><methodname>setEncoding()</methodname></entry>
  613. <entry>
  614. Setzt die Kodierung des Textes des Eintrags. Diese ist standardmäßig
  615. UTF-8 welche auch die bevorzugte Kodierung ist.
  616. </entry>
  617. </row>
  618. </tbody>
  619. </tgroup>
  620. </table>
  621. <note>
  622. <para>
  623. Zusätzlich zu diesen Settern gibt es passende Getter um Daten von den
  624. Eintrags-Daten-Containern zu erhalten.
  625. </para>
  626. </note>
  627. </sect2>
  628. </sect1>