Zum Inhalt springen

Menü als Variable für Javascript abspeichern

Erstellt am 31. August 2008 · 3 Antworten · letzte Antwort am 1. September 2008

Tags: Frage

jbasic ·

Hallo Forum,
ich möchte ein Menü mit jquery und co. erstellen und dafür die aus dem Menü eine Variable für Javascript machen. Der Aufbau soll wie folgt aussehen:

var menu = [{url:'http://...', label:'Bla'},
{url:'http://...', label:'Blabla', children:[{url:'http://...', label:'Untermenue'},...]}...]

Das Typoscript sieht derzeit so aus:

# Template für MainMenü
temp.menu_1 = HMENU
temp.menu_1 {
# geht um das ganze Menü
  wrap = var JsTopMenu=[|]  
  1 = TMENU
  1 {
    expAll = 1
    NO {
      doNotLinkIt = 1
      stdWrap.cObject = COA
      stdWrap.cObject {
        10 = TEXT
        10 {
# Klammer auf und URL 
          wrap = {url:'{getIndpEnv:TYPO3_SITE_URL}|'
          insertData = 1
          typolink {
            parameter.field = uid
            returnLast = url
          }
        }
        20 = TEXT
        20 {
          field = subtitle//title
# Titel
          wrap =  ,label:'|'  
        }
      }
    }
    ACT <.NO
  }
  2 < .1
  2.wrap = ,children:[|]}
}

Nur irgendwie gelingt mir die Klammer- und Kommasetzung nicht, wie es gefordert ist. Entweder übersehe ich einen Punkt, wo ich noch wrappen sollte oder es geht nicht und ich muss mich mit PHP rumschlagen. Hat jemand eine Idee, wie ich das Problem gelöst bekomme?

Vielen Dank schon mal für die Hilfe und einen schönen Sonntag Abend noch!
Gruß
Jens

jbasic ·

So, hab selbst noch ein wenig rumgespielt und bin auch schon ein ganzes Stück weiter. Nun sieht mein Typoscript wie folgt aus:

temp.menu_1 = HMENU
temp.menu_1.wrap = var JsTopMenu=[|]  
temp.menu_1.1 = TMENU
temp.menu_1.1.expAll = 1
temp.menu_1.1.NO.doNotLinkIt = 1
temp.menu_1.1.NO.stdWrap.cObject = COA
temp.menu_1.1.NO.stdWrap.cObject.10 = TEXT
temp.menu_1.1.NO.stdWrap.cObject.10.wrap = &#123;url:'{getIndpEnv:TYPO3_SITE_URL}|'
temp.menu_1.1.NO.stdWrap.cObject.10.insertData = 1
temp.menu_1.1.NO.stdWrap.cObject.10.typolink.parameter.field = uid
temp.menu_1.1.NO.stdWrap.cObject.10.typolink.returnLast = url
temp.menu_1.1.NO.stdWrap.cObject.20 = TEXT
temp.menu_1.1.NO.stdWrap.cObject.20.field = subtitle//title
temp.menu_1.1.NO.stdWrap.cObject.20.wrap = |*| ,label:'|'}, |*| ,label:'|'},  || ,label:'|'}
temp.menu_1.1.IFSUB = 1
temp.menu_1.1.IFSUB < temp.menu_1.1.NO
temp.menu_1.1.IFSUB.stdWrap.cObject.20.wrap = ,label:'|',
temp.menu_1.1.ACT < temp.menu_1.1.NO
temp.menu_1.2 < temp.menu_1.1
temp.menu_1.2.wrap = children:[|]&#125;,

Habe allerdings noch 2 Probleme.
1.

temp.menu_1.2.wrap = children:[|]&#125;,

erzeugt beim letzten Eintrag ein Komma zu viel. Habe folgendes ausprobiert, funktioniert aber leider nicht wie gewünscht:

temp.menu_1.2.wrap = |*| children:[|]&#125;, |*| children:[|]&#125;, || children:[|]&#125;

Und 2.
Wie kann ich die geschweiften Klammern maskieren. Nun werden die Entities korrekt in HTML angezeigt, ich brauche sie aber in Reinform für Javascript. \{ und so funktionieren leider nicht... Wie kann ich die Zeichen in Typoscript maskieren?

Vielen Dank für die Hilfe
Jens

jbasic ·

Danke für die Antwort. So hab ich das nun auch gemacht. Seh nur gerade, dass &#_123; bzw. &#_125; logischerweise auch als { bzw } angezeigt werden. Ich möchte nun aber, dass im Quelltext die Klammer also {} statt &#_123; oder &#_125; angezeigt wird. Wie ist das zu bewerkstelligen?
Gruß
Jens