Facebook
Twitter
Google+
Kommentare
11

RSS-Feeds erweitern im Zend Framework

Endlich ist es wieder soweit. Wir haben einen wunderbaren „What the Fuck?!“ gefunden. Dieses mal im Zend Framework. Wir waren vor kurzem daran zu zeigen, wie schön einfach es sein kann einen RSS-Feed zu erstellen. Tja war wohl nichts. Wirklich kompliziert war es nicht, aber mir sind ein paar wirklich „fiese“ Stellen untergekommen, die ich heute mal ansprechen möchte.

Prinzipiell kann man über Extensions einen RSS-Feed erweitern. Was ja eigentlich schön ist. Wenn ich also einen eigenen Namespace für phm haben will, dann schreibe ich mir eine phm-Extension. Diese registriere ich dann beim System. Dummerweise registriere ich die aber nicht bei einer Instanz eines Feed-Writers, sondern wirklich global im System. Jeder RSS-Feed, den ich danach erstelle wird diese Erweiterung auch beinhalten. Zumindest bis ich global den Reset-Knopf drücke. Finde ich schrecklich, weil man keine Ahnung hat,w elche Extensions jetzt wirklich schon registriert sind. Also werde ich natürlich am Anfang ein Reset drücken … und das jedes mal.

Zend_Feed_Writer::registerExtension( 'PhmRss' );

So, das war der erste Punkt, den ich anders machen würde. Merken wir uns: Global ist böse. Machen wir weiter., zwei Punkte habe ich nämlich noch. Der Zend_Writer hat beim initialisieren schon einige Core-Extensions dabei, die mit dem Reset autormatisch hinzugefügt werden. Ist ja nicht schlimm. Kann ja sein, dass es Extensions gibt, die „lebenswichtig“ sind. Aber warum zum Teufel wird IMMER die iTunes-Erweiterung hinzugefügt? Und jetzt bitte nicht mit „das hat historische Gründe“ kommen. Es sind übrigens noch mehr sinnfreie Standarderweiterungen dabei.

Aller guten Dinge sind doch drei, also brauchen wir auch noch einen dritten Punkt. Kein Problem, den liefert das System von selbst. Wir waren ja gerade bei der iTunes-Implementierung. Nehmen wir an, ich baue eine Erweiterung für phphatesme. Kann ja mal vorkommen. Diese soll das Element „phm:Duration“ hinzufügen und füllen. Die Methode bei meiner Externsion heißt dann setPhmRssDuration(). Das dumme daran ist, wenn ich die Methode so nenne, dann wird mir autormatisch das iTunes-Feld Duration auch gefüllt. Warum das? jede Methode wird auf alle registrierten Erweiterungen aufgerufen, deswegen haben sie auch alle eine magische __call Methode, die halt nichts macht, wenn die nötige Methode nicht existiert. Die iTunes-Erweiterung prüft nämlich ob Name der Methode, die aufgerufen wir existiert, indem es die ersten 9 Zeichen abschneidet, ein setItunes oder addItunes davorstellt und ein method_exists aufruft. Tja dummerweise trifft das auf meine setPhmRssDuration() auch zu und somit wird das Feld Duration gefüllt. Dummerweise habe ich dann das itunes:duration Feld im Feed auch mit drinnen. (Wie das genau funktioniert, müsste ich mir aber nich mal angucken, war nur grad so schön um Fluss)

Ach tut das gut sich mal wieder aufzuregen. Ansonsten ist das Zend_Writer System schon ganz nett zu nutzen und an vielen Stellen gut durchdacht. Ich werde die Tage wohl einfach mal erklären, wie man eigene Extensions schreibt, denn dazu habe ich keine gute Doku gefunden.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

