Zum Inhalt springen

Drop Down Menü einbauen

Erstellt am 9. November 2011 · 29 Antworten · letzte Antwort am 7. Dezember 2011 · Seite 1 von 2

Tags: Frage

tobli ·

HAllo zusammen,

ich habe versucht, manuell in dem ich die CSS informationen und die Grafiken in mein Template mit eingebaut habe, eine Navigation mit zu erstellen.

jetzt habe ich entdecket, dass es dazu eine dazugehörgige Extetnion gibt:
http://typo3.org/extensions/repository/?tx_terfe_pi1%5Bview%5D=search&no_cache=1&tx_terfe_pi1%5Bsword%5D=freeCssDropDownMenu

Diese habe ich nun mal eingebaut, wie füge ich dies nun ein?

Mein Typo Script für die Navigation schaut aktuell so aus:

lib.field_navigation = HMENU
lib.field_navigation {
  wrap = <ul class="dropdown dropdown-horizontal">|</ul>
 
  1 = TMENU
  1 {
    expAll = 1
    noBlur = 1
    NO = 1
    NO.allWrap= <li>|</li>
 
    CUR = 1
    CUR.allWrap = <li class="current">|</li>
 
  }
 
  2 = TMENU
  2 {
    expAll = 1
    noBlur = 1
    NO.wrapItemAndSub = <li>|</li>
 
    CUR = 1
    CUR.wrapItemAndSub = <li class="current">|</li>
 
    ACT = 1
    ACT < .CUR
  }
 
  3 < .2
  3.wrap = <ul>|</ul>
  
  4 < .3
  5 < .3
}

Gruß Tobli

Julian.​Hofmann ·

Hallo.

Sieht aus, als müsstest Du v.a. das statische TS-Template in Dein Template inkludieren und dann via Konstanteneditor ein paar Werte setzen.

Was ich so aus dem TypoScript rauslese, sollten Dir danach die vier Objekte zur Verfügung stehen:

lib.freeCssDropDownMenu.horizontal
lib.freeCssDropDownMenu.vertical
lib.freeCssDropDownMenu.horizontalG 
lib.freeCssDropDownMenu.verticalG

Viele Grüße
Julian

Julian.​Hofmann ·

Das Einbinden der CSS-Dateien übernimmt die Extension für Dich. Das ist ja ein Stück weit auch der Sinn/Vorteil, wenn Features in Extensions gegossen werden 😉

Schau am besten mal im extension-Ordner in das TS (typo3conf/ext/freeCssDropDownMenu/static/freecssdropdownmenu/setup.txt). Dort siehst Du ganz gut, was die Extension alles tut, was ansonsten Du selbst alles erzeugen und einbinden müsstest.

tobli ·

ah ok, d.h. wenn ich das dropdown haben möchte, dann reicht es wenn ich aus der setup.txt etwas herauskopiere und in meine navigations config einfüge?

plugin.freeCssDropDownMenu.horizontal = HMENU
plugin.freeCssDropDownMenu.horizontal {
    special = directory
    special.value = {$plugin.freeCssDropDownMenu.horizontal.start}
    excludeUidList = {$plugin.freeCssDropDownMenu.horizontal.exclude}
    if {
        value = {$plugin.freeCssDropDownMenu.horizontal}
        equals = 1
    }
    1 = TMENU
    1 {
        wrap = <ul class="dropdown dropdown-horizontal"> | </ul>
        expAll = 1
        noBlur = 1
        NO = 1
        NO {
            ATagTitle.field = abstract // description // subtitle // title
            wrapItemAndSub = |*| <li> | </li> |*| <li class="last"> | </li>
            stdWrap.htmlSpecialChars = 1
        }
        IFSUB < .NO
        IFSUB {
            wrapItemAndSub = |*| <li class="dir"> | </li> |*| <li class="dir last"> | </li>
        }
    }
    2 < .1
    2.wrap = <ul> | </ul>
    3 < .2
    4 < .2
    5 < .2
}
Julian.​Hofmann ·

Noch einfacher:
1. Statisches Template einbinden (unter "Include") in Deinem eigenen (TypoScript-)Template-Datensatz
2. eines der vier bereits vorkonfigurierten Objekte lib.freeCssDropDownMenu.* in Dein PAGE-Objekt reinkopieren/einsetzen

tobli ·

noch einfacher, aja.

und wie mache ich 1.?
2. habe ich nun eingefügt.

Edit: müßte ich erwähnen dass ich mein template gemappt habe?

tobli ·

so jetzt habe ich verstanden.

die css ist ins mein root baustein eingebaut.
das lib.freeCssDropDownMenu.horizontal hab ich beim page eingebaut.

was zur folge hat, dass ich kein menü im frontend sehe.

tobli ·

Hallo zusammen,

