Zum Inhalt springen

Browse-Menü in 2. Ebene

Erstellt am 3. Oktober 2009 · 7 Antworten · letzte Antwort am 4. Oktober 2009

Tags: Frage

Miato ·

Hallo,

ich habe ein bestimmtes HTML, dass ich gerne umsetzen würde:

<ul class="menu">
        <li><a href="corp.html">corp</a></li>
        <li><a href="fly.html">fly</a></li>
        <li><a class="act" href="mag.html">mag</a>
               	<ul class="submenu">
                    <li class="sub"> <a href="1.html"><</a> 1 / 4 <a href="4.html">></a> </li>
                </ul>                
        </li>
        <li><a href="sign.html">sign</a></li>
</ul>

In der 2. Ebene soll ein Browse-Menü eingesetzt werden, das seine spezielle Formatierung per CSS bekommt. Ich habe noch nie ein Browse-Menü in TYPO3 gemacht, bisher waren es nur die einfachen TMENU-Sachen.

Ich dachte mir, dass ich in der zweiten Ebene eines HMENU daran komme, das geht aber gar nicht, weil man ja in TypoScript zunächst den Menü-Typ und dann erst das TMENU ausgibt.

Das normale TMENU würde so aussehen:

lib.leftMenue = HMENU
lib.leftMenue {
   special = directory
   special.value = 1
   wrap = <ul class="menu">|</ul>
	1 = TMENU
	1 {
	noBlur = 1			
	NO = 1
	NO.ATagTitle.field = subtitle // title
	NO.linkWrap =  <li> | </li>
	        
        CUR = 1
        CUR < .NO
	CUR.ATagParams = class="act"
       	} 
 	
 	2 = TMENU
 	2 {
 	wrap = <ul class="submenu"><li class="sub"><|></li></ul>
	NO = 1
	NO.ATagTitle.field = subtitle // title
	}
}

Damit habe ich einen verlinkten Seitentitel innerhalb meiner 2. UL.

Aber wie mache ich jetzt ein Browse-Menü statt dieser 2. Ebene, das aber an der gleichen Stelle sitzt? Also abhängig vom davor liegenden Menüpunkt in die bestehende Liste eingefügt wird?

Gruß, Mia

Unbekannter Benutzer ·

Das ist mir nicht ganz klar, was für einen Sinn soll den ein Browsemenü an der Stelle machen? Ich meine diese Seiten dürften ja dann Unterseiten der entsprechenden Seite sein oder nicht? Dann kannst du ja ein normales Menü benutzen. Das besondere am Browsemenü ist ja das Vor/Zurück, was aber ja nur in Bezug auf die aktuelle Seite Sinn macht, nicht jedoch in einem verschachtelten Menü. Du kannst aber natürlich bei jedem Element der ersten Menüebene mit

NO.after.cObject = HMENU

ein HMENU belieber Art dranhängen, dann natürlich keine zweite Ebene mehr im ersten Menü einbauen.

freshman17 ·

Macht für mich auch keinen Sinn aber jedem das seine..

lib.leftMenue = COA
lib.leftMenue {
  wrap = <ul>|</ul>
  10 = HMENU
  10 {
    entryLevel = 0
    1 = TMENU
    1.NO.wrapItemAndSub = <li>|</li>
  }
  20 = HMENU
  20 {
    wrap = <ul>|</ul>
    entryLevel = 1
    special = browse
    special {
      items = prev|next
      items.prevnextToSection = 0
      prev.fields.title = &lt; back
      next.fields.title = next &gt;
    }
    1 = TMENU
    1.NO.wrapItemAndSub = <li>|</li>
  }
}
Unbekannter Benutzer ·

@freshman, dann hast du aber erst deine erste Menüebene komplett und danach das browsemenü und ich glaube auch, dass special = browse und entryLevel nicht gut zusammen passt.

freshman17 ·

Html-Ausgabe sieht so aus:

<ul>
	<li><a href="index.php?id=2">Seite A</a></li>
	<li><a href="index.php?id=3">Seite B</a></li>
	<ul>
		<li><a href="index.php?id=3">next &gt;</a></li>
	</ul>
</ul>

man sollte die zweite Ebene besser so wrappen:

wrap = <li><ul>|</ul></li>

ansonsten macht das hier auf der Testumgebung und auf den ersten Blick keine faxen.

Gruß

Miato ·

Danke für die Antworten.

Zum Sinn und Zweck: ja, es geht tatsächlich um eine dezente Navigation durch gleichartige Unterseiten, auf denen jeweils 1 Bild und ein bissi Text stehen wird. Diese haben keinen besonderen Titel, deshalb die Idee, die entweder nur durchzunummerieren oder dann mit dem Browse-Menü und 2 Hin- und Her-Pfeilchen.

