Zum Inhalt springen

[Beispiel] ypMenu ( GMENU horizontal , ypSlideOutMenus )

Erstellt am 25. Januar 2005 · 119 Antworten · letzte Antwort am 13. November 2007 · Seite 2 von 6

Tags: JavaScript & AJAX, Tipp

Therealherby ·

Hallo,

Ist ypMenu auch mit anderen Browsern kompatibel ( Opera, Firefox?)

Ja, siehe http://cerutti.abix.ch/

An welchen stellen muss man eventuell modifizieren?

Tja diese Frage stelle ich mich auch. Benutz mal die Suchfunktion "Beispiel ypmenu", da muesste ne Anleitung kommen. Im Grunde die PHP & Css Datei, die regeln alles designtechnische.

Vielleicht kann mir mittlerweile jemand sagen wie ich die Transparenz fuer Opera, InternetExplorer & Co hinbekomme (Firefox geht's schon).

Ich verspreche auch alles gut kommentiert hier preiszugeben wenn ich fertig bin 8-)

Bye und Gruss
Herby

mstuebner ·
Alex Weber schrieb

1. was muss ich alles anpassen um das menü auch vertikal zum laufen zu bekommen? oder hat da eventuell schon jemand was erstellt was er preisgeben würde?

Du must lediglich in der Datei ypMenu.php in der Funktion function buildIndex($I, $conf, $level) die Zeile:

$GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'down';

in

$GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'right';

ändern.

maik ·

Ich habe ein kleines Problem. o.O

Soweit funktioniert alles, ich erhalte aber ein paar Warnings.

Ich bekomme immer vier mal

Warning: imagettfbbox(): Could not find/open font in /var/www/typo3.7/fileadmin/scripts/ypMenu/ypMenu.php on line 135

gefolgt von einmal

Warning: Cannot modify header information - headers already sent by (output started at /var/www/typo3.7/fileadmin/scripts/ypMenu/ypMenu.php:135) in /var/www/typo3.7/typo3_src-3.7.0/typo3/sysext/cms/tslib/class.tslib_fe.php on line 2402
temp.ypMenu.special = directory

Hat jemand eine Ahnung, was das sein könnte?

maik ·

Es lag daran, dass imagettfbbox die Fonts nicht gefunden hat.

nachdem ich im php file den Pfad zur Verdana nach t3lib/fonts/verdana.ttf umgebogen hatte, waren die Warnings weg.

n-joy ·

Hi Leute...

Kurz zum Thema Browserkompatibilität:
Opera: Das Menü funktioniert nur wenn sich Opera NICHT als Opera ausgibt. Wenn ihrs doch so einstellt, dann funktioniert das gesamte JavaScript nicht bzw. nur fehlerhaft... was ein "nicht ausfahren" der Menü's zur Folge hat.

Jetzt noch etwas zur Menütransparenz:
Bei Opera gibt es im Hinblick auf die Menütransparenz noch etwas zu beachten, denn auch wenn sich Opera nicht als solcher ausgibt funktioniert die "standard-transparenz" nicht. Daher muss man in der ypMenu.php folgendes einstellen:

var $transBg = 'fileadmin/scripts/ypMenu/menu_bg.png'; // transparente PNG datei, behebt transparenz-fehler beim Mac IE 5 und Opera - die PNG-Transparenz sollte die gleiche sein wie die der CSS-FILTER-eigenschaft: alpha(opacity)

Das png Bild welches man dort einstellt ist jenes das bei Opera als Menühintergrund benutzt wird. Dieses png Bild muss man dementsprechend seinem Menü anpassen sowohl farblich als auch von der transparenzstärke her.

