via Fluid dynamisch css-class setzen

  • ccumulus ccumulus
    T3PO
    0 x
    22 Beiträge
    0 Hilfreiche Beiträge
    07. 07. 2012, 02:40

    Hi,
    ich habe mal eine Anfängerfrage. Ich möchte im Fluid-Template der Extension news-system (tx_news von georg ringer; nicht tt_news!) dynamisch ein Datenbankfeld auslesen. Ich habe das mal so probiert.

    1. <f:if condition="{newsItem.categories}">
    2. <div id="detail" class="<f:render partial="Category/catClass" arguments="{categories:newsItem.categories, settings:settings}"/>">
    3. </f:if>
    4. <f:render section="content" />
    5. </div>

    Raus kommt im FE das:
    1. <div id="detail" class=" hardware ">
    2. ...
    3. </div>

    Stören tut mich jetzt die Leerzeilen vor und nach hardware.
    Ich denke mal, so wie ich das zusammengeschustert, ist das wahrscheinlich ziemlicher Mist. Anfänger halt ;-).
    Hat von euch jemand einen Tipp, wie ich das eleganter lösen könnte?
    Gruss


  • 1
  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    09. 07. 2012, 15:11

    Kannst Du denn nicht direkt auf das Attribut zugreifen ohne den Umweg über das Partial? Wenn Du über das Partial gehst, bräuchte man zum Nachvollziehen auf den Template Code des Partials.
    Du hast es hier nicht erwähnt, aber Du willst wohl den Kategorie-Namen als CSS Class ausgeben, oder?
    Verwendest Du hierfür einen eigenen ViewHelper der z.B. Sonderzeichen rausnimmt und in lowercase konvertiert? Denn Ansatz würde ich gut finden und dann kannst du dort direkt noch ein "trim" integrieren.

    Aber grundsätzlich dürften Leerzeichen vor oder nach dem Klassennamen keine Probleme verursachen.

    Viele Grüße
    Michael

  • ccumulus ccumulus
    T3PO
    0 x
    22 Beiträge
    0 Hilfreiche Beiträge
    09. 07. 2012, 19:53

    Hier ist das Partial, welches ich verwendet habe:

    1. <f:for each="{categories}" as="category">
    2. <f:if condition="{category.shortcut}">
    3. <f:then>
    4. {category.title}
    5. </f:then>
    6. <f:else>
    7. {category.title}
    8. </f:else>
    9. </f:if>
    10. </f:for>

    Ja, du siehst das richtig, ich versuche den Kategorienamen als css-Klasse auszugeben. Und ich verwende keinen sep. Viewhelper der Sonderzeichen heraus nimmt und auf lowercase konvertiert - und trim sowieso nicht. Wie bereits erwähnt, bin ich hier noch blutiger Anfänger und weis nicht so recht wo ich Anfangen soll.:'(
    Würde mich freuen, wenn Du mir bzgl. des Viewhelpers helfen könntest.

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    10. 07. 2012, 09:19

    Vielleicht übersehen ich hier auch was, aber ich werde aus Deinem Konstrukt nicht ganz schlau.
    Im Partial iterierst Du über categories und verwendest ein IF, das aber immer den title ausgibt. In meinen Augen schon mal überflüssig.
    Das Problem warum Du vermutlich nicht direkt auf category über newItem.categories.title kommst ist das eine News ja mehreren Kategorien zugwiesen werden kann (das könnte auch grundsätzlich ein Problem für Dich sein).

    Zum ViewHelper:
    Dazu legst Du eine minimale Extension an und erstellst einen ViewHelper. Der besteht im Grunde aus einer Klasse mit entsprechendem Namen (erweitert immer den Core ViewHelper) und einer Methode "render", die Werte per Parameter aufnehmen kann und verarbeitet ausgibt.

    Dann musst Du nur noch im entsprechenden Fluid Template den Namespace setzen z.B. mf (oder was auch immer) und kannst diesen dann wie die f ViewHelper verwenden. Dazu gibt es bereits einige Beispiele im Netz.

    Hier z.B.
    http://paul-rohrbeck.de/artikel/typo3-fluid-str_replace-viewhelper/

    Viele Grüße
    Michael

  • ccumulus ccumulus
    T3PO
    0 x
    22 Beiträge
    0 Hilfreiche Beiträge
    10. 07. 2012, 20:30

    Hallo,
    vielen danke für deine Hilfe. Eine extra Extensions zu erstellen ! - da hörts bei mir auf. Ich komme ehr aus der Ecke Design. Ich hatte halt gehofft, dass das einfacher geht. Wenn ich aber so google, dann findet man da aber auch nichts passendes - was einfach so ein Datenbankfeld ausließt. Zum Thema viewHelper findet man ja schon einiges via Google - halt ehr allg. Natur.
    Dieses Partial habe ich auch nur kopiert. Das war bei der Ext. dabei und habe es abgeändert. Die if-Bedingung habe ich verunstaltet, so macht Sie ja denke ich zweimal das gleiche.

    Ich habe es auchmal mit dem porbiert <f:cObject typoscriptObjectPath="lib.content" />, aber hier schaffe ich es nicht dynamisch das entsp. Datenbankfeld auszulesen.
    Hättes Du hier evtl. einen Tipp.
    Vielen dank bis hierher.

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    11. 07. 2012, 09:05

    Kann gut sein, dass Du über TypoScript auch an den Wert kommst und als lib Object dann in der View anzeigen kannst. Dennoch würde ich eher den ViewHelper Weg gehen. Das ist im Grunde gar nicht so schwer.
    Zum Erstellen ein Extension nimmst Du am besten den Extension Builder. Das ist ne Extension mit der man mehr oder weniger mit Hilfe einer grafischen Oberfläche ein Extension-Grundgerüst bauen kann. Du brauchst hier eigentlich nur die absolute Grundstruktur ohen Models etc. Dabei wird Dir dann die komplette File/Folder Struktur erstellt. Dort musst Du letzten Endes noch Deinen ViewHelper anlegen im richtige Verzeichnis mit richtiger Benennung und er sollte dann bereits auch in der Extension News verfügbar sein (Namespace wie im Beispiel beschrieben nicht vergessen).
    Nicht falsch verstehen, aber alternativ kannst Du ja jemanden beauftragen der das kann. Ist unterm Strich oft günstiger als selbst X Stunden damit zu verbraten. Es sei denn, Du willst das sowieso lernen...

    Viele Grüße
    Michael

  • ccumulus ccumulus
    T3PO
    0 x
    22 Beiträge
    0 Hilfreiche Beiträge
    13. 07. 2012, 18:47

    Vielen Dank für dein Hilfe. Ich werde das ganze mal versuchen. Gruss.

  • 1