auch wenn ich nerve, ich bekomme es einfach nicht hin 🙁

Extention habe ich installiert, in meinem ROOT habe ich bei "Statische Templates einschließen" FreeCssDropDownMenu (freecssdropdownmenu) zugewiesen. Zudem habe ich im ROOT Setup

plugin.freeCssDropDownMenu.themeCss = typo3conf/ext/freecssdropdownmenu/res/css/dropdown/themes/_template/default.css
plugin.freeCssDropDownMenu.page = page
plugin.freeCssDropDownMenu.headerDataId = 9876
plugin.freeCssDropDownMenu.horizontal = 1
plugin.freeCssDropDownMenu.horizontal.start = 1
plugin.freeCssDropDownMenu.horizontal.exclude =
plugin.freeCssDropDownMenu.vertical = 0
plugin.freeCssDropDownMenu.vertical.start = 1
plugin.freeCssDropDownMenu.vertical.exclude =
plugin.freeCssDropDownMenu.templavoila = 0

eingebaut.

in meiner NAVIGATION Setup habe ich dies eingefügt:

plugin.freeCssDropDownMenu.horizontal = HMENU
plugin.freeCssDropDownMenu.horizontal {
    special = directory
    special.value = {$plugin.freeCssDropDownMenu.horizontal.start}
    excludeUidList = {$plugin.freeCssDropDownMenu.horizontal.exclude}
    if {
        value = {$plugin.freeCssDropDownMenu.horizontal}
        equals = 1
    }
    1 = TMENU
    1 {
        wrap = <ul class="dropdown dropdown-horizontal"> | </ul>
        expAll = 1
        noBlur = 1
        NO = 1
        NO {
            ATagTitle.field = abstract // description // subtitle // title
            wrapItemAndSub = |*| <li> | </li> |*| <li class="last"> | </li>
            stdWrap.htmlSpecialChars = 1
        }
        IFSUB < .NO
        IFSUB {
            wrapItemAndSub = |*| <li class="dir"> | </li> |*| <li class="dir last"> | </li>
        }
    }
    2 < .1
    2.wrap = <ul> | </ul>
    3 < .2
    4 < .2
    5 < .2
}

lib.field_navigation < plugin.freeCssDropDownMenu.horizontal

Allerdings erscheint hier nun kein Menü.

Was mache ich falsch?

Gruß Tobli

jank ·

Hallo tobli noch mal auf diesem Weg.
Vorweg kurz: als ich damals diese Erweiterung geschrieben habe dachte ich nicht, dass diese sich mal groß verbreitet... Sie war am Anfang nur für den Gebrauch auf ein paar von mir betreuten Websites entstanden und auf Wunsch eines Bekannten ins TER geladen worden.

So nun zu deinem Problem:

Wenn du, wie von Julian.Hofmann erwähnt, das Typoscript der Erweiterung eingebunden hast sollte es reichen das Plugin in den entsprechenden Subpart oder Marker (hier mal nav genannt) zu kopieren:

page.10.subparts.nav < plugin.freeCssDropDownMenu.horizontal

page.10.marker.nav < plugin.freeCssDropDownMenu.horizontal

Bei einem Fluid Tempalte natürlich über:

page.10.variables.nav < plugin.freeCssDropDownMenu.horizontal

und

<!--ab Typo3 4.6 / Fluid 1.4-->
<f:format.raw>{nav}</f:format.raw>
<!--bis Typo3 4.5.x / Fluid 1.3-->
<f:format.html parseFuncTSPath="">{nav}</f:format.html>

Die Einstellungen, die du oben geschrieben hast gehören nicht ins Setup sondern in die Constants.

plugin.freeCssDropDownMenu.page = page
plugin.freeCssDropDownMenu.headerDataId = 9876
plugin.freeCssDropDownMenu.horizontal = 1
#...

Bei der Gelegenheit als Tip:
Fang jetzt mit Fluid als Template Engine an.
Dann hast du es leichter bei einegnen Erweiterungen oder dem Anpassen von Neuen Erweiterungs Templates an deine Bedürfnisse.

tobli ·

Hallo jank,

danke erstmal für deine Antwort.

Ich habe ein Yaml-Template welches ich ein wenig gemappt habe. Der BEriech für die NAvigation heißt lib.field_navigation

page.10.subparts.nav < plugin.freeCssDropDownMenu.horizontal
page.10.marker.nav < plugin.freeCssDropDownMenu.horizontal

habe ich nun in das ROOT Setup reingespeichert. Macht dies was, wenn dort bereits

page = PAGE
page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page
page.10.disableExplosivePreview = 1

steht? oder muss ich dann aus page.10.subparts.nav -> page.20.subparts.nav machen?

