Zum Inhalt springen

Inhaltselemente im Menü anzeigen

Erstellt am 22. Januar 2009 · 8 Antworten · letzte Antwort am 3. Februar 2009

Tags: Inhaltselemente, Frage

traeumerle ·

Hallo,

bin gerade dabei mich in Typo3 einzuarbeiten und eine Seite zu Erstellen. Problematik dabei: Ich möchte ein Textmenü erstellen, das in der zweiten Ebene ansetzt (Soweit kein Problem) und einen Anrisstext des jew. verlinkten Inhaltes beinhaltet. Der Anrisstext soll dabei nicht automatisch erstellt werden, sondern aus dem sonst ungenutzen Border-Inhaltselement stammen. So sollte das ganze dann später in HTML aussehen:

<ul>
 <li>
  <h2>Ich bin Menüpunkt 1</h2>
  Ich bin der Anrisstext von MP1
  <a href="link">mehr...</a>
 </li>
 <li class="active">
  <h2>Ich bin Menüpunkt 2</h2>
  Ich bin der Anrisstext von MP2
  <a href="link">mehr...</a>
 </li>
 <li>
  <h2>Ich bin Menüpunkt 3</h2>
  Ich bin der Anrisstext von MP3
  <a href="link">mehr...</a>
 </li>
</ul>

Was ich bisher hinbekommen habe ist den Anrisstext aus den Feldern des Page-Records auszulesen, also z.B. aus dem Subtitle. Ich würde aber gerne den Anrisstext aus einem Inhaltsblock auslesen. Z.B. dem Rightborder. Hier mal mein letzter Versuch in der Sache:

# Submenü
  marks.SUB_MENU = HMENU
  marks.SUB_MENU {
  	entryLevel=1
  	1 = TMENU
  	1 {
  	   wrap=<ul>|</ul>
  	   NO = 1
  	   NO {
 	   	ANRISS = CONTENT
		ANRISS {
			table = tt_content
				select {
					where = colPos = 3 AND pid = {field:pid}
					orderBy = sorting
					languageField = sys_language_uid
				}
		}
 	   	allWrap = <li id="item{field:uid}"><h2>{field:title}</h2> {ANRISS} |</li>
 	   	allWrap.insertData = 1
 	   	stdWrap.data = str : 
 	   	stdWrap.wrap = mehr... 
 	   	#stdWrap = mehr
  	   }
  	   ACT = 1
  	   ACT {
		ANRISS = CONTENT
		ANRISS {
			table = tt_content
				select {
					where = colPos = 3 AND uid = {field:uid}
					orderBy = sorting
					languageField = sys_language_uid
				}
		}
		
		allWrap = <li id="item{field:uid}" class="aktiv"><h2>{field:title}</h2> {ANRISS} |</li>
		allWrap.insertData = 1
		stdWrap.data = str :
		stdWrap.wrap = mehr... 
		#stdWrap = mehr
  	   }
  	   SPC=1
  	}
  }

und hier der funktionierende Versuch mit dem Subtitle:

marks.SUB_MENU = HMENU
  marks.SUB_MENU {
  	entryLevel=1
  	1 = TMENU
  	1 {
  	   wrap=<ul>|</ul>
  	   NO = 1
  	   NO {
 	   	allWrap = <li id="item{field:uid}"><h2>{field:title}</h2> {field:subtitle} |</li>
 	   	allWrap.insertData = 1
 	   	stdWrap.data = str : 
 	   	stdWrap.wrap = mehr... 
 	   	#stdWrap = mehr
  	   }
  	   ACT = 1
  	   ACT {
		allWrap = <li id="item{field:uid}" class="aktiv"><h2>{field:title}</h2> {field:subtitle} |</li>
		allWrap.insertData = 1
		stdWrap.data = str :
		stdWrap.wrap = mehr... 
		#stdWrap = mehr
  	   }
  	   SPC=1
  	}
  }

Ich hoffe irgendjemand kann mich hier auf den richtigen Weg bringen, danke.

Christian

Julian.​Hofmann ·

Hallo.

Warum willst Du unbedingt aus der Borderspalte den Inhalt nehmen? Wenn die Texte eh manuell gepflegt werden, dann wäre doch die Verwendung der Metafelder der Page sinnig (zumal sie ja eben z.B. als Abstract genau den Zweck haben, eien Seite kurz zu beschreiben). Auf die Inhalte kannst Du dann via TS recht einfach zugreifen, da der Datensatz eh schon in Bearbeitung ist.

Viele Grüße
Julian

traeumerle ·

Hallo Julian,

ich wollte den Inhalt aus der Borderspalte aus zwei Gründen nehmen:

1. Weil er noch nicht benutzt ist :-)
2. Weil ich hierfür den RTE nutzen kann, wenn ich den RTE auch für die Metadaten nutzen kann, wäre das eine alternative. Es soll für den Benutzer zumindest möglich sein in die Übersicht ein kleine Bild mit einzubinden.

Grüße

Christian [/quote]

Julian.​Hofmann ·

Hallo Christian.

Bin gerade im Moment an einer sehr ähnlichen Navigation :-)

Der Schlüssel dürfte stdWrap bzw. davon die override-Eigenschaft sein. Auf diese Weise bekommen wir ein cObject ins Menü. Und was wir mit dem cObject anstellen, das ist unsere Sache (z.B. Dein ANRISS=CONTENT...).