Um sicherzustellen, dass das Menü von der transparenz her in Opera, IE, Firefox und anderen Browsern gleich aussieht sollte man sich vielleicht folgenden code(ab Zeile 275) in der ypMenu.php anschaun:

            // ie >= 5.5 on win and mozilla can render transparency by css
         if(($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'msie' AND $clientinfo['VERSION'] >= 5.5) OR ($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'net')) {
            $filter = true;
            $style = 'style="-moz-opacity:.82; filter:alpha(opacity=82); background-color: #d3d3d3"';
            // Mr. IE on Mac needs a special treatment - a transparent png in a img tag in the background
         } elseif($clientinfo['SYSTEM'] == 'mac' AND ($clientinfo['BROWSER'] == 'msie')) {
            $pngimg = true;
            $style = 'style="background-color: transparent"';
            // Opera and Mozilla on Mac can handle transparent pngs
         } elseif(($clientinfo['SYSTEM'] == 'mac' AND $clientinfo['BROWSER'] == 'net') OR ($clientinfo['BROWSER'] == 'opera')){
            $pngbg = true;
            $style = 'style="background-image: url(''. $this->transBg .'');"';
            // no transparency for the rest - go get firefox!
         } else {
            $bg = true;
            $style = 'style="background-color: transparent"';
            $appendix = 'b';
         }

Wie man sieht wird hier unter anderem die Transparenz für den MSIE und den Mozilla/Firefox festgelegt... ( style="-moz-opacity:.82; filter:alpha(opacity=82); background-color: #d3d3d3" )
Die anderen Einstellungen würde ich hier unveränder lassen.. es sei denn man hat Ahnung 😉

Ich hoffe hiermit einigen weitergeholfen zu haben, was die Browserkompatibilität und Transparenz des Menü's angeht ... 🙂

MfG

solar ·

Hallo,

wie bekomme ich den das Menu mit TemplaVoila umgesetzt?

Die Marker:

marks.MENU = COA
marks.MENU {
10 < temp.ypMenu
20 < temp.user_menu
}

gehen ja so nicht.

Wie und wo setze ich temp.user_menu ?

Vielen Dank für eure Hilfe

s.​sach ·

Hi Leute,

jetzt mache ich schon seit Tagen mit diesem Menü rum und verzweifele bald. Habe mich ganz genau an die Anleitung gehalten, jedoch wird bei mir kein Menü angezeigt. Content usw. wird angezeigt, jedoch das Menü nicht.

Ich denke mein Fehler liegt hier: In Beispiel steht ja unter temp.ypMenu "... Deshalb kommt auch nur wenig TS in das MainTemplate(externes Template einbinden)". Wie binde ich dies genau ein? Wird es nicht schon durch "10 < temp.ypMenu" eingebunden?

Habe das Template "temp.ypMenu" mal bei "Include base template" eingetragen. Dann kommt jedoch die Fehlermeldung "Fatal error: Call to undefined function: getmountpointinfo() in /www/htdocs/xxxxxxx/fileadmin/scripts/ypMenu/ypMenu.php on line 101". Die ID der Rootseite habe ich jedoch korrekt eingetragen.

Und was hat es mit "20 < temp.user_menu" auf sich?

Vielen Dank für Eure Hilfe!

n-joy ·

Hi s.sach,

das externe Template bildest du schon richtig ins MainTemplate ein... also

1. das externe Template ins "Include base template" des MainTemplates eintragen

2. und dann noch ins MainTemplate die "platzhalter (temp.blablubb) " aus dem externen Template durch "<" einbeziehen...

also so in etwa:

... weiterer TS-code

    marks.MENU = COA
    marks.MENU {
        10 < temp.ypMenu
        20 < temp.user_menu
    }

... weiterer TS-code

< temp.ypMenu (hierdurch wird das menü an sich angebunden, also der TS-code wird übergeben [bestimmt wo genau das menü erscheinen soll])

< temp.user_menu (diese übergabe beinhaltet einen teil des menü-quellcodes, der dann in der html-ausgabe entscheident ist [dieser teil kann irgendwo in der seite ausgegeben werden])

hoffentlich war ich auch nur halbwegs verständlich 8-)

MfG

s.​sach ·

@n-joy

Danke. Hab es gerade mal auf einem anderen Account bei einem anderen Provider versucht. Dort funktioniert es. Kann es sein, dass ein Provider das Ausführen von Javascript unterbindet?

n-joy ·

nein, javascript kann vom server her nicht unterbunden werden ! (es sei denn da läuft ein script durch alle files und macht den js-code unschädlich - was aber eh nicht so sein wird ^^)

also nein, javascript wird nie von servern unterdrückt, da es vom client ausgeführt/verarbeitet wird !

evtl. hats auf dem anderen Provider funktioniert weil du nicht die gleiche konfiguration benutzt hast ? ..also nicht die selben extensions usw. ? 🙂 (es gibt recht viele konflikte zwischen den ganzen extensions . . . und auch den eingebauten scripten )

MFG

s.​sach ·

Also ich hatte auf dem Account, wo das Menü nichtfunktionierte noch Typo 3.6 Beta2 laufen. Hab es auf 3.6.2 upgedatet und nun funktioniert das Menü #paralyzed#

s.​sach ·

Hi Leute,

bräuchte mal Hilfe. Möchte im Hauptmenü erreichen, dass beim Rollover ein border-bottom angezeigt wird.

Habe folgenden und ähnlichen Code schon an den verschiedensten Stellen versucht, leider ohne Erfolg:

wrap = <div style="border-bottom: solid 2px #FF0000"> | </div>
config.no_cache = 1
page.includeLibs.ypMenu = fileadmin/ypMenu/ypMenu.php
page.headerData.11 = TEXT
page.headerData.11.value = <script type="text/javascript" src="fileadmin/ypMenu/ypSlideOutMenus.js" language="JavaScript"></script>
temp.ypMenu.special = directory
# 57 ist die ID der root-page - siehe screenshot 
temp.ypMenu.special.value = 1
temp.ypMenu = HMENU
temp.ypMenu {
     1 = GMENU
     1 {
          IProcFunc = user_menu->firstLevel
          expAll = 1
          wrap = |
          NO = 1
          NO {
               wrap = |
               XY = 160, 31
               30 = IMAGE
               30.file = fileadmin/ypMenu/menu_bg2.gif
               50 = TEXT
               50 {
                    text.field = title
                    fontSize = 10
                    fontFile = fileadmin/fonts/verdana.ttf
                    fontColor = #FFFFFF
                    offset = 7,20
                    niceText = 0
                    transparentBackground = 1
               }
               100 = || IMAGE
               100.file = fileadmin/ypMenu/menu_space.gif
          } 
          IFSUB < temp.ypMenu.1.NO
          IFSUB = 1

          RO < temp.ypMenu.1.NO
          RO = 1
          RO {
               wrap = <div style="border-bottom: solid 2px #FF0000"> | </div>
               backColor = #88BCE8
               30 >
          }

          IFSUBRO < temp.ypMenu.1.NO
          IFSUBRO = 1
          IFSUBRO {
               backColor = #88BCE8
               30 >
          }
     }    

     2 = TMENU
     2 {
          IProcFunc = user_menu->secondLevel
          expAll = 1
          NO.linkWrap = <li>|</li>
     }

     3 = TMENU
     3 {
          IProcFunc = user_menu->thirdLevel
          expAll = 1
          NO.linkWrap = <li>|</li>
     }

     4 = TMENU
     4 {
          IProcFunc = user_menu->fourthLevel
          expAll = 1
          NO.linkWrap = <li>|</li>
     }
}

temp.user_menu = USER
temp.user_menu.userFunc = user_menu->menuEnd

Vielen Dank!

McLoud ·

Hi bin kurz vorm verzweifeln!
kann jemand mal hier http://xevent.de/index.php?id=392 vorbeisehen und mir sagen was ich falsch mache!
Ich hab es schonmal hinbekommen dass das Menu angezeigt wird nur leider total falsch! und es fährt nicht wieder ein!

zum Hintgrund hab das Setup im Main Template anpassen müssen:

page = PAGE
page.typeNum = 0
page.stylesheet = fileadmin/templates/style2/class.css
     page.10.marks.MENU = COA
     page.10.marks.MENU {
     10 < temp.ypMenu
     20 < temp.user_menu
     }

Da ich das Crcph Template als Grundlage genommen hatte für mein Template.

Der Rest ist im originalzustand wie es beschrieben wurde. Vielleicht übersehe ich nur ne Kleinigkeit.

Anbei auch ein teil meines html Code

 <div id="headerlayer" style=" color: black; font-size: medium; font-family: serif; visibility: visible; display: block; position: absolute; z-index: 1; top: 10px; left: 4px; width: 775px"> 
<table width="770" border="0" cellspacing="0" cellpadding="0">
<tr> 
<td width="151"><img src="header_left.gif" width="151" height="70"></td>
								<td class="hdr" colspan="2"><img src="spacer.gif" width="1" height="70"></td>
							</tr>
