Zum Inhalt springen

tt_content als Menüpunkt im MENU Element

Erstellt am 29. Juni 2010 · 5 Antworten · letzte Antwort am 7. November 2010

Tags: Frage

Hamsta ·

Hallo zusammen,

Ich würde in meinem Menü gerne aus der letzte Seite in der aktuellen Menüebene den Content anzeigen lassen.
nach der Muster

- Punkt 1
- Punkt 2
- Punkt 3
- tt_content der Letzten seite

Das ist das aktuelle Menü eine eindimensionale Liste ohne schnikschnak

temp.Menu = HMENU
temp.Menu {
  special = directory
  special.value = 35
  entryLevel = 0
  
  1 = TMENU
  1 {
    wrap = <ul>|</ul>
    NO = 1
    NO.wrap = <li>|</li>
  }
}

und darin will ich etwas unterbringen, dass sinngemäs folgendes bewirkt:

#wenn die Letzte seite der aktuellen Ebnene hidden = 1 UND nav_hide = 1 ist 
#dann lade die datensätze mit der pid der letzten seite aus tt_content und füge in anstelle von {content} ein
temp.Menu.1.wrap = <ul>|{content}</ul>

ich hoffe mein vorhaben wird deutlich ^^

Hamsta ·

nee.. das ist nicht das wonach ich suche.

wobei ich auch nicht ganz verstehe was das tut..

wo kommt lin.nav-main her ?
was ist lib.nav-main ?
wie kommt der content aus lib.nav-main in mein Menü ?
woher weis das Menü das es den content einbinden soll oder nicht?

wär gut wenn mir das einer erklären könnte o.O

BastianBalthasarBux ·

lib.nav-main ist ein temporäres typoscript objekt

das macht was du draus machen willst.

der content aus lib.nav-main kann ganz einfach einem marker zugewiesen werden.

der unterschied zwischen lib und temp liegt nur darin, dass temp gelöscht wird zur laufzeit und lib nicht.
für die meisten user macht das kaum unterschied. falls du irgendwann soweit sein sollte dass es einen unterschied machen könnte, dann wird sich dir auch die problematik der beiden varianten nahezu von selbst erschliessen. 😉

es gibt ein gutes typoscript basics ->
http://typo3.org/documentation/document-library/tutorials/doc_core_tsbyex/0.0.16/view/

und die deutsche typo3 dokumentation von robert ist auch nicht schlecht, ist hier auf der seite unter typo3 dokumentation zu finden.

und last but not least: der thread den ich dir gepostet hab ist nicht GENAU die lösung für DEIN problem, sondern für ein ARTVERWANDTES problem, und hätte dir nur einen denkanstoss verpassen sollen.

Hamsta ·

Für die vielleicht ein ähnliches oder gleiches Problem haben, hier noch meine Lösung.

Ich habe den extra Content jetzt nichtmehr auf der letzten Seite, sondern auf der Parentseite in einer Zusätzlichen Content Spalte

Backend:
- Page 1 (hier ist der Content)
- - SubPage 1
- - SubPage 2
- - SubPage 3

Ausgabe im Frontend:
- Page 1 (hier ist der Content)
- - SubPage 1
- - SubPage 2
- - SubPage 3
- - Content

Gemacht habe ich das wie folgt:

1. Erweitern der Seiten um eine Zusätzliche Contentspalte

Standartmäsig gibt es Typo3 4 Spalten für Content, -> Links,Normal,Rechts und Rand
Denen habe ich eine 5 Spalte angehängt. Ich hab die 'Menü Content' genannt aber das is wurst wie die heist.

Dazu folgendes in die Datei typo3conf/extTables.php eintragen