plugin.freeCssDropDownMenu.page = page
plugin.freeCssDropDownMenu.headerDataId = 9876
plugin.freeCssDropDownMenu.horizontal = 1
#...

habe ich nun ins das ROOT unter Konstanten gespeichert.

Da ich ein Yaml Tempalte habe kann ich dies ja nicht wie heir beschreiben einbauen, sondern?

page.10.variables.nav < plugin.freeCssDropDownMenu.horizontal

und

<!--ab Typo3 4.6 / Fluid 1.4-->
<f:format.raw>{nav}</f:format.raw>
<!--bis Typo3 4.5.x / Fluid 1.3-->
<f:format.html parseFuncTSPath="">{nav}</f:format.html>

Gruß tobli

PS: gibts nen tipp für gute Fluid Templates oder auch Erläuterungen? Dies schaue ich mir dann an, wenn es mit dem Yaml-Template läuft.

jank ·
tobli schrieb

...
Macht dies was, wenn dort bereits

page = PAGE
page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page
page.10.disableExplosivePreview = 1

steht?
...

Du hast bis jetzt nicht erwähnt, dass du TemplaVoila einsetzt...

Kann es sein, dass du neu mit Typo3 anfängst?

Jetzt von 0 auf 100 zu erklären wie man in Typo3 ein Template erstellt sprengt diesen Threads, aber es gibt ein paar gute Tutorials...

tobli ·

Hallo,

ich hab nur irgendwo geschreiben, dass ich nen Yaml-Template gemappt habe. Vergass dann wohl zu erwähnen das ich das mit Templavoila (dachte man kann nur mit dem mappen).

Ich verwende seit längerem schon Typo 3 und hab mir nach und nach nach Videotutorials was aufgebaut. Allerdigns ist dies ja sehr umfangreich. Nach dem Neuaufbau mit 4.6 kommen ein wenig tücken auf, wie das Einbinden deiner Extention in meinem gemappten Template.

Das Menü erscheint allerdings noch nicht.

jank ·

OK das mit dem "Mappen" hab ich nicht direkt mit TV verknüpft.

Typo3 ist in der Tat umfangreich. Hier hilft meistens ein Blick in die TSREF.
Und on Top nun noch TV.
Für TV musst du in den constanten

plugin.freeCssDropDownMenu.templavoila = 1

einstellen.
Darurch wird das Plugin in lib.freeCssDropDownMenu.horizontal kopiert.
Diese lib dann per als TyposcriptObjectPath Mappen.

<T3DataStructure> extensions

<TypoScriptObjPath>

string

TypoScript object path pointing to a TypoScript Template Content Object which will render the content represented by the element.

Very useful if you want to insert a menu which is defined by eg. “lib.myMenu” in the TypoScript Template of a website.

tobli ·

Hallo,

der Bereich in meiner Template.html welche ich gemappt habe,schaut so aus:

    <!-- begin: main navigation #nav -->
    <div id="nav"  role="navigation">
      <div class="hlist">
        <ul>
          <li class="active"><strong>Button 1</strong></li>
          <li><a href="#">Button 2</a></li>
          <li><a href="#">Button 3</a></li>
          <li><a href="#">Button 4</a></li>
          <li><a href="#">Button 5</a></li>
        </ul>
      </div>
    </div>
    <!-- end: main navigation -->

Das ganze habe ich Navigation genannt. die lib lautet: lib.field_navigation und ist als TypScript-Objektpfad gespeichert.
Hier muss ich nun aus dem lib.field_navigation einfach lib.freeCssDropDownMenu.horizontal machen? Wenn ja, dann sehe ich noch immer kein Menü bei mir.

Gruß tobli

jank ·

Normalerweise sollte es kein Problem sein das Menü in TV zu mappen.

Es besteht ja nur aus Typoscript und CSS/JS.

Du kannst mal im Typo3 ObjectBrowser durch die Struktur des Typoscript Templates gehen und schauen ob der gemappte Objectpath auch existiert.

Der müsste ja ein HMENU mit TMENU Ebenen sein.

tobli ·

Hallo,

in der Setup-Wurzel taucht unter lib. -> freeCssDropDownMenu
[hoizontal] = HMENU
[1] = TMENU
[2] = TMENU
[3] = TMENU
[4] = TMENU
[5] = TMENU

Allerdings erhalte ich oben schon einer Warnung, was auch immer dies bedeuten mag. (evtl nicht zugewiesen oder sowas??)

Fehler und Warnungen
2: Line 4897: Object Name String, "lib.freeCssDropDownMenu.horizontal" was not preceded by any operator, =<>({

Gruß Tobli

jank ·

Hallo tobli,
ich bekomme keinerlei Fehlermeldung im Object Browser.
Habe es soeben getestet.
Das ganze sollte so aussehen wie im Anhang.

TSOB.jpg