Zum Inhalt springen

Seiten-Teaser per Typoscript -> Manuelle Bestimmung der angezeigten Items?

Erstellt am 18. September 2009 · 3 Antworten · letzte Antwort am 22. September 2009

Tags: Frage

jousch ·

Hallo liebe Gemeinde,

ich habe in einem Projekt Seiten-Teaser erstellt in Form von Content-Element Sitemap (zB.: tt_content.menu.20.7) Der Grundaufbau dieses Teasers sieht wie folgt aus:

tt_content.menu.20.7 >
tt_content.menu.20.7 = COA
tt_content.menu.20.7 {
	10 = HMENU
	10 {
		special = list
		special.value.field = pages
		1 = TMENU
		1 {
			expAll = 0
			NO {
				doNotShowLink = 1
				stdWrap.cObject = LOAD_REGISTER
				stdWrap.cObject {
					site_uid.field = uid
					site_uid.dataWrap = {register:site_uid},|          
				}
			}
		}
		2 < .1
		3 < .1
		4 < .1
		5 < .1
		6 < .1
		7 < .1
		8 < .1
		9 < .1
		10 < .1
	}
	
	
	20 = CONTENT
	20 {
		table = pages
		select {
			orderBy = title
			pidInList.data = register:site_uid
		}
		stdWrap {
			wrap = <ul>|</ul>
			required =1 
		}
		renderObj = COA
		renderObj {
			
			
			10 = IMAGE
			10 {
					# bild erstellen
				file = GIFBUILDER
				file {
					XY = 123,96
					quality = 100
					
						
						# anzuzeigendes bild importieren
					10 = IMAGE
					10 {
						file {
							height = 96c
							width = 123c
							import {
								cObject = TEXT
								cObject {
									cObject = TEXT
									cObject {
										value = fileadmin/teaser/defaultgrafik.png
										override {
											required = 1
											data = levelmedia:-1, slide
											wrap = uploads/media/ |
											listNum = 0
										}
									}
									override {
										required = 1
										field = media
										wrap = uploads/media/ |
										listNum = 0
									}
								}
							}
						}
					}
				}
					# weitere ausgabe konfigen
				altText.field = description
				titleText.field = abstract // description // title
				imageLinkWrap = 1
				imageLinkWrap {
                  	enable = 1
					typolink {
						target =
						parameter.field = uid
						ATagParams = class="teaser1_bild"
					}
				}
               }
			
			20 = TEXT
			20 {
				field = title
				typolink.parameter.field = uid
				dataWrap = <dl><dt>|</dt>
				append = TEXT
				append {
					field = abstract // description
					wrap = <dd>|</dd></dl>
				
				}      
			}
			# item wrappen
			stdWrap {
				wrap = <li>|</li>
				required = 1
			}
		}
	}
}

Legende zu Listing 1

  • ..menu.20.7.10 = Ich lade die anzuzeigenden IDs in den Register
    ..menu.20.7.20 = Ich gebe die einzelnen IDs per CONTENT aus

Das funktioniert auch hervorragend. Allerdings möchte ich nun auch statisch per Typoscript bestimmen können (durch Überschreibung von tt_content.menu.20.7.10 und manuellem Befüllen des Registers per manueller Typoscript-Eingabe) welche Teaser-Items angezeigt werden. In der jetzigen Funktion werden alle Unterseiten der sich im Register befindenden hinterlegten IDs ausgegeben.

Ich möchte aber nun sagen - egal aus welchen Seitenpfad oder Baum im TYPO3-Projekt eine Seite liegt - "13,50,20,143 - ihr zeigt euch jetzt auf der Seite als Teaser!"

Mir ist dabei klar das ich tt_content.menu.20.7.10 anpassen muss, um eine benutzerdefinierte Liste zu bekommen - das habe ich auch schon in Form von Listing 2 geschafft:

tt_content.menu.20.7 {
	10 >
	10 = HMENU
	10 {
		special = list
		special.value = 13,50,20,143
		1 = TMENU
		1 {
			expAll = 0
			NO {
				#doNotShowLink = 1
				stdWrap.cObject = LOAD_REGISTER
				stdWrap.cObject {
					site_uid.field = uid
					site_uid.dataWrap = {register:site_uidd},|          
				}
			}
		}
	}
}

Legende zu Listing 2

  • ..menu.20.7.10 = Manuelle Eintragung anzuzeigender IDs in den Register

Nun funktioniert das ganze allerdings noch nicht - weil irgendwie tt_content.menu.20.7.20 Dies nicht macht was ich will.

Kann es daran liegen das CONTENT anhand der PID die Seiten ermittelt? Ich hab die starke Vermutung - allerdings fehlt mir das Wissen - wie ich dies umgehen kann.

Ich bin für jeden Tipp dankbar - vielleicht ist es auch nur eine Kleinigkeit - ich weis es nicht.

Vielen Dank im Voraus,
jos

UPDATE

Ich habe nun versucht, das ganze über RECORDS zu lösen. Soweit würde es ansatzweise funktionieren. Allerdings funktioniert bei der Angabe von source kein source.data = register:site_uid. Auch beim Bereich conf.pages ist es mir noch unerklärlich, wie tt_content.menu.20.7.20.renderObj reinbringe. Hier ein ansatzweise funktionierendes TS.

	20 >
	20 = RECORDS
	20 {
			# select desired table
		tables = pages
			# load register
		#source.data = register:site_uidStatic
		source = 42,33,40
		dontCheckPid = 1
			# stdWrap nicht möglich
		wrap = <ul>|</ul>
		conf.pages >
		conf.pages = COA
		conf.pages {
			5 = TEXT
			5.field = title
			10 = TEXT 
			10 < tt_content.menu.20.7.renderObj	
		}
	}
Unbekannter Benutzer ·

Also das löst sicher nicht alle Probleme, aber ich würde die Reihenfolge mal umkehren und sagen:

tt_content.menu.20.7.10 = LOAD_REGISTER
tt_content.menu.20.7.10.site_uid.cObject = HMENU
usw.

Dann musst du im NO nur noch die Kommaliste zusammenbauen und überschreibst nicht immer das register. Außerdem kannst du dann einfach auf einer Seite mit:

tt_content.menu.20.7.10.site_uid = 13,50,20,143

eine hardcoded Liste verwenden.

Diese Register zusammen mit pidInList sind manchmal tricky, du könntest das HMENU direkt als cObject von pidInList einbauen...

Was genau meinst du mit:

Kann es daran liegen das CONTENT anhand der PID die Seiten ermittelt?

jousch ·

Danke für die Antwort, es ist leider so, dass ich nicht genau weis (weil mir sicherlich auch noch etwas das Wissen fehlt) wie ich am besten vorgehe.

Wenn ich keinen Register verwende, und einfach nur ein Menü erstellen möchte, welches mir auf einer Seite X jede beliebige Seite (nicht nur die Unterseiten der aktuellen Seit da wo das Menü ausgegeben wird) als Grafik ausgeben soll, wobei ich den title der jeweiligen Seite im Gifbuilder verwende und das erste Bild aus media verwende - dann brauch ich mir gar nicht soviel Mühe machen und kann die Ausgabe innerhalb eines (nennen wir es gar nicht tt_content.menu.xxxx) HMENU's steuern? Wo füge ich dann dieses cObject ein, indem ich das Bild auslese?

Danke im Voraus,
jos

jousch ·

So, ich hatte da einen gravierenden Denkfehler beim statischen Teaser-Menü! Ich habe einfach ein HMENU vom Typ special/list erstellt und das cObject fast unverändert in Menüebenen 1 im NO.stdWrap referenziert.