Viele Grüße
Julian

traeumerle ·

Juhu, ich bin etwas weiter aber stoße als Typo3-Neuling doch direkt an die nächste Wand. Ich habe das ganze nun mit folgendem Code bewerkstelligt:

marks.SUB_MENU = HMENU
  marks.SUB_MENU {
  	entryLevel=1
  	1 = TMENU
  	1 {
  	   wrap=<ul class="submenue">|</ul>
  	   NO = 1
  	   NO {
 	   	allWrap = <li id="item{field:uid}"><h2>{field:title}</h2><span class="hide"> |<br class="clear" /></span></li>
 	   	allWrap.insertData = 1
 	   	
 	   	stdWrap.data = str : 
 	   	stdWrap.wrap = mehr...&nbsp;
 	   	stdWrap.prepend = CONTENT
		stdWrap.prepend {
  			table = tt_content
	  		select {
  				pidInList.field = uid
		 		max = 1
		 		where = colPos = 3
			}
		}
  	   }
  	   ACT = 1
  	   ACT {
		allWrap = <li id="item{field:uid}" class="aktiv"><h2>{field:title}</h2><span class="hide"> |<br class="clear" /></span></li>
		allWrap.insertData = 1
		stdWrap.data = str :
		stdWrap.wrap = mehr...&nbsp;
		stdWrap.typolink
		stdWrap.prepend = CONTENT
		stdWrap.prepend {
  			table = tt_content
	  		select {
  				pidInList.field = uid
		 		max = 1
		 		where = colPos = 3
			}
		}
  	   }
  	   SPC=1
  	}
  }

Funktioniert auch alles ganz super, nur, dass mein "mehr..." nicht mehr verlinkt ist, wenn ich bei einem Menüpunkt Anrisstext in der Borderspalte habe.

Vielleicht hat hier einer der Profis noch eine Idee?

grüße

Christian

Julian.​Hofmann ·

Hat's das TS etwas zerhauen, oder steht das bei Dir wirklich so?

		stdWrap.data = str :
		stdWrap.wrap = mehr...&nbsp;
		stdWrap.typolink

Die Zeile 1 und 3 irritieren mich etwas, da sie nicht korrektes TS sind.

Viele Grüße
Julian

traeumerle ·
Julian.Hofmann schrieb

Die Zeile 1 und 3 irritieren mich etwas, da sie nicht korrektes TS sind.

Oh, die Zeile 3 sollte wirklich nicht so sein, das ist ein Überbleibsel vom vorherigen Testen.

Zeilen 1+2 Hab ich mir "irgendwie" ergoogelt und waren bis dahin die einzigste Möglichkeit den Linktext durch das Wort "mehr..." zu ersetzen und nicht zu ergänzen. Ohne die erste Zeile funktionierte das ganze nicht.

Julian.​Hofmann ·

Zwecks des mehr-Links:
Eine Möglichkeit wäre, dass Du als prepend-Objekt ein COA nimmst, und daran dann einen TEXT samt Link anhängst.

stdWrap.prepend = COA
stdWrap.prepend.10 = CONTENT
stdWrap.prepend.10 {
	table = tt_content
	select {
		pidInList.field = uid
		max = 1
		where = colPos = 3
	}
}
stdWrap.prepend.20 = TEXT
stdWrap.prepend.20.value = mehr...
stdWrap.prepend.20.typolink.parameter.field = uid
traeumerle ·

Hallo,

dank Deiner Tipps hat bei mir nun alles geklappt, Danke. Hier nochmal mein ganzes TypoScript zur Dokumentation. Kann man evtl. auch noch sauberer hinbekommen aber ich bin für den Anfang ganz zufrieden mit mir:

# Submenü
  marks.SUB_MENU = HMENU
  marks.SUB_MENU {
  	entryLevel=1
  	1 = TMENU
  	1 {
  	   wrap=<ul class="submenue">|</ul>
  	   NO = 1
  	   NO {
 	   	allWrap = <li id="item{field:uid}"><h2>{field:title}</h2><span class="hide"> |<br class="clear" /></span></li>
 	   	allWrap.insertData = 1
 	   	stdWrap.data = str :
		stdWrap.wrap = 
		stdWrap.prepend = COA
 	   	stdWrap.prepend.10 = CONTENT
 	   	stdWrap.prepend.10 {
 	   		table = tt_content
	  		select {
			pidInList.field = uid
			max = 1
			where = colPos = 3
		  }
 	   	}
 	   	stdWrap.prepend.20 = TEXT
		stdWrap.prepend.20.value = mehr...
		stdWrap.prepend.20.typolink.parameter.field = uid 
  	   }
  	   ACT = 1
  	   ACT {
		allWrap = <li id="item{field:uid}" class="aktiv"><h2>{field:title}</h2><span class="hide"> |<br class="clear" /></span></li>
		allWrap.insertData = 1
		stdWrap.data = str :
		stdWrap.wrap = 
		stdWrap.prepend = COA
 	   	stdWrap.prepend.10 = CONTENT
 	   	stdWrap.prepend.10 {
 	   		table = tt_content
	  		select {
			pidInList.field = uid
			max = 1
			where = colPos = 3
		  }
 	   	}
 	   	stdWrap.prepend.20 = TEXT
		stdWrap.prepend.20.value = mehr...
		stdWrap.prepend.20.typolink.parameter.field = uid
  	   }
  	   SPC=1
  	}
  }