• RSS-Feeds erweitern im Zend Framework

    von am 22. April 2010

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    11 Kommentare »


    • Nils Langner
      am 22. April 2010 um 09:27 Uhr

      Scheint wohl noch niemand mit dem Zend Framework aufeinandergeprallt zu sein. Schade Schade, aufregen macht doch zusammen mehr Spaß.


    • Ralf Eggert
      am 22. April 2010 um 10:04 Uhr

      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! :-)


    • Nils Langner
      am 22. April 2010 um 10:22 Uhr

      @Ralf: Ich werde das ZF auch weiterhin als sauberes Framework bezeichnen, trotzdem war mir gerade nach Luftablassen :)


    • Ralf Eggert
      am 22. April 2010 um 10:33 Uhr

      Ach du hättest mich hören sollen, als ich neulich über Zend_Tool geschimpft habe. Dagegen war dein Beitrag hier Kindergeburtstag mit Ponystreicheln. ;-)


    • Ulf Kirsten
      am 22. April 2010 um 11:26 Uhr

      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.


    • Christian Michel
      am 22. April 2010 um 11:39 Uhr

      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.


    • Ralf Eggert
      am 22. April 2010 um 11:44 Uhr

      @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.


    • Ulf Kirsten
      am 22. April 2010 um 15:27 Uhr

      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.


    • KingCrunch
      am 22. April 2010 um 16:48 Uhr

      #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.


    • Christian
      am 22. April 2010 um 17:49 Uhr

      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.


    • Ulf
      am 22. April 2010 um 20:33 Uhr

      @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.

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.