Die ganze Design-Idee mit den Hin-und Her-Pfeilchen steht und fällt aber damit, dass dieses 2. Menü exakt neben dem Hauptmenüpunkt sitzt - also nicht irgendwo anders, sondern eben genau daneben. Das habe ich über CSS mit position:absolute auch gelöst bekommen. Dafür war nur wichtig, dass die Hauptliste insgesamt zwar absolut, der Unterlistenpunkt aber relativ zu seinem Hauptlistenpunkt sitzt.

Jetzt fehlt nur die Automatisierung in TYPO3 - also Hauptmenüpunkt wählen, daneben dann das Browse-Menü.

Mit dem Snippet von freshman17 habe ich tatsächlich das Browse-Menü unterhalb des letzten Listenpunktes - da gehört es nicht hin.

Jetzt guck ich mir mal dieses NO.after.cObject = HMENU an, was Kitsunet gepostet hat.

Miato ·

So, ich habe es leider noch nicht geschafft. Vielleich hat einer hier noch einen Tipp?

Ich bin zumindest ein Stückchen weiter. Ein Browse-Menü habe ich so erstellt:

temp.browsemenu = HMENU
temp.browsemenu {
	
	special = browse
 	special { 			
 		items = prev | next
 		prev.fields.title = <&nbsp;
 		prev.fields.nav_title = <&nbsp;
 		next.fields.title = &nbsp;>
 		next.fields.nav_title = &nbsp;>
 		}
 		
 	2 = TMENU	
 	2.wrap = <ul class="submenu"><li class="sub">|</li></ul>
    	2.NO = 1
   }

In meinem ursprünglichen TMENU habe ich dann mit after.cObject ergänzt:

lib.leftMenue = HMENU
lib.leftMenue {
   special = directory
   special.value = 1
   wrap = <ul class="menu">|</ul>
   
   
        1 = TMENU
        1 {
        noBlur = 1                 
        NO = 1
        NO.ATagTitle.field = subtitle // title
        NO.allWrap =  <li> | </li>
        
        NO.after.cObject < temp.browsemenu 
                
        CUR = 1
        CUR < .NO
        CUR.ATagParams = class="act"
       
        }
     }

Das funktioniert so weit, dass ich bei Angabe des Menü-Levels 1 die ganzen Seiten tatsächlich als Browse-Menü ausgegeben bekomme. Die 2. Ebene wird aber nicht angezeigt??? Woran kann das liegen?

Wenn ich im oberen TS die Ebene auf 1 ändere, hat jeder Haupt-Menüpunkt ein Browse-Menü angehängt mit den Hauptmenüpunkten (doppelt sozusagen). Also funktioniert es grundsätzlich. Aber wieso kriege ich nicht die 2. Ebene ausgegeben?!?!
😢

Miato ·

Hallo nochmal,

ich habe noch ein anderes Beispiel aus einer Mailingliste gefunden, dass ich für mich jetzt abgewandelt habe. Damit kriege ich schon das, was ich haben will:

#Menu bis Ebene 2
lib.leftMenue = HMENU
lib.leftMenue {
   1 = TMENU
   1 {
     wrap = <ul class="menu">|</ul>

     NO = 1
     NO.allWrap =  <li> | </li>

     ACTIFSUB < .NO
     ACTIFSUB = 1
     ACTIFSUB.doNotLinkIt = 1
     ACTIFSUB.stdWrap.postCObject= HMENU
     ACTIFSUB.stdWrap.postCObject {
       special = browse
       special {
         items = prev | next
         prev.fields.title = <&nbsp;
         next.fields.title = &nbsp;>
       }
       1 = TMENU
       1.NO = 1
       1.NO.allWrap = <ul class="submenu"><li class="sub">|</li></ul>
     }

     ACT < .NO
     ACT.ATagParams = class="act"
     
     CUR < .NO
     CUR.ATagParams = class="act"
   
   }
}

Die einzige Bedingung, die ich jetzt beachten muss: Der Hauptmenüpunkt, der Untermenüpunkte bekommt, muss ein Verweis (Seitentyp) auf die erste Untermenüseite sein.

Ich glaube, damit kann ich leben 🙂

Edit: Also, mit etwas Nachdenken habe ich verstanden, dass die erste Lösung bereits korrekt war. Das Problem lag nur in meiner Idee, dass das Browse-Menü auch für Unterseiten gilt - und das tut es eben nicht - es funktioniert ausschließlich auf einer Ebene. Wenn ich also einen Hauptmenüpunkt anwähle, wird das Browse-Menü noch nicht angezeigt. Erst, wenn der Hauptmenüpunkt auf die Unterebene verlegt wird (durch einen Verweis), dann erscheint das Browse-Menü.