Ein Kommentar

  1. Du kannst froh sein, dass Pádraic Brady kein Deutsch kann. Er ist der Autor von Zend_Feed_Writer, heißblütiger Ire und Meister des gepflegten Rants. Dann hättest du hier sicher Leben in der Bude… 😉

    Aber zum Thema. Ich habe noch nicht mit Zend_Feed_Writer gearbeitet, kann dazu also nichts Qualifiziertes sagen. Nur soviel: jedes Framework und jede Software hat irgendwo Ecken und Kanten, die einen zur Weißglut treiben können. Wie heißt die beliebte Killerphrase im Open Source Bereich so schön: Live with it or change it! 🙂

    Reply
  2. Hab auch noch nicht mit Zend_Feed und deren Konsorten gearbeitet, kann dazu nichts beitragen.

    Ich habe aber letztens mit Zend_Pdf und den entsprechenden Derivaten gearbeitet und da gibt es auch einige Sachen, die man hätte beser lösen können. Bsw. übergibt man der drawText Methode einer Zend_Pdf_Page einen Text und die Start-Parameter. Man hat aber nirgendwo die Möglichkeit einen Zeilumbruck bzw. maxChars o.Ä. festzulegen. Das heißt anstatt einen kompletten Paragrap mit einem Methodenaufruf abzuhandeln, muss man selbst mehrfach die Methode aufrufen und immer wieder mit Trail & Error das Look & Feel überprüfen. Und wehe im ersten Satz kommt ein neues Wort hinein… Ander PDF-Bilbiotheken handhaben dies besser.

    Reply
  3. Dabei ist ZF nicht mal der einzige Kandidat, wo man sich denkt:
    Was hat sich der Autor dabei nur gedacht.

    Ich habe mich vor kurzem dem Thema ORM zugewendet und habe erstmal versucht, die Komponente von ezComponents (ja bald zeta components) zu nutzen, da ezc bisher Basis unseres Projektes ist. Ich habe nach wenigen Tagen aufgeben müssen, da die Methodik dieser Komponente völlig unterschiedlich reagiert, je nachdem von welcher Seite man rangeht.

    Gleiches gilt übrigens auch für die UserInput-Komponente, da werden nicht definierte Felder einfach invalid, anstatt undefined, somit ist eine Formularprüfung sehr interessant.

    Die Liste von Ärgernissen bei Software-Komponenten lässt sich wohl beliebig fortsetzen, so habe ich auch schon mit Doctrine kämpfen dürfen, da manches Verhalten einfach nicht nachvollziehbar schein.

    Wie gut, dass man dann immer den Zend Debugger zur Hand hat, um durch x Klassen hinabzusteigen.

    Als fortgeschrittener Entwickler kann man somit manchertags nur die Hände über dem Kopf zusammenschlagen, den Rechner lieber ausmachen und etwas tun, was nicht mal im entferntesten mit PHP zu tun hat.

    Reply
  4. @Ulf

    ja mit Zend_Pdf stehe ich auch auf Kriegsfuss. Das mit dem Zeilenumbruch und Verteilen eines Textes auf mehrere Seiten bekommt man ja noch irgendwie selber umgesetzt. Wenn es aber um Formatierungen innerhalb eines Textes (mittendrin ein Wort fett) oder um zentrierten und rechtsbündigen Text geht, ist der Ofen aus. Auch Listen mit Aufzählungszeichen gehen nicht ohne weiteres.

    Bin somit in Sachen PDF für ein Projekt auf TCPDF umgstiegen. Das ist zwar zeilweise sehr dreckig programmiert und etwas unübersichtlich in der Handhabung, aber die Ergebnisse stimmen einfach.

    Reply
  5. Dem kann ich nue beipflichten. Das nächste Mal werde ich wieder auf FPDF (http://www.fpdf.org/) zurückgreifen, dass hat mir deutlich besser gefallen. Die Handhabung von Zellen, Tabellen usw. ist dort deutlich intuitiver und besser. Sicherlich könnte man auch die Zend_Pdf-Komponente entsprechend erweitern.

    Reply
  6. #PDF: „Erweitern“ ist das richtig Wort. Das sind irgendwo auch Beschränkungen vom PDF-Standard selbst und ^Zend_Pdf“ ist einfach „(noch?) nicht so weit“ 😉 Finds persönlich nicht verwerflich einfach auf reifere Pakete zurück zu greifen.

    #Tool: Jo, Da hab ich auch schon mehrfach geflucht … Hab beschlossen, das ichs nicht mag und nicht nutze.

    Reply
  7. Ich habe irgendwann mal (vor echt langer Zeit) meinen eigenen Feedgenerator gebastelt. Der war aber ziemlicher Mist. Erweiterbarkeit oder Lesbarkeit waren da Fehlanzeige. Irgendwann bekam das Zend Framework dann endlich eine Extension, um Feeds zu generieren. Die Integration verlief auch wie von ZF gewohnt sehr schnell, einfach und mit nur wenigen Zeilen Code. Bis auf eine Kleinigkeit: Das scheiß Ding konnte einfach keine validen RSS Daten ausspucken. Da stimmte irgendwas mit dem Datum nicht.

    Man unterscheidet ja zwischen Zeitpunkt der Generierung des Feeds und Zeitpunkt der Erstellung eines Eintrags. Dem ZF war das ziemlich egal. Um bei den einzelnen Einträgen die korrekten Werte zu setzen, hätte ich den Output nochmal „manuell“ parsen müssen. Das war mir dann aber zu doof und ich habe dann mit dem Fehler gelegt. Dann habe ich mir nach langer Zeit mal einen Account bei Google’S Feedburner angelegt und lasse google jetzt meine Feeds korrekt formatieren. Das ist eine recht praktische Sache. Mittlerweile ist der Fehler in ZF aber angeblich gefixt – zumindest meine ich das mal in den Release-Notes gelesen zu haben.

    Da habe ich mich auch fies über Zend_Feed aufgeregt.

    Reply
  8. @KC
    Natürlich ist das PDF-Format in gewisser Weise beschränkt, aber gerade einen Zeilenumbruch innerhalb von Fließtext kann man recht einfach mathematisch berechnen (natürlich nur mit Linksausrichtung des Texts). Auch Zellen-Spalten von Tabellen zu vergrößern ist nicht gerade sehr kompliziert. Vor allem können anderes PDF-Bibliotheken dies ja auch, also muss es grundsätzlich möglich sein. Aber natürlich gilt auch hier der Grundsatz: Man kann Zend_Pdf_Page ja auch selbst erweitern, ist ja OpenSource.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen