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,

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

tobli ·

Hallo jank,

die besagte Zeile ist leer.

4884: 
4885: [GLOBAL]
4886: page.shortcutIcon = fileadmin/templates/images/favicon.ico
4887: page.meta {
4888:   author = XXX
4889:   publisher = XXX
4890:   reply-to = XXX@XXX.de
4891:   robots = index,follow
4892:   revisit-after = 30 days
4893:   copyright = XXX, TXXX
4894:   MSSmartTagsPreventParsing = true
4895:   imagetoolbar = false
4896: }
4897: 
4898: lib.freeCssDropDownMenu.horizontal - ERROR: Line 4898: Object Name String, "lib.freeCssDropDownMenu.horizontal" was not preceded by any operator, =<>({
jank ·

Das sieht so aus als überschreibst du in deinem Template das TS von der Extension.
Deswegen auch die Fehlermeldung.

Lösch mal

lib.freeCssDropDownMenu.horizontal

aus dem Setup von deinem Template.

jank ·

Leider habe ich keine Ahnung warum es immer noch nicht sichtbar wird. Vielleicht mal mit einem einfachen TEXT Objekt testen und das dann mit mappen...

lib.test = TEXT
lib.test.value = Foo Bar!
tobli ·

Hallo jank,

vllt. könntest du dir dies mal etwas genauer ansehen? Ich könnte dir Zugangsdaten geben oder via Teamviewer und MSN oder ICQ?

Ich verzweifle nämlich echt langsam. vllt. liste ich auch heir nochmal alles auf, was ich wo eingetragen habe. habe eben mein template auch nochmals neu gemappt.

gemappt habe ich diesen Bereich der template.html

    <!-- 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 -->

auf den Bereich div class hlist auf den Typoscriptnamen lib.freecssdropdownmenu (mehr ging nicht)
ROOT
CONFIG
PAGE
NAVIGATION
EXTENTION

dem ROOT habe ich das dazugehörige CSS zugewiesen
im KONSTANTEN von ROOT steht:

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 = 1

im SETUP von ROOT:

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

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

im SETUP von NAVIGATION steht:

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
}

Gruß Tobli

Lightrider ·

ICh weiß nicht wie deine default.css aussieht, aber ich hab bei den konstanten da eine eigene für das design gesetzt, nimm die doch bei dir mal bei den konstanten den eintrag themeCss raus.

tobli ·

Hallo,

danke auch für deinen Tipp. Habe das themeCss kurz entfernt. Hat aber auch nichts gebracht.

Gruß Tobli

jank ·

Wie ich sehe stimmt da so einiges nicht.

Wenn du TV nutzt musst du das Menü natürlich auch mit TV mappen und nicht mit

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

versuchen in ein Standard TEMPLATE einzufügen.

Dein page.10 ist ja kein TEMPLATE sondern ein USER Objekt sprich TV Template.

Du musst in TV den TypoScript Pfad mappen. Dafür gibt es auch TUTs. Auf die schnelle mal das gefunden:

TemplaVoila – Tutorial Teil 1 – Templates erstellen und mappen

Dort wird etwas weiter unten beschrieben, wie man ein Typoscript Objekt in TV einbindet.

Ich bin leider kein TV Experte.
Auch kann ich keinen Remote Support bieten. Damit würden ich außerdem denen schaden die damit ihren Lebensunterhalt verdienen...