Zum Inhalt springen

Horizontales Menü mit unterschd. Breite pro Item

Erstellt am 27. Januar 2004 · 7 Antworten · letzte Antwort am 27. Januar 2004

Tags: Frage

Huschi ·

Hi,
ich habe jetzt schon alles an TSref, by exaple etc. abgesucht, aber keine passende Lösung oder Ansätze gefunden.

Mein Problem:
Eine horizontale Menüleiste wird mit den Top-Items gefüllt.
Damit es aber besser aussieht, hat jeder Item eine bestimmte/unterschiedliche Breite.

Kurz zur Erläuterung:

Der html-Code (stark gekürzt, denn es kommt aus einer Template-Datei):

<!-- ###SUB_L1MENU_ITEM### begin -->
  <TD WIDTH=###WIDTH### CLASS=nav1_no><!--###LINK###-->###TITLE###<!--###LINK###--></TD>
<!-- ###SUB_L1MENU_ITEM### end -->

Die entsprechenden Zeilen aus dem Setup:

temp.L1menuItems.1 = TMENU 
temp.L1menuItems.1.expAll = 0
temp.L1menuItems.1.NO { 
  before.cObject < temp.mainTemplate 
  before.cObject { 
    workOnSubpart = SUB_L1MENU_ITEM 
    marks.TITLE = TEXT 
    marks.TITLE.field = title 
    wraps.LINK = TEXT 
    wraps.LINK { 
      value = | 
      typolink.parameter.field = uid 
    } 
    marks.MENU_ID = TEXT 
    marks.MENU_ID.field = uid 
  } 
  doNotShowLink = 1
}

Und nun die Frage:
Wie kann ich das '###WIDTH###' ersetzen gegen eine individuelle Breite die z.B. über die uid ermittelt wird?
(Ein Konstrukt wie 'temp.L1menuItems.1.NO.before.cObject.marks.WIDTH < temp.{field:uid}' wäre cool, funktioniert aber nicht.)

huschi.

TschakaZulu ·

Mein Problem:
Eine horizontale Menüleiste wird mit den Top-Items gefüllt.
Damit es aber besser aussieht, hat jeder Item eine bestimmte/unterschiedliche Breite.

und was oder wie definierst Du diese bestimmte breite? Oder soll es einfach nur 'gleichmaessig' aussehen, so als ob um jedes menuitem egal wie lang es ist z.b. 'style="margin: 10px 10px 10px 10px" gesetzt ist?

formulier mal bitte deine frage um 😉

wozu ueberhaupt eine tabelle? wenn Du hier eine feste breite verwendest, dann bekommst Du sicher probs mit usern die sich einbilden ihre eigenen schriftgroessen verwenden zu muessen :o

gruss

Thomas

wasiko ·

Füg einmal die markierte Zeile ein. vielleicht hilfts.

temp.L1menuItems.1 = TMENU 
temp.L1menuItems.1.expAll = 0 
temp.L1menuItems.1.NO {  
#-------------------------
    XY = [10.w]+5, 20
#------------------------
.
.
.
Huschi ·

Hi,
die Breiten sind festgelegt: 146, 80, 119, 80
Das muß auch so sein, da variable Breiten das Design sprengen. Aber es ist genug Platz pro Zelle um die leichten Unterschiede in verschiedenen System-Schriftarten abzufangen.

Und die Frage ist einfach:
Wie setzte ich bei uid==1 ###MENU_WIDTH### auf 146, bei uid==2 auf 80, etc. ?

huschi.

maxhb ·
Huschi schrieb

Hi,
die Breiten sind festgelegt: 146, 80, 119, 80
Das muß auch so sein, da variable Breiten das Design sprengen. Aber es ist genug Platz pro Zelle um die leichten Unterschiede in verschiedenen System-Schriftarten abzufangen.

Und die Frage ist einfach:
Wie setzte ich bei uid==1 ###MENU_WIDTH### auf 146, bei uid==2 auf 80, etc. ?

Da die Breiten bei Dir statisch sind würde ich die Formatierung der Tasbellenzellen per CSS erledigen und per TS einfach die entsprechenden Klassen zuweisen:

marks.CLASS_ID = TEXT
marks.CLASS_ID.field = uid

Zusätzlich im Template:

<!-- ###SUB_L1MENU_ITEM### begin -->
  <TD WIDTH=###WIDTH### CLASS="nav1_no_###CLASS_ID###"><!--###LINK###-->###TITLE###<!--###LINK###--></TD>
<!-- ###SUB_L1MENU_ITEM### end -->

CU
maxhb

Huschi ·

@maxhb
Super Idee. Darauf bin ich nicht gekommen, dabei nutze ich die uid bereits in den MouseOver-Effekten. (Hätte also selbst drauf kommen können.)

Das Ganze hat aber einen Nachteil:
Die uid muß dafür fest in die html bzw. css-Datei kodiert werden. Da will ich die aber nicht haben, da ich die Templates auf meinem Testrechner baue wo auch andere Sites lagern. D.h. die uid's ändern sich sobald ich das Template auf den Produktivserver übertrage.

Ich teste die ganze Zeit mit TS-Typ CASE rum, aber ich hab da noch ein Parsing-Fehler:

temp.menuWidth = CASE
temp.menuWidth {
  key.feld = uid
  52 = TEXT
  52.value = 146
  50 = TEXT
  50.value = 119
  default = TEXT
  default.value = 80
}

temp.L1menuItems.1.NO.before.cObject.marks.MENU_WIDTH < temp.menuWidth

Sieht da vieleicht jemand einen Fehler?
Oder geht das an dieser Stelle gar nicht?

huschi.

maxhb ·
Huschi schrieb

Das Ganze hat aber einen Nachteil:
Die uid muß dafür fest in die html bzw. css-Datei kodiert werden. Da will ich die aber nicht haben, da ich die Templates auf meinem Testrechner baue wo auch andere Sites lagern. D.h. die uid's ändern sich sobald ich das Template auf den Produktivserver übertrage.

Stimmt, deshalb würde ich auch eher alias oder title benutzen 😉

Hab das für eine Web Site mal mit dem Alias realisiert und das ist recht nett, denn dann kannst du aussagekräftige CSS-Klassen verwenden, z.B. "MENU_IMPRESSUM"...
CU
maxhb

Huschi ·
Huschi schrieb

key.feld = uid

Aaaarg! Tippfehler!!!

Damit funzt es. Endlich... 🙂

Auf der Anderenseite finde ich den Vorschlag von maxhb ziemlich gut.
Aber jetzt muß ich erstmal zusehen, daß der Kunden was zu sehen bekommt... 😉

Danke für die Hilfe,

huschi.