t3lib_extMgm::addPageTSConfig('  
    mod.SHARED.colPos_list = 1,0,2,3,4  
');  

$TCA['tt_content']['columns']['colPos']['config']['items'] = array (  
    '1' => array ('Links||Links||||||||','1'),  
    '0' => array ('Normal||Normal||||||||','0'),  
    '2' => array ('Rechts||Rechts||||||||','2'),  
    '3' => array ('Rand||Rand||||||||','3'),  
    '4' => array ('Menü Content||Menü Content||||||||','4'),  

);

und folgendes ind die Datei typo3conf/localconf.php

$typo_db_extTableDef_script = 'extTables.php';

damit ist die 5. Reihe im Backend zu sehen und kann nach lust und laune mit content zugemüllt werden.

2. Zugriff auf die zusätzliche Spalte
MeinIrgendwas < styles.content.get
MeinIrgendwas.select.where = colPos=4

3. Dem Menü zu verstehen gebe das es den Contetn verwenden soll
Um dem conten im Menü zu gesicht zu bekommen ist eine wenig Typoscript notwendig.

Erstmal das Menü ohne Content

content.Hauptmenue = COA
content.Hauptmenue {
	wrap = |
	10 = HMENU
	10 {
		entryLevel = 2
		special = directory
		special.value = 1
		protectLVar = 1
		1 = TMENU
		1 {
			expAll = 1
			noBlur = 1
			wrap = <ul>|</ul>
			NO = 1
			NO {
				wrapItemAndSub = <li>|</li>
			}
		}
	}
}

und noch das mit dem Zusätzliche Content

content.Hauptmenue = COA
content.Hauptmenue {
	wrap = |
	10 = HMENU
	10 {
		entryLevel = 2
		special = directory
		special.value = 1
		protectLVar = 1
		1 = TMENU
		1 {
			expAll = 1
			noBlur = 1
			wrap = <ul>|</ul>
			NO = 1
			NO {
				wrapItemAndSub = <li>|</li>
				wrapItemAndSub.append = COA
				wrapItemAndSub.append {
					wrap = <li>|</li>
					if {
						value.data = field:uid
						equals.cObject = COA
						equals.cObject{
							wrap = | 
							10 = CONTENT
							10 {
								wrap = |
								table = pages
								select {
									pidInList.data = field:pid
									orderBy = sorting DESC
									max = 1
									selectFields = uid
								}
								renderObj = TEXT 
								renderObj.field = uid 
								renderObj.wrap = |
							}
						}
					}
				}
				10 = CONTENT
				10 < styles.content.get 
				10.select.pidInList.dataWrap = {field:pid}  
				10.select.where = colPos=4		
			}
		}
	}
}

hierbei wird der Content mithilfe der stdWrap funktionen an das Menü geheftet.

in der IF Abfrage wird überprüft ob es sich bei der Aktuell geparsten Seite um die Letzte im Aktuellen Seitenbaum handelt, und wenn das Zutrifft, dann gibt das COA den Content aus der 4. Spalte der Parentseite aus.

Mit orderBy = sorting DESC und max = 1 gibt die Datenbank abfrage nur die Letzte Seite im Tree zurück.

Die IF ABfrage schlägt fehl wenn die Aktuelle Seite im Menü nicht exakt die Letzte Seite der Aktuellen PageTree- Ebene ist.

soviel zu meiner Lösung. es gibt vielleicht bessere / schönere wege und lösungen.. aber es funktioniert ^^ und villeicht kann man damit ja noch jemandem helfen.

Gruß Hamsta

matrox ·

Hallo Hamsat,
vielen Dank für Deinen spitzen TIPP. Hat auch alles super geklappt in einer abgewandelten Version. Habe ein kleines Problem. Möchte den Seitentitle ab der 2. Ebene nicht eingeblendet haben im Dropdown. Mit "Seite im Menü verbergen" klappt das leider nicht. Habe auch schon vieles probiert aber ohne Erfolg. Hat jemand eine Idee wie ich das deaktivieren kann?Bild: msg-motion.de/…/1.jpg

### Horizontales GMENU
menuHGM2 = HMENU
menuHGM2 {
    special = directory
    special.value = 388
    1 = GMENU
    1 {
      wrap = <ul class="menuHGM2">|</ul>
      expAll = 1
      noBlur = 1
      NO = 1
      NO{
      ATagTitle.field = title
      XY = [40.w]+20,36
      allWrap = <li onmouseover="showHGM2(this)" onmouseout="hideHGM2(this)">|</li>
      10 = IMAGE
      10{
          file = fileadmin/TESTUMGEBUNG/GMENUE/middle_no.gif
          offset = 5,0
          tile = 20          
        }
      20 = IMAGE
      20{
          file = fileadmin/TESTUMGEBUNG/GMENUE/left_no.gif
        }
      30 = IMAGE
      30{
          file = fileadmin/TESTUMGEBUNG/GMENUE/right_no.gif
          align = r         
        }
      40 = TEXT
      40{
          offset = 10,25
          fontColor = #ffffff
          fontSize = 19
          text.field = title
          fontFile = fileadmin/TESTUMGEBUNG/fonts/ARIAL.TTF
          
        }
      }
      RO < .NO
      RO{
        10.file = fileadmin/TESTUMGEBUNG/GMENUE/middle_ro.gif
        20.file = fileadmin/TESTUMGEBUNG/GMENUE/left_ro.gif
        30.file = fileadmin/TESTUMGEBUNG/GMENUE/right_ro.gif
        40.fontColor = #ffffff
      }
      ACT < .RO
      IFSUB < .NO
      IFSUB{
        allWrap = <li onmouseover="showHGM2(this)" onmouseout="hideHGM2(this)">|
      }
      ACTIFSUB < .RO
      ACTIFSUB{
        allWrap = <li onmouseover="showHGM2(this)" onmouseout="hideHGM2(this)">|
      }
      ACTRO <.RO
      ACTIFSUBRO <.RO
      IFSUBRO < .ACTIFSUBRO
      
    }

2 = TMENU
2 {
expAll = 1
wrap = <ul onmouseover="showHGM2(this)" onmouseout="hideHGM2(this)">|</ul></li>
NO = 1
NO {
wrapItemAndSub = <li>|</li>
wrapItemAndSub.append = COA
wrapItemAndSub.append {
wrap = <li>|</li>
10 = CONTENT
10 < styles.content.get
10.select.pidInList.dataWrap = {field:uid}  
10.select.where = colPos=0
}
}
} 
}