</table>
</div>
<div id="mainlayer" style="position:absolute; left:4px; top:80px; width:770px; z-index:2"> 
<table width="770" border="0" cellspacing="0" cellpadding="0">
<tr> 
<td colspan="6" class="menuborder"> <table width="770" border="0" cellspacing="1" cellpadding="0">
<tr> 
<td><div id="cMenu">###MENU###</div></td></tr>
</table></td>
</tr>
<tr>
					<td height="340" valign="top" class="menucell" width="770" colspan="3">&nbsp; </td>
				</tr>
<tr> 
<td class="tabcontent" width="16" valign="bottom"><img src="footer_left.gif" width="16" height="16"></td>
<td class="footer" width="738"> <p></p></td>
					<td class="tabcontent" width="16" valign="bottom"><img src="footer_right.gif" width="16" height="16"></td>
				</tr>
</table>
</div>
<div id="parentslayer" style=" color: black; font-size: medium; font-family: serif; visibility: visible; display: block; position: absolute; z-index: 3; top: 120px; left: 21px; width: 542px; height: 295px; overflow: hidden; clip: rect(0 400 295 0)"> 
<div id="childslayer" style=" color: black; font-size: medium; font-family: serif; visibility: visible; display: block; position: absolute; z-index: 1; top: 0; left: 0; width: 534px"> 
<table width="533" border="0" cellspacing="0" cellpadding="0">
<tr> 
<td class="content" valign="top"><!-- ###SUB_CONTENT### start
	
	This indicates the main content area
	
	--><!-- ###SUB_HEADER1### 
	
	This is the layout of header type 1
	
	-->
							<table width="553" border="0" cellspacing="2" cellpadding="0">
								<tr>
									<td><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#ffffff">###MARK_HEADER###</font></td>
								</tr>
								<tr>
									<td bgcolor="#D6D3CE"><img src="apache/htdocs/xevent/media/uploads/crcph/clear.gif" width="1" height="1" alt="" /></td>
								</tr>
								<tr>
									<td bgcolor="#D6D3CE"><img src="apache/htdocs/xevent/media/uploads/crcph/clear.gif" width="1" height="1" alt="" /></td>
								</tr>
								<tr>
									<td bgcolor="#D6D3CE"><img src="apache/htdocs/xevent/media/uploads/crcph/clear.gif" width="1" height="1" alt="" /></td>
								</tr>
							</table>
							<!-- ###SUB_HEADER1### --><!-- ###SUB_CONTENT### end --></td>
</tr>
</table>
Strichmaennli ·

hallo mcloud

habe vorbeigeschaut und konnte keine probleme erkennen. Was sollte bei deinem menü nicht funktionieren?

Kannst Du mir bei bei meinem problem helfen?
siehe #23000

gruss

swingtra ·

Hallo,
also ich habe aus meiner Sicht einmal dieses Menü ganz
genau so zusammen gebaut, wie beschrieben.
Allerdings würde ich gerne um das ganze Richtig zu verstehen - einmal die passenden Bilder(gifs) dazu bekommen - um zuverstehen
danach kann ich es immer noch anpassen .
Ich versichere die pics nicht weiter zu benutzen.

Es ist so daß der Marker zwar weg ist aber nichts von dem Menü zu sehen ist- Also fehlt mir irgentwas .

dann gibt es da noch ein Problem :

im Main Tepmlate :

page = PAGE
page.typeNum = 0
page.stylesheet = fileadmin/templates/style2/class.css
page.10 = TEMPLATE
page.10{
template = FILE
template.file = fileadmin/templates/style2/template.htm
workOnSubpart = DOKUMENT

marks.MENU = COA
marks.MENU {
10 < temp.ypMenu
20 < temp.user_menu
}
}

bei " 20 < temp.user_menu " - wo steht das ?
gehört das mit zu dem Menü ?

Also hm irgentwie bin ich jetzt etwas am verzweifeln

was könnte ich falsch gemacht haben ?

auf wunsch sende ich die login-daten

Mfg. Heiko

swingtra ·

also .... :o bei mir zeigte kein Menü an - weil ...

(Jetzt kommts)

ich hatte mir in der tmp.ypmenu ein eigenes Bein gestellt
weil ich in der allerersten Zeile

einfach das drinnen stehen hatte :

