| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 22392 -->
- <!-- Reviewed: 22392 -->
- <sect1 id="zend.feed.writer">
- <title>Zend_Feed_Writer</title>
- <sect2 id="zend.feed.writer.introduction">
- <title>Einführung</title>
- <para>
- <classname>Zend_Feed_Writer</classname> ist die Bruderkomponente zu
- <classname>Zend_Feed_Reader</classname> und verantwortlich für die Erzeugung von
- Feeds für die Ausgabe. Sie unterstützt die Atom 1.0 Spezifikation
- (<acronym>RFC</acronym> 4287) und <acronym>RSS</acronym> 2.0 wie vom
- <acronym>RSS</acronym> Advisory Board (<acronym>RSS</acronym> 2.0.11) spezifiziert. Es
- weicht nicht von diesen Standards ab. Trotzdem bietet es ein einfaches System der
- Erweiterung, welches es erlaubt jede Erweiterung und jedes Modul für jede der zwei
- Spezifikationen zu implementieren, wenn diese nicht von Haus aus angeboten werden.
- </para>
- <para>
- In vieler Hinsicht ist <classname>Zend_Feed_Writer</classname> das Gegenteil von
- <classname>Zend_Feed_Reader</classname>. Während <classname>Zend_Feed_Reader</classname>
- darauf abzielt, eine einfach zu verwendende Architektur zur Verfügung zu stellen,
- die sich durch Getter-Methoden auszeichnet, stellt <classname>Zend_Feed_Writer</classname> ähnlich
- benannte Setter oder Mutatoren bereit. Das stellt sicher, dass die <acronym>API</acronym> keine
- weitere Lernkurve aufwirft, wenn sich jemand bereits mit
- <classname>Zend_Feed_Reader</classname> auskennt.
- </para>
- <para>
- Als Ergebnis dieses Designs ist der Rest nämlich einleuchtend. Hinter den Kulissen wird jedes
- Datenset eines <classname>Zend_Feed_Writer</classname>-Daten-Containers während der
- Darstellungszeit in ein DOMDocument-Objekt übersetzt, indem die
- notwendigen Feed-Elemente verwendet werden. Für jeden unterstützten Feed-Typen gibt es
- beide, sowohl einen Atom 1.0 als auch einen <acronym>RSS</acronym> 2.0 Renderer. Die
- Verwendung der DOMDocument-Klasse statt einer Templatelösung hat viele Vorteile.
- Der offensichtlichste ist die Möglichkeit das DOMDocument zu
- exportieren, um es weiter zu bearbeiten und sich auf <acronym>PHP</acronym>
- <acronym>DOM</acronym> für die korrekte und richtige Darstellung zu verlassen.
- </para>
- <para>
- Wie bei <classname>Zend_Feed_Reader</classname> ist
- <classname>Zend_Feed_Writer</classname> ein alleinstehender Ersatz für
- <classname>Zend_Feed</classname>s Builder-Architektur und nicht kompatibel mit diesen
- Klassen.
- </para>
- </sect2>
- <sect2 id="zend.feed.writer.architecture">
- <title>Architektur</title>
- <para>
- Die Architektur von <classname>Zend_Feed_Writer</classname> ist sehr einfach. Es hat
- zwei Kernsets von Klassen: Daten-Container und Renderer.
- </para>
- <para>
- Der Container enthält die Klassen <classname>Zend_Feed_Writer_Feed</classname> und
- <classname>Zend_Feed_Writer_Entry</classname>. Die Einstiegsklassen können bei jeder
- Feed-Klasse angehängt werden. Der einzige Zweck dieses Containers ist es, Daten über den
- zu erstellenden Feed zu sammeln, indem ein einfaches Interface von Setter-Methoden
- verwendet wird. Diese Methoden führen einige Test zur Datenprüfung durch. Zum Beispiel
- prüft er übergebene <acronym>URI</acronym>s, Datum, usw. Diese Prüfungen sind nicht an
- einen der Feed-Standarddefinitionen gebunden. Das Container-Objekt enthält auch Methoden, welche die
- schnelle Darstellung und den Export des endgültigen Feeds erlauben und sie können auf
- Wunsch wiederverwendet werden.
- </para>
- <para>
- Zusätzlich zu den hauptsächlichen Datencontainerklassen gibt es zwei Atom 2.0
- spezifische Klassen. <classname>Zend_Feed_Writer_Source</classname> und
- <classname>Zend_Feed_Writer_Deleted</classname>. Die erstere implementiert Atom 2.0
- Quell-Elemente, welche Feed-Metadaten der Quelle für spezielle Einträge im verwendeten
- Feed enthalten (z.B. wenn der aktuelle Feed nicht die originale Quelle des Eintrags
- enthält). Die letztere implementiert Atom Tombstones <acronym>RFC</acronym> und erlaubt
- es Feeds, Referenzen zu Einträgen zu haben, welche bereits gelöscht wurden.
- </para>
- <para>
- Während es zwei hauptsächliche Datencontainer-Typen gibt, gibt es vier Renderer - zwei
- passende Container-Renderer pro unterstütztem Feedtyp. Jeder Renderer akzeptiert einen
- Container, und basierend auf seinem Container versucht er ein gültiges Feed-Markup zu
- erstellen. Wenn der Renderer nicht in der Lage ist, ein gültiges Feed-Markup zu
- erstellen, möglicherweise weil dem Container ein obligatorischer Datenpunkt fehlt, dann
- wird er dies melden, indem eine <classname>Exception</classname> geworfen wird. Während es
- möglich ist <classname>Exception</classname>s zu ignorieren, würde dies die
- standardmäßige Schutzvorrichtung entfernen, welche sicherstellt, dass gültige Daten gesetzt
- wurden, um einen komplett gültigen Feed darzustellen.
- </para>
- <para>
- Um dies etwas genauer zu erklären, kann man ein Set von Datencontainern für einen Feed
- erstellen, wobei es einen Feed-Container gibt, in dem einige Entry-Container hinzugefügt
- wurden und ein Deleted (gelöschter) Container. Dies formt eine Datenhierarchie, die
- einen normalen Feed nachstellt. Wenn die Darstellung durchgeführt wird, dann übergibt
- diese Hierarchie ihre Teile den betreffenden Darstellern und die partiellen Feeds (alle
- DOMDocuments) werden dann zusammen geworfen, um einen kompletten Feed zu erstellen. Im
- Falle von Source oder Deleted (Tomestone) Containern werden diese nur für Atom 2.0
- dargestellt und für <acronym>RSS</acronym> ignoriert.
- </para>
- <para>
- Da das System in Datencontainer und Renderer aufgeteilt ist, sind Erweiterungen
- interessant. Eine typische Erweiterung, welche Namespaced Feeds und Entry Level
- Elemente bietet, muss selbst exakt die gleiche Architektur reflektieren, z.B. anbieten
- von Feed und Entry Level Daten Containern und passenden Renderern. Das ist
- glücklicherweise keine komplexe Integrationsarbeit, da alle Erweiterungsklassen einfach
- registriert und automatisch von den Kernklassen verwendet werden. Wir kommen später in
- diesem Kapitel im Detail zu den Erweiterungen.
- </para>
- </sect2>
- <sect2 id="zend.feed.writer.getting.started">
- <title>Beginnen</title>
- <para>
- Die Verwendung von <classname>Zend_Feed_Reader</classname> ist so einfach wie das Setzen
- von Daten und dem Ausführen des Renderers. Hier ist ein Beispiel um einen minimalen Atom
- 1.0 Feed zu erstellen. Dies demonstriert dass jeder Feed oder Eintrag einen eigenen
- Container verwendet.
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * Den Eltern Feed erstellen
- */
- $feed = new Zend_Feed_Writer_Feed;
- $feed->setTitle('Paddy\'s Blog');
- $feed->setLink('http://www.example.com');
- $feed->setFeedLink('http://www.example.com/atom', 'atom');
- $feed->addAuthor(array(
- 'name' => 'Paddy',
- 'email' => 'paddy@example.com',
- 'uri' => 'http://www.example.com',
- ));
- $feed->setDateModified(time());
- $feed->addHub('http://pubsubhubbub.appspot.com/');
- /**
- * Einen oder mehrere Einträge hinzufügen. Beachten das Einträge
- * manuell hinzugefügt werden müssen sobald Sie erstellt wurden
- */
- $entry = $feed->createEntry();
- $entry->setTitle('All Your Base Are Belong To Us');
- $entry->setLink('http://www.example.com/all-your-base-are-belong-to-us');
- $entry->addAuthor(array(
- 'name' => 'Paddy',
- 'email' => 'paddy@example.com',
- 'uri' => 'http://www.example.com',
- ));
- $entry->setDateModified(time());
- $entry->setDateCreated(time());
- $entry->setDescription(
- 'Die Schwierigkeiten erklären Spiele ins englische zu portieren.'
- );
- $entry->setContent(
- 'Ich schreibe diesen Artikel nicht. Das Beispiel ist lang genug ;).');
- $feed->addEntry($entry);
- /**
- * Den ergebenden Feed in Atom 1.0 darstellen und $out zuordnen. Man kann
- * "atom" mit "rss" ersetzen um einen RSS 2.0 feed zu erstellen
- */
- $out = $feed->export('atom');
- ]]></programlisting>
- <para>
- Die dargestellt Ausgabe sollte folgende sein:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0" encoding="utf-8"?>
- <feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">Paddy's Blog</title>
- <subtitle type="text">Writing about PC Games since 176 BC.</subtitle>
- <updated>2009-12-14T20:28:18+00:00</updated>
- <generator uri="http://framework.zend.com" version="1.10.0alpha">
- Zend_Feed_Writer
- </generator>
- <link rel="alternate" type="text/html" href="http://www.example.com"/>
- <link rel="self" type="application/atom+xml"
- href="http://www.example.com/atom"/>
- <id>http://www.example.com</id>
- <author>
- <name>Paddy</name>
- <email>paddy@example.com</email>
- <uri>http://www.example.com</uri>
- </author>
- <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
- <entry>
- <title type="html"><![CDATA[All Your Base Are Belong To
- Us]]]]><![CDATA[></title>
- <summary type="html">
- <![CDATA[Exposing the difficultly of porting games to
- English.]]]]><![CDATA[>
- </summary>
- <published>2009-12-14T20:28:18+00:00</published>
- <updated>2009-12-14T20:28:18+00:00</updated>
- <link rel="alternate" type="text/html"
- href="http://www.example.com/all-your-base-are-belong-to-us"/>
- <id>http://www.example.com/all-your-base-are-belong-to-us</id>
- <author>
- <name>Paddy</name>
- <email>paddy@example.com</email>
- <uri>http://www.example.com</uri>
- </author>
- <content type="html">
- <![CDATA[I am not writing the article.
- The example is long enough as is ;).]]]]><![CDATA[>
- </content>
- </entry>
- </feed>
- ]]></programlisting>
- <para>
- Das ist ein vollkommen gültiges Beispiel für Atom 1.0. Es sollte erwähnt werden, dass das
- Weglassen von obligatorischen Teilen der Daten, wie dem Titel, zu einer
- <classname>Exception</classname> führt, wenn diese als Atom 1.0 dargestellt werden.
- Anders ist das bei <acronym>RSS</acronym> 2.0, wo ein Titel weggelassen werden
- kann, solange eine Beschreibung vorhanden ist. Dadurch werden Exceptions geworfen, die
- sich zwischen beiden Standards abhängig vom Renderer unterscheiden, der verwendet wird.
- Vom Design her wird <classname>Zend_Feed_Writer</classname> keinen ungültigen Feed für
- einen Standard übersetzen, außer der End-Benutzer entscheidet sich bewusst, alle Exceptions
- zu ignorieren. Diese eingebaute Sicherheit wurde hinzugefügt, um
- sicherzustellen, dass sich Benutzer ohne tiefe Kenntnisse der betreffenden
- Spezifikationen keine Sorgen machen müssen.
- </para>
- </sect2>
- <sect2 id="zend.feed.writer.setting.feed.data.points">
- <title>Die Datenpunkte eines Feeds setzen</title>
- <para>
- Bevor ein Feed dargestellt werden kann, müssen zuerst die dafür notwendigen Daten
- gesetzt werden. Hierbei wird eine einfache Setter-artige
- <acronym>API</acronym> verwendet, welche auch als initiale Methode für die Prüfung
- von Daten herhält, wenn diese gesetzt werden. Vom Design her entspricht die
- <acronym>API</acronym> stark der von <classname>Zend_Feed_Reader</classname>, um
- Unklarheiten und Unsicherheiten zu vermeiden.
- </para>
- <note>
- <para>
- Benutzer haben angemerkt, dass das Nichtvorhandensein einer einfachen
- Array-Schreibweise für Eingabedaten zu langen Codeabschnitten führt. Das wird in
- zukünftigen Versionen behoben.
- </para>
- </note>
- <para>
- <classname>Zend_Feed_Writer</classname> bietet diese <acronym>API</acronym> über seine
- Datencontainerklassen <classname>Zend_Feed_Writer_Feed</classname> und
- <classname>Zend_Feed_Writer_Entry</classname> an (nicht zu erwähnen die Atom 2.0
- spezifischen Erweiterungsklassen). Diese Klassen speichern nahezu alle
- Feed-Daten in einer vom Typ unabhängigen Art, was bedeutet, dass man jeden Datencontainer
- mit jedem Renderer wiederverwenden kann, ohne dass zusätzliche Arbeit notwendig ist. Beide
- Klassen sind auch offen für Erweiterungen, was bedeutet, dass eine Erweiterung ihre
- eigenen Containerklassen definieren kann, welche bei den Basis-Containerklassen als
- Erweiterung registriert sind und geprüft werden, sobald irgendein Methodenaufruf die
- <methodname>__call()</methodname> Methode des Basiscontainers auslöst.
- </para>
- <para>
- Hier ist eine Zusammenfassung der Kern-<acronym>API</acronym> für Feeds. Man sollte
- beachten, dass sie nicht nur die Standards für <acronym>RSS</acronym> und Atom umfasst,
- sondern auch eine Anzahl von Erweiterungen, welche in
- <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benennung dieser
- Erweiterungsmethoden ist recht generisch - alle Erweiterungsmethoden arbeiten auf dem gleichen
- Level wie die Kern-<acronym>API</acronym>, da wir es erlauben, jedes Erweiterungsobjekt
- separat zu empfangen wenn das notwendig ist.
- </para>
- <para>
- Die <acronym>API</acronym> für Daten auf Level des Feeds ist in
- <classname>Zend_Feed_Writer_Feed</classname> enthalten. Zusätzlich zu der anbei
- beschriebenen <acronym>API</acronym>, implementiert die Klasse auch die Interfaces
- <classname>Countable</classname> und <classname>Iterator</classname>.
- </para>
- <table>
- <title>API Methoden auf Feed Level</title>
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><methodname>setId()</methodname></entry>
- <entry>
- Setzt eine eindeutige ID, die mit diesem Feed assoziiert ist. Für Atom
- 1.0 ist das ein atom:id Element, und für <acronym>RSS</acronym> 2.0 wird
- es als guid Element hinzugefügt. Diese sind optional, solange ein Link
- hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist.
- </entry>
- </row>
- <row>
- <entry><methodname>setTitle()</methodname></entry>
- <entry>Setzt den Titel des Feeds.</entry>
- </row>
- <row>
- <entry><methodname>setDescription()</methodname></entry>
- <entry>Setzt die textuelle Beschreibung des Feeds.</entry>
- </row>
- <row>
- <entry><methodname>setLink()</methodname></entry>
- <entry>
- Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym>-Website,
- welche die gleichen oder ähnliche Informationen wie dieser Feed
- enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
- <acronym>URI</acronym> des Blogs anbieten, unter der die
- <acronym>HTML</acronym>-Version der Einträge gelesen werden können).
- </entry>
- </row>
- <row>
- <entry><methodname>setFeedLinks()</methodname></entry>
- <entry>
- Fügt einen Link zu einem <acronym>XML</acronym>-Feed hinzu, entweder der
- erzeugte Feed oder eine alternative <acronym>URI</acronym> zeigen auf
- den gleichen Feed, aber in einem anderen Format. Es ist mindestens
- notwendig einen Link zum erstellten Feed zu inkludieren, damit dieser
- eine identifizierbare endgültige <acronym>URI</acronym> hat, welche es
- dem Client erlaubt, Änderungen des Orts mitzubekommen, ohne dass dauernde
- Umleitungen notwendig sind. Dieser Parameter ist ein Array von Arrays,
- wobei jedes Unter-Array die Schlüssel "type" und "uri" enthält. Der Typ
- sollte "atom", "rss" oder "rdf" sein.
- </entry>
- </row>
- <row>
- <entry><methodname>addAuthors()</methodname></entry>
- <entry>
- Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays,
- wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
- enthalten kann. Der Wert "uri" ist nur für Atom Feeds anwendbar, da
- <acronym>RSS</acronym> keine Möglichkeit enthält diese anzuzeigen. Für
- <acronym>RSS</acronym> 2.0 werden bei der Darstellung zwei Elemente
- erzeugt - ein Autorelement, welches die Referenz zur Email und
- dem Namen in Klammern enthält und ein Dublin Core Creator Element, welches nur
- den Namen enthält.
- </entry>
- </row>
- <row>
- <entry><methodname>addAuthor()</methodname></entry>
- <entry>
- Setzt die Daten für einen einzelnen Autor und folgt demselben
- Array-Format wie vorher für ein einzelnes Unter-Array beschrieben.
- </entry>
- </row>
- <row>
- <entry><methodname>setDateCreated()</methodname></entry>
- <entry>
- Setzt das Datum, an dem dieser Feed erstellt wurde. Generell nur
- für Atom anwendbar, wo es das Datum beschreibt, zu der die Ressource,
- die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
- erwartete Parameter muss ein <acronym>UNIX</acronym>-Timestamp oder ein
- <classname>Zend_Date</classname>-Objekt sein.
- </entry>
- </row>
- <row>
- <entry><methodname>setDateModified()</methodname></entry>
- <entry>
- Setzt das Datum, an dem dieser Feed das letzte Mal geändert wurde. Der
- erwartete Parameter muss ein <acronym>UNIX</acronym>-Timestamp oder ein
- <classname>Zend_Date</classname>-Objekt sein.
- </entry>
- </row>
- <row>
- <entry><methodname>setLastBuildDate()</methodname></entry>
- <entry>
- Setzt das Datum an dem der Feed das letzte mal erstellt wurde. Der
- erwartete Parameter kann ein <acronym>UNIX</acronym> Timestamp oder ein
- <classname>Zend_Date</classname> Objekt sein. Das wird nur für
- <acronym>RSS</acronym> 2.0 Feeds dargestellt und wird automatisch als
- aktuelles Datum dargestellt wenn er nicht explizit gesetzt wird.
- </entry>
- </row>
- <row>
- <entry><methodname>setLanguage()</methodname></entry>
- <entry>
- Setzt die Sprache des Feeds. Diese wird unterdrückt, solange sie nicht
- gesetzt ist.
- </entry>
- </row>
- <row>
- <entry><methodname>setGenerator()</methodname></entry>
- <entry>
- Erlaubt es einen Generator zu setzen. Der Parameter sollte ein Array
- sein, welches die Schlüssel "name", "version" und "uri" enthält. Wenn er
- unterdrückt wird, wird ein standardmäßiger Generator hinzugefügt, welcher
- auf <classname>Zend_Feed_Writer</classname>, die aktuelle Version des
- Zend Framework und die <acronym>URI</acronym> des Frameworks verweist.
- </entry>
- </row>
- <row>
- <entry><methodname>setCopyright()</methodname></entry>
- <entry>Setzt eine Copyright-Notiz, die mit dem Feed assoziiert ist.</entry>
- </row>
- <row>
- <entry><methodname>addHubs()</methodname></entry>
- <entry>
- Akzeptiert ein Array von Pubsubhubbub Hub Endpunkten, die im Feed als
- Atom-Links dargestellt werden, damit PuSH-Abonnenten den eigenen Feed
- abbonieren können. Es ist zu beachten, dass man einen Pubsubhubbub
- Herausgeber implementieren muss, damit Real-Time-Updates ermöglicht
- werden. Ein Herausgeber kann implementiert werden, indem
- <classname>Zend_Feed_Pubsubhubbub_Publisher</classname> verwendet wird.
- Die Methode <methodname>addHub()</methodname> erlaubt es gleichzeitig
- nur einen Hub hinzuzufügen.
- </entry>
- </row>
- <row>
- <entry><methodname>addCategories()</methodname></entry>
- <entry>
- Akzeptiert ein Array an Kategorien für die Darstellung, wobei jedes
- Element selbst ein Array ist, dessen mögliche Schlüssel "term", "label"
- und "scheme" enthalten. "term" ist typischerweise der Name einer
- Kategorie, welche für die Aufnahme in einer <acronym>URI</acronym>
- passen. "label" kann ein menschenlesbarer Name einer Kategorie sein,
- der spezielle Zeichen unterstützt (er wird während der Darstellung
- kodiert) und ist ein benötigter Schlüssel. "scheme" (im
- <acronym>RSS</acronym> auch die Domain genannt) ist optional, muss aber
- eine gültige <acronym>URI</acronym> sein. Die Methode
- <methodname>addCategory()</methodname> erlaubt es gleichzeitig nur eine
- Kategorie hinzuzufügen.
- </entry>
- </row>
- <row>
- <entry><methodname>setImage()</methodname></entry>
- <entry>
- Akzeptiert ein Array an Metadaten für Bilder für ein
- <acronym>RSS</acronym> Bild oder ein Atom Logo. Atom 1.0 benötigt nur
- eine <acronym>URI</acronym>. <acronym>RSS</acronym> 2.0 benötigt eine
- <acronym>URI</acronym>, einen <acronym>HTML</acronym> Link, und einen
- Bildtitel. <acronym>RSS</acronym> 2.0 kann optional eine Breite, eine
- Höhe und eine Beschreibung des Bildes senden. Die Array Parameter können
- Sie enthalten indem die folgenden Schlüssel verwendet werden:
- <property>uri</property>, <property>link</property>,
- <property>title</property>, <property>description</property>,
- <property>height</property> und <property>width</property>. Der
- <acronym>RSS</acronym> 2.0 <acronym>HTML</acronym> Link sollte auf die
- <acronym>HTML</acronym> Quellseite des Feeds zeigen.
- </entry>
- </row>
- <row>
- <entry><methodname>createEntry()</methodname></entry>
- <entry>
- Gibt eine neue Instanz von <classname>Zend_Feed_Writer_Entry</classname>
- zurück. Das ist der Daten Container auf der Ebene des Eintrags. Neue
- Einträge müssen <methodname>addEntry()</methodname> explizit aufrufen, um
- Einträge für die Darstellung hinzuzufügen.
- </entry>
- </row>
- <row>
- <entry><methodname>addEntry()</methodname></entry>
- <entry>
- Fügt eine Instanz von <classname>Zend_Feed_Writer_Entry</classname> zum
- aktuellen Feed Container für die Darstellung hinzu.
- </entry>
- </row>
- <row>
- <entry><methodname>createTombstone()</methodname></entry>
- <entry>
- Gibt eine neue Instanz von
- <classname>Zend_Feed_Writer_Deleted</classname> zurück. Das ist der
- Daten Container auf Level des Atom 2.0 Tombstone. Neue Einträge werden
- dem aktuellen Feed nicht automatisch zugeordnet. Man muss also
- <methodname>addTombstone()</methodname> explizit aufrufen um den
- gelöschten Eintrag für die Darstellung hinzuzufügen.
- </entry>
- </row>
- <row>
- <entry><methodname>addTombstone()</methodname></entry>
- <entry>
- Fügt dem aktuellen Feed Container eine Instanz von
- <classname>Zend_Feed_Writer_Deleted</classname> für die Darstellung
- hinzu.
- </entry>
- </row>
- <row>
- <entry><methodname>removeEntry()</methodname></entry>
- <entry>
- Akzeptiert einen Parameter, der den Array-Index eines Eintrags
- bestimmt, welcher vom Feed zu entfernen ist.
- </entry>
- </row>
- <row>
- <entry><methodname>export()</methodname></entry>
- <entry>
- Exportiert die komplette Datenhierarchie in einen <acronym>XML</acronym>
- Feed. Die Methode has zwei Parameter. Der erste ist der Feedtyp,
- entweder "atom" oder "rss". Der zweite in ein optionaler Boolean-Wert, der
- zeigt ob Exceptions geworfen werden oder nicht. Er ist standardmäßig
- <constant>TRUE</constant>.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <note>
- <para>
- Zusätzlich zu diesen Settern gibt es passende Getter, um Daten von den
- Eintrags-Daten-Containern zu erhalten. Zum Beispiel gibt es zu
- <methodname>setImage()</methodname> eine passende
- </para>
- </note>
- <!-- remaining feed stuff -->
- </sect2>
- <sect2 id="zend.feed.writer.setting.entry.data.points">
- <title>Setzen der Datenpunkte für Einträge</title>
- <para>
- Hier ist eine Zusammenfassung der Kern-<acronym>API</acronym> für Einträge und Elemente.
- Man sollte beachten, dass dies nicht nur die Standards für <acronym>RSS</acronym> und
- Atom umfasst, sondern auch eine Anzahl von Erweiterungen, welche in
- <classname>Zend_Feed_Writer</classname> enthalten sind. Die Benennung dieser
- Erweiterungsmethoden ist recht generisch - alle Erweiterungsmethoden arbeiten auf der
- gleichen Ebene wie die Kern-<acronym>API</acronym>, da wir es zulassen, jedes
- Erweiterungsobjekt separat zu empfangen, wenn das notwendig ist.
- </para>
- <para>
- Die <acronym>API</acronym> auf Level des Eintrags ist in
- <classname>Zend_Feed_Writer_Entry</classname> enthalten.
- </para>
- <table>
- <title>API-Methoden auf Eintragsebene</title>
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><methodname>setId()</methodname></entry>
- <entry>
- Setzt eine eindeutige ID, die mit diesem Eintrag assoziiert ist. Für
- Atom 1.0 ist das ein atom:id Element und für <acronym>RSS</acronym> 2.0
- wird es als guid-Element hinzugefügt. Diese sind optional, solange ein
- Link hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist.
- </entry>
- </row>
- <row>
- <entry><methodname>setTitle()</methodname></entry>
- <entry>Setzt den Titel des Eintrags.</entry>
- </row>
- <row>
- <entry><methodname>setDescription()</methodname></entry>
- <entry>Setzt die textuelle Beschreibung des Eintrags.</entry>
- </row>
- <row>
- <entry><methodname>setContent()</methodname></entry>
- <entry>Setzt den Inhalt des Eintrags.</entry>
- </row>
- <row>
- <entry><methodname>setLink()</methodname></entry>
- <entry>
- Setzt eine <acronym>URI</acronym> zur <acronym>HTML</acronym>-Website,
- welche die gleichen oder ähnliche Informationen wie dieser Eintrag
- enthält (z.B. wenn der Feed von einem Blog ist, sollte er die
- <acronym>URI</acronym> des Blog Artikels anbieten, unter welcher die
- <acronym>HTML</acronym>-Version des Eintrags gelesen werden kann).
- </entry>
- </row>
- <row>
- <entry><methodname>setFeedLinks()</methodname></entry>
- <entry>
- Fügt einen Link zu einem <acronym>XML</acronym>-Feed hinzu, entweder der
- erzeugte Feed oder eine alternative <acronym>URI</acronym>, dieauf
- den gleichen Feed zeigt, aber in einem anderen Format. Es wird
- empfohlen, mindestens einen Link zum erstellten Feed zu aufzunehmen,
- damit dieser eine erkennbare endgültige <acronym>URI</acronym> hat,
- welche es dem Client erlaubt, Ortswechsel mitzubekommen, ohne
- dass dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array
- von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri"
- enthält. Der Typ sollte "atom", "rss" oder "rdf" sein. Wenn der Typ
- weggelassen wird, ist er standardmäßig mit dem Typ identisch, mit dem
- der Feed dargestellt wird.
- </entry>
- </row>
- <row>
- <entry><methodname>addAuthors()</methodname></entry>
- <entry>
- Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays
- wobei jedes Unter-Array die Schlüssel "name", "email" und "uri"
- enthalten kann. Der Wert "uri" ist nur für Atom-Feeds anwendbar, da
- <acronym>RSS</acronym> keine Möglichkeit enthält, diese anzuzeigen. Für
- <acronym>RSS</acronym> 2.0 werden bei der Darstellung zwei Elemente
- erzeugt - ein Autorelement, welches die Referenz zur Email und den Namen
- in Klammern enthält und ein Dublin Core Creator Element, welches nur
- den Namen enthält.
- </entry>
- </row>
- <row>
- <entry><methodname>addAuthor()</methodname></entry>
- <entry>
- Setzt die Daten für einen einzelnen Autor und folgt demselben Format
- wie vorher für ein einzelnes Unter-Array beschrieben.
- </entry>
- </row>
- <row>
- <entry><methodname>setDateCreated()</methodname></entry>
- <entry>
- Setzt das Datum, an dem dieser Feed erstellt wurde. Generell nur
- für Atom anwendbar, wo es das Datum beschreibt an dem die Ressource,
- die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der
- erwartete Parameter muss ein <acronym>UNIX</acronym>-Timestamp oder ein
- <classname>Zend_Date</classname>-Objekt sein. Wenn es nicht angegeben
- wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle
- Zeit sein.
- </entry>
- </row>
- <row>
- <entry><methodname>setDateModified()</methodname></entry>
- <entry>
- Setzt das Datum, an dem dieser Feed das letzte Mal geändert wurde. Der
- erwartete Parameter muss ein <acronym>UNIX</acronym>-Timestamp oder ein
- <classname>Zend_Date</classname>-Objekt sein. Wenn es nicht angegeben
- wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle
- Zeit sein.
- </entry>
- </row>
- <row>
- <entry><methodname>setCopyright()</methodname></entry>
- <entry>
- Setzt eine Copyright-Notiz, welche mit dem Feed assoziiert wird.
- </entry>
- </row>
- <row>
- <entry><methodname>setCategories()</methodname></entry>
- <entry>
- Akzeptiert ein Array von Kategorien für die Darstellung, wobei jedes
- Element selbst ein Array ist, dessen möglich Schlüssel "term", "label"
- und "scheme" enthalten. "term" ist typischerweise der Name einer
- Kategorie, welche für die Aufnahme in einer <acronym>URI</acronym>
- passen. "label" kann ein menschenlesbarer Name einer Kategorie sein,
- der spezielle Zeichen unterstützt (er wird während der Darstellung
- kodiert) und ist ein benötigter Schlüssel. "scheme" (im
- <acronym>RSS</acronym> auch die Domain genannt) ist optional, muss aber
- eine gültige <acronym>URI</acronym> sein.
- </entry>
- </row>
- <row>
- <entry><methodname>setCommentCount()</methodname></entry>
- <entry>
- Setzt die Anzahl an Kommentaren, welche mit diesem Eintrag verbunden
- sind. Die Darstellung unterscheidet sich zwischen <acronym>RSS</acronym>
- und Atom 2.0 abhängig vom benötigten Element oder Attribut.
- </entry>
- </row>
- <row>
- <entry><methodname>setCommentLink()</methodname></entry>
- <entry>
- Setzt einen Link zu einer <acronym>HTML</acronym> Seite, welche
- Kommentare enthält, die mit diesem Eintrag assoziiert sind.
- </entry>
- </row>
- <row>
- <entry><methodname>setCommentFeedLink()</methodname></entry>
- <entry>
- Setzt einen Link zu einem <acronym>XML</acronym>-Feed, der Kommentare
- enthält, welche mit diesem Eintrag assoziiert sind. Der Parameter ist
- ein Array, welches die Schlüssel "uri" und "type" enthält, wobei der
- Typ entweder "rdf", "rss" oder "atom" ist.
- </entry>
- </row>
- <row>
- <entry><methodname>setCommentFeedLinks()</methodname></entry>
- <entry>
- Das gleiche wie <methodname>setCommentFeedLink()</methodname>, außer
- dass sie ein Array von Arrays akzeptiert, wobei jedes Unterarray die von
- <methodname>setCommentFeedLink()</methodname> erwarteten Parameter
- enthält.
- </entry>
- </row>
- <row>
- <entry><methodname>setEncoding()</methodname></entry>
- <entry>
- Setzt die Kodierung des Textes des Eintrags. Diese ist standardmäßig
- <acronym>UTF-8</acronym>, welche auch die bevorzugte Kodierung ist.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <note>
- <para>
- Zusätzlich zu diesen Settern gibt es passende Getter, um Daten von den
- Eintrags-Daten-Containern zu erhalten.
- </para>
- </note>
- </sect2>
- </sect1>
|