Zum Inhalt springen

HMENU special füttern

Erstellt am 13. Mai 2009 · 7 Antworten · letzte Antwort am 15. Mai 2009

Tags: Frage

urs_braem ·

Liebe Leute

ich schreibe gerade meine erste Extension. Ganz was einfaches. Ich will ein HMENU (special = list) mit Seiten-IDs aus einer eigens angelegten Tabelle füttern.

Was vorher, als meine IDs noch Konstanten waren, reibungslos geklappt hat, geht jetzt nimmer.

Was muss ich beachten, damit HMENU.special = list etwas mit meiner Liste (die ich als Textobjekt ausgeben kann, zB 5,8,75,) anfangen kann?

Danke!
Urs

just2b ·

Hallo und willkommen im Forum,

wie wärs mit

special.value.cObject < temp.deintextobject

lg georg

urs_braem ·

vielen - vielen - herzlichen Dank!

Erstens geht es und zweitens werde ich mit der TSRef auch noch herausfinden, warum.

Einen tollen Tag
Urs

just2b ·
urs_braem schrieb

zweitens werde ich mit der TSRef auch noch herausfinden, warum.

das ist eine sehr gute einstellung.

tipps dazu > schau bei special > bei value wird sehen, dass das stdWrap funktionalität hat, deswegen dann bei stdwrap schauen, da findest du das cObject. der < ist dann eine normale zuweisung. es ginge ja auch

special.value.cObject = TEXT
special.value.cObject.value  =123

viel spaß
georg

urs_braem ·

... dann ginge bzw geht es also auch so:

temp.displayedpages.cObject  = CONTENT

und dann

     special = list
      special.value < temp.displayedpages

Nur habe ich weiter unten eine if-Abfrage, die mich wahnsinnig macht.

temp.displayedpages_wimage.cObject  = CONTENT

....

stdWrap.if {
                       isInList.field = uid 
                              #value = 9,22,15,5,
                              value < temp.displayedpages_wimage
                              negate = 1
}

Es gibt 2 solche Abfragen, die eine mit negate, die andere ohne.
Wenn ich die Werte händisch eintrage, beissen die sich nicht, aber wenn ich sie reinkopiere, wird das Verhalten erratisch. Ich habe überall "cObject" hinzusetzen versucht, aber habs nicht hingekriegt. Darum frage ich jetzt halt nochmal, leider: ....

und wie muss ich denn so ein stdWrap.if füttern, damit es meinen Wert versteht?

Danke.....!
Urs

just2b ·

keine ahnung ob das temp.displayedpages.cObject schon falsch ist, aber bei value brauchts halt wieder ein value.cObject oder ein value.stdWrap.cObject

urs_braem ·

Habe mal alle temp.displayedpages.cObject in special.value.cObject umgestellt. Genau gleich. Habe eher den Verdacht, dass die if-Funktion da spinnt. Schade, dass es kein if-else gibt in Typoscript. Muss vielleicht versuchen, es ganz anders zu lösen.

Gruss!
Urs

urs_braem ·

Gelöst! Ich nehm zurück, was ich da behauptet habe wegen fehlendem if-else. Geht sehr wohl, einfach mit CASE.

Der Fehler war folgender: weil ich keinen anständigen Entweder-Oder-Switch hinbrachte, hatte ich einfach zwei CONTENT-Objekte mit den identischen if-Bedingungen hintereinandergesetzt, das eine einfach mit "negate = 1". Das geht aber so nicht, die beissen sich.

Das zweite Contentobjekt hat in der Folge immer einen Datensatz weniger aus tt_content ausgelesen, als es sollte (mit dem Ergebnis, dass gar nichts angezeigt wurde, wenn nur 1 Datensatz auf der Seite war).

Interessant und mir unerklärlich ist aber, dass dieses Verhalten nur aufgetreten ist, wenn die für den Vergleich herbeigezogene Kommaliste als Objekt kopiert wurde, also so:

10.if {
                              isInList.field = uid
                              value.cObject < temp.displayedpages_wimage
                              negate = 1
                              }

War sie statisch erfasst, also:

                       10.if {
                              isInList.field = uid 
                              value = 1,3,9,20
                              negate = 1
                              }

wurden alle Datensätze komplett ausgelesen. Seltsam...

Aber eben, die Botschaft ist: wenn es entweder-oder sein soll - dann CASE.

Danke Georg nochmal für die initiale Hilfe...
Urs

***

Weil ich beim recherchieren nicht viele Beispiele für CASE gefunden habe, hier mein Code, vielleicht bringt's wem mal was. Wir befinden uns in einem TMENU; hier werden Texte aus einer Tabelle ausgelesen, die dann in unterschiedlicher Länge (je nachdem, ob sie in der Liste sind oder nicht) gecroppt werden.

Das Objekt temp.displayedpages_wimage ist eine Kommaliste mit UIDs, die mit RECORDS aus einer Tabelle geholt worden sind.

temp.gecroppte_texte = CASE
temp.gecroppte_texte {
                           key.cObject = COA
                           key.cObject {
                           10 = TEXT
                           10.value = long
                           10.if {
                              isInList.field = uid 
                              value.cObject < temp.displayedpages_wimage
                              negate = 1
                              }
                           20 = TEXT
                           20.value = short
                           20.if{
                              isInList.field = uid 
                              value.cObject < temp.displayedpages_wimage
                              negate = 0
                              }
                           }
                           default = TEXT
                           default.value >
                           
                           short = CONTENT
                           short {
                              table = tt_content
                              select {
                                     pidInList.field = uid
                                     where = colPos = 0      
                                   }
                              stdWrap {
                                 stripHtml = 1
                                 wrap = </strong><br />|
                                 crop = 100 | ... | 1
                                 }
                           }
                           
                           long = CONTENT
                           long < .short
                           long.stdWrap.crop = 180 | ... | 1

}