Typo3: externes Template ( temp.ypMenu ) -> Setup

(anstatt ...

#Typo3: externes Template ( temp.ypMenu ) -> Setup

)

:o :o :o
ich hatte einfach die Raute vergessen und gesucht und gesucht und gesucht - mich aufgelöst ... - banal !
#paralyzed# #paralyzed# #paralyzed#

alex_5 ·

Hi, sagt mal ist es prinzipiell auch moeglich die erste Navigationsebene von dem schicken Menue vertikal, also untereinander zu bauen?

swingtra ·

Also ... ( das steht schon in
#20440 )

Möglichkeit 1 :

Du must lediglich in der Datei ypMenu.php in der Funktion function buildIndex($I, $conf, $level) die Zeile:
Code:
$GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'down';

in
Code:
$GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'right';

ändern.

Möglichkeit 2 : siehe http://www.vital-by-nature.de/
...und auf horizontal belassen und nicht wie oben beschrieben ändern .
Dafür im Backend die Hauptmenüpunkte vom Rootlevel oder Homelevel aus, untereinander anlegen
(wie im Beispiel hinter "home")
- das Menü habe ich wegen der Browser-Geschichte
in temp.ypMenu so gewrappt :

wrap = <div class="cMenu"> |

... und cMenu steht in der class.css, deswegen Raute weg.
der andere Kram wegen der Positionierung steht in der PHP-Datei und ist unter Punkt

http://steinhauer-gmbh.net/_tmp/ypMenu/

beschrieben .

- na dann . 😉

... und noch was die zu veränderten Dateien - vorher kopieren - erst dann ändern

Strichmaennli ·

Habe folgendes Problem:

Bei Firefox stimmt die Positionierung der Untermenüs, bei Internet Explorer ist diese jedoch leichter verschoben.
Wo mache ich diese Einstellung?

swingtra ·
Strichmaennli schrieb

Habe folgendes Problem:

Bei Firefox stimmt die Positionierung der Untermenüs, bei Internet Explorer ist diese jedoch leichter verschoben.
Wo mache ich diese Einstellung?

Also ...
die Antwort meiner Meinung nach ist schon hier erschienen, quasi unter diesem Thema .

Aber - was ich machen würde ist folgendes.
Mache eine Testumgebung lokal auf.
Warum ? weil Du in der class.css das "#cMenu" in ".cMenu" ändern wirst - dadurch werden sich die XY-Koordinaten deines Menüs verschieben (Vorraussetzung ist der exakte Nachbau von "NJoy")
das cMenu betimmt den neuen Nullpunkt - deswegen ist wohl alles verschoben, deswegen muss neu angepasst werden und deswegen die Testumgebung.
erst danach die Änderungen übernehmen .

so jetzt eine Änderung :p :
Im Typoscript-Setup vom temp.ypMenu das ändern :

1 = GMENU
1 {
IProcFunc = user_menu->firstLevel
expAll = 1
<b>wrap = <div class="cMenu"> |</b>
NO = 1

... um auf die Parameter der class.css zuzugreifen.

-in meiner class.css steht folgendes ( ist individuell) :

.cMenu {
height:0px;
width: 100px;
margin-left:0px;
margin-bottom:0px;
background: url(mmenu_bg.gif) repeat-x top center;
position: relative; /* wichtige angabe, sonst taucht das slideMenu an falscher Position auf */
}

- in meiner ypMenu.php steht folgende Änderung (auch individuell - das sind die XY- Koordinaten) :

class user_menu {
var $offsetY = 30; // vertikale fixierung des slideMenu's - relativ zum gecenterten DIV oder TD
var $offsetX = 1; // horizontale fixierung des slideMenu's - rel zum gecenterten DIV oder TD
var $sublevelWidth = 70; // breite des sublevel elements
var $sublevelHeight = 25; // höhe des sublevel elements

var $padding = 5; // padding-abstand rechts und links
var $fontSize = 11; // schriftgröße
var $breakpoint = 14; // bricht Zeile nach X(14) Zeichen um
var $secPadding = 1; // padding-abstand oben und unten

<b>... da musste selbst einstellen-danach sollte es mit allen Browser klappen</b>

wichtig ist der zugriff auf den Punkt cMenu - damit alle Browser wissen "wo gewrappt" wird .

- na dann ! 😉