Joomla Mootools Suckerfish Tutorial - Teil 2

Montag, 20. August 2007

Ich hoffe, Sie haben sich beruhigt und können nun mit der Erstellung des Menüs fortfahren. Wählen Sie in den Modulparametern des Extended Menu den Menü Stil Flat List Tree List (Versionsänderung im Extended Menü) aus.

Jetzt haben wir das, was wir schon von Anfang an haben wollten. Das Hauptmenü wird als unsortierte Liste generiert und unterstützt, anders als beim mod_mainmenu, auch Untermenüpunkte. Lassen Sie sich von der hässlichen Darstellung des Hauptmenüs im Frontend nicht irritieren. Das haben wir gleich.

 

Bevor wir jedoch mit der Anpassung des Menüs anfangen, müssen wir ein paar Worte zu den vom Extended Menü unterstützten Templates verlieren.

Mit Templates kann Extended Menü beliebige Menüvorlagen einsetzen, um so verschiedene Designs und Funktionalitäten zu realisieren.

Unter http://de.siteof.de/extended-menu-templates.html finden sich einige bereits vorhandene Menü-Templates. Darunter auch der bekannte „Son of Suckerfish“. Das, was wir allerdings nachahmen wollen, ist der „Suckerfish vertical“.

„Cool“ werden Sie sagen. Da ist ja schon alles, was wir brauchen auf dem Weg zu unserem JSM Menü – nun, nicht ganz. Um besser zu verstehen, was das Suckerfish Menü eigentlich ausmacht, lohnt es sich die verschiedenen Menü-Templates oder diesen Artikel zu studieren: http://www.htmldog.com/articles/suckerfish/dropdowns/.

Kurz gesagt, handelt es sich um eine elegante, standardkonforme, barrierefreie und Cross-Browser-kompatible Methode, gute alte DHTML Dropdowns zu bauen. Wir wollen an dieser Stelle eben das tun, jedoch würzen wir die ganze Sache mit einer Portion Mootools, um ein paar nette Animationseffekte zu integrieren.

Warum nehmen wir also nicht das „Suckerfish vertical“ Menü und bauen darauf auf?

Im Prinzip werden wir das tun. Besonders vom Suckerfish Stylesheet werden wir uns inspirieren lassen. Was allerdings die JavaScript (JS) Elemente angeht, werden wir unsere eigene Logik entwickeln. Dies hat zwei Gründe. Erstens sind die flexiblen Animationseffekte, welche wir zum Ende einbauen wollen, recht mühsam in das vorhandene Suckerfish JS zu integrieren und zweitens wollen wir mit der JS Bibliothek Mootools arbeiten, welche uns von Hause sowieso viel von der Suckerfish JS Logik abnimmt.

So, nun aber wieder zurück zu unserem Menü. Um mit dem Styling anzufangen und das Menü im CSS gut ansprechen zu können, geben wir ihm am besten einen Suffix. Wir gehen also in die Modulparameter des Extended Menü und fügen unter dem Punkt Module Class Suffix die Zeichenkette -jsm hinzu. Dadurch können wir nun das Hauptmenü über den Klassennamen .moduletable-jsm ansprechen.

Joomla Menu Parameters

Was brauchen wir nun, um das Menü zu stylen? Richtig, eine Stylesheet Datei! Wir könnten auch das vorhandene „rhuk_solarflare_ii“ Stylesheet erweitern. Ich bevorzuge jedoch eine separate Stylesheet Datei für unser Menü. So sind wir nicht abgelenkt und können Änderungen leichter hinzufügen. Legen Sie also eine neue Stylesheet Datei in das CSS-Verzeichnis des „rhuk_solarflare_ii“-Templates. Ich habe die Datei jsm.css genannt. Jetzt binden wir diese noch leere Datei in die index.php ein. Das geht einfach, indem wir folgende Zeile direkt unter die Zeile mit dem Haupt-Stylesheet (template_css.css) einfügen:

<link href="<?php echo $mosConfig_live_site;?>/templates/rhuk_solarflare_ii/css/jsm.css" rel="stylesheet" type="text/css" /> 

Ich werde die Tricks und Kniffe des Suckerfish CSS nicht im Detail beschreiben. Wer sich für die Funktionsweise des CSS interessiert, kann dies unter dem o.g. Suckerfish-Link nachlesen.

Nun aber zu unserem CSS. Als erstes müssen wir unser Hauptmenü von Klassendefinitionen aus dem rhuk Template „säubern“. Eigentlich säubern wir sie nicht, sondern überschreiben die für uns wesentlichen Selektoren. Dazu fügen wir folgende Anweisungen in die jsm.css Datei ein:

ul#mainlevel {
list-style: none;
padding: 0;
margin: 0;
font-size: 0.8em;
}
ul#mainlevel li {
list-style: none;
background-image: none;
padding: 0;
margin: 0;
}

Nun sollte das Menü vernünftig in das Layout passen.

Der erste Schritt zum Suckerfish Menü ist die Integration des Suckerfish CSS. Diese habe ich für das Joomla! Template angepasst, und sie sehen in unserem Beispiel folgendermaßen aus:

div.moduletable-jsm {
float:left;
width:159px;
margin: 0;
margin-left:-864px;
z-index: 10;
position: relative;	
}
div.moduletable-jsm, div.moduletable-jsm ul {	
padding: 0;
margin: 0;
list-style: none;
line-height: 1;
}
div.moduletable-jsm a.mainlevel:link,  div.moduletable-jsm a.mainlevel:visited {
display: block;
background: url(../images/menu_bg.png) no-repeat;
line-height: 14px;
padding: 0;
margin: 0;
padding-top: 5px;
text-indent: 20px;
}
div.moduletable-jsm a.mainlevel:hover {	
background-position: 0px -25px;
}
div.moduletable-jsm ul ul a:link, div.moduletable-jsm ul ul a:visited {
display: block;
background: url(../images/menu_bg.png) no-repeat;
border: 0px solid #000;
width: 160px;
height: 25px;	
line-height: 24px;
font-size: 11px;
color: #ccc;
}
div.moduletable-jsm ul ul a:hover {
background: url(../images/menu_bg.png) no-repeat;
color: #fff;
}
div.moduletable-jsm li {
float: left; 
padding: 0; margin: 0;
width: 159px;
}
div.moduletable-jsm li ul {
margin: -25px 0 0 159px;
position: absolute;
width: 159px;
left: -999em; 
z-index: -10;
text-indent: 20px;	
}
div.moduletable-jsm li:hover ul, div.moduletable-jsm  li {
left: auto;
}

Bedenken Sie, dass wir das Modulsuffix -jsm verwenden und dieses CSS an einigen Stellen für das rhuk-Template angepasst ist. Sollten sie planen diese Technik in einem anderen Template einzusetzen, werden sie an einigen Stellen dieser CSS-Klassen Anpassungen vornehmen müssen.

Fügen Sie nun die Styles in das jsm.css ein. Wenn Sie das Frontend neu laden (und unter Firefox surfen), sehen Sie einige Fehler. Das „Other Menu“ hängt rechts neben dem Hauptmenü. Der Internet Explorer ist an dieser Stelle dummerweise tolerant.

Der Darstellungsfehler kommt daher, dass unser „Suckermodul“ und seine Listenelemente gefloatet (float: left;) sind. Das nächste DIV wird also dem Float gemäß dargestellt. Obwohl das korrekt ist, sieht es einfach scheußlich aus, und so war das nicht geplant. An dieser Stelle gäbe es viele Lösungsmöglichkeiten. Wir machen es uns einfach und fügen folgende Definition in unser JSM-Stylesheet:

 

.moduletable {
clear: both;
}


So werden alle nachfolgenden Modul-Klassen korrekt dargestellt. Selbstverständlich müssen die Module die Klasse .moduletable besitzen, was bei Joomla! allerdings Standard ist.

Nun sieht die Navigation ordentlich aus. Welchen Sinn hat der ganze Quatsch jetzt eigentlich? Sieht doch alles aus wie vorher und von ausklappbaren Menüs weit und breit keine Spur! Damit irgendwas ausklappen kann muss es natürlich vorhanden sein...

Um unser gerade eingefügtes Suckerfish CSS im Einsatz zu sehen, brauchen wir also ein paar Unterpunkte in unserem Hauptmenü. Erstellen Sie im Backend einfach ein paar neue Links und legen über das Feld Parent Item den übergeordneten Menüpunkt fest. Damit es sich mit diesem Tutorial deckt, fügen Sie die Links am besten dem Hauptmenüpunkt „Joomla! License“ hinzu.

Das könnte dann so aussehen:

Joomla defining Submenu
Wenn Sie jetzt ins Frontend gehen und die Seite neu laden, sehen Sie erstmal gar nichts. Die Submenüpunkte werden nur dargestellt, wenn der entsprechende Hauptmenüpunkt aktiv ist. Macht bei einem „normalen“ Menü auch Sinn – bei unserem nicht.

Klicken Sie im Frontend zunächst jedoch auf den neuen Punkt „Joomla! License“. Wenn Sie jetzt über den Menüpunkt „Joomla! License“ fahren, klappt rechts daneben unser Suckerfish Untermenü aus. Sollte das nicht der Fall sein, haben Sie irgendwas vergessen, oder Sie benutzen den IE.

Bevor wir uns um den IE kümmern, sorgen wir zunächst dafür, dass die Submenüs immer vorhanden und damit ausklappbar sind. Dazu gehen Sie bitte wieder in die Modulparameter des Extended Moduls und aktivieren dort den Punkt Expand Menu.


Joomla expand menu

Nun sind alle Submenüs immer vorhanden. Unser Suckerfish-CSS stellt sie jedoch nur dar, wenn wir es möchten.

Die IE Entwickler haben es leider auch im IE7 nicht eingesehen, eine .hover pseudo Klasse für Listenelemente zu unterstützen.

Das klassische Suckerfish Menü rüstet dies mit folgendem Script nach:

 

sfHover = function() {
var sfEls = document.getElementById("nav").getElementsByTagName("LI");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

Wie oben erwähnt, wollen wir jedoch Mootools einsetzen und realisieren deswegen eine eigene Lösung.

Bevor wir dies jedoch tun und damit diesen Teil des Tutorials abschließen, sollten Sie sich das Mootools Framework besorgen. Sie können das tun, indem Sie sich eine Version von http://www.mootools.net/download zusammenstellen. Wenn Sie sich nicht sicher sind, welche Komponenten des Framworks Sie brauchen – nehmen Sie alle! Speichern Sie die JS Datei unter dem Namen mootools.js in Ihrer Joomla Installation ins Verzeichnis /includes/js/ ab.

Haben Sie das getan, müssen Sie die Datei noch im Template einbinden. Tun Sie das über:

 

<script type="text/javascript" language="JavaScript" src="<?php echo $mosConfig_live_site;?>/includes/js/mootools.js"></script>

Wenn Sie die Frontpage nun neu laden, sollte die Mootools Datei mit eingebunden werden.

Jetzt können wir beginnen, eine Lösung für den IE zu entwickeln. Die hier dargestellte Lösung scheint ein wenig aufgebläht. Dies soll jedoch für ein besseres Verständnis sorgen und ist den noch kommenden Eingriffen kosmetischer Art geschuldet.

Hier also das Javascript:

// ist der DOM bereits geladen?
window.addEvent('domready', function() {
// alle Listen-Elemente des Menüs sammeln
var list = $$('div.moduletable-jsm li');
// jedes Listenelemet durchgehen
list.each(function(element) {
// gibt’s ein Submenü?
if ($(element).getElement('ul')) {		
// speichere es in el
el = $(element).getElement('ul')
// bischen platzieren
el.setStyle('left', 0);
el.setStyle('margin-left', 159);
el.setStyle('display', 'none');		
// bei mouseover submenü sichtbar machen
element.addEvent('mouseenter', function(){
$(element).getElement('ul').setStyle('display', 'block');
});		
// bei mouseout submenü verstecken
element.addEvent('mouseleave', function(){
$(element).getElement('ul').setStyle('display', 'none');
});
}	 
});
});

 

Speichern Sie diese Javascript Datei im rhuk Templateorder unter den Namen jsm.js in das Verzeichnis JS.

Binden Sie diese folgendermaßen in das Template ein:Wenn Sie das Frontend nun neu laden (und den Cache leeren), sollte auch der IE keine Probleme haben, das Submenü dynamisch darzustellen.

 

<script type="text/javascript" language="JavaScript" src="<?php echo $mosConfig_live_site;?>/templates/rhuk_solarflare_ii/js/jsm.js"></script>

Dies war also die Pflicht. Im Joomla Mootools Suckerfish Tutorial Teil III folgt die Kür. Dort wird endlich dem Coolness-Faktor von JSM Rechnung getragen.

feed25 Kommentare
fredibear
August 26, 2007
Stimmen: +0

...ich habe diese Tut gut nachvollziehen können und das als "aktiv50+"-Mensch.
Leider funktioniert es dennoch nicht im IE6, den ich nur zum ausprobieren genommen habe.
Ansonsten warte ich, in freudiger Erwartung, auf die nächste Folge und bis dahin nehme ich mir die von Ihnen empfohlenen Links zur Brust.

report abuse
vote down
vote up
Tom
August 26, 2007
Stimmen: +0

Erstmal vielen Dank. Das JSM Menü sollte im IE6 funktionieren, wie man an dieser Seite sehen kann. Das Tutorial hatte allerdings einen optischen Bug im IE6 welcher nun behoben ist.

report abuse
vote down
vote up
ut_codex
September 12, 2007
Stimmen: +1

Hy,
habe dein geniales menue getestet und muss sagen is ist echt genial, bei mir allerdings funktioniert es auch im IE6 nicht, ka!
wann knnen wir mit dem 3 Teil rechnen?

report abuse
vote down
vote up
Tom
September 12, 2007
Stimmen: +0

Da schon zwei Leute gemeldet haben der IE6 mache Probleme, habe ich das Tutorial auf einer frischen Installation nachvollzogen und kann nur sagen: im IE6 luft's.

Wegen der vielen einzelnen Schritte kann es jedoch sein, dass Sie vielleicht eine Kleinigkeit bersehen haben. Da es im FF bei Ihnen l伤uft knnte es sein, dass sie das IE-Pseudoklassen-Script nicht korrekt eingebaut haben (jsm.js). Achten Sie darauf, dass es korrekt verlinkt im Unterverzeichnis JS des Template-Verzeichnisses liegt.

Ansonsten: Teil 3 kommt bald!

report abuse
vote down
vote up
Tom
September 19, 2007
Stimmen: +1

... um nicht zu sagen Teil 3 ist da smilies/smiley.gif

report abuse
vote down
vote up
Holger
September 24, 2007
Stimmen: +0

Hallo,
habe auch im IE Probleme, FF funktioniert anstandslos. Bei IE6 geht gar kein Untermenu auf, im IE7 schon, es bleibt aber geffnet, wenn man mit der Maus das Menu ohne Auswahl von Unterpunkten verlsst.
Irgendeine Idee, woran das liegen k椶nnte ?

report abuse
vote down
vote up
Tom
September 24, 2007
Stimmen: +0

Das erste hört sich nach einem fehlendem JS-Skript an. Das zweite nach einem Cache Problem. Beim Webdesign ist es immer eine gute Wahl Den Cache des IE auf 0 zu setzen und ihn bei jedem Zugriff auf die Webseite zu aktualisieren.
Ansonsten am besten diese Seite (die Navi sollte im IE6 und IE7 funktionieren) Schritt für Schritt mit der eigenen vergleichen.

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

Ich gehe davon aus, dass ich die index.php welche im verzeichniss \templates\rhuk_solarflare_ii\ ist verwenden muss.

Jedoch funktioniert das ausklappen der Menu immer noch nicht. Ich habe den Mozilla.

Muss ich denn Suckerfish vertical auch installieren?


hm... bei mir werden die untermenus nur beim mausklick auf joomla-license dargestellt. Aber nicht ausgefahren, sondern ganz normal unter Joomla-license

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

Also ich bin nun am 2.Versuch. Möchte das wirklich hinbekommn.
Ich habe Joomla frisch installiert und soweit deine Anweisungen befolgt.

Nun bin ich beim Schritt, wo man folgende Zeilen in die Index.php schreibt.

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

ups irgendwie ist da etwas nicht gesendet worden. Sorry

Also nochmals zu meiner Frage.

"Jetzt binden wir diese noch leere Datei in die index.php ein. Das geht einfach, indem wir folgende Zeile direkt unter die Zeile mit dem Haupt-Stylesheet (template_css.css) einfgen:"

Muss ich dies nun in die Index.php im joomla Verzeichnis schreiben, oder in die index.php welche im Verzeichnis \templates\rhuk_solarflare_ii\ sich befindet?

Besten Dank fr deine Antwort

MFG
Andreas

report abuse
vote down
vote up
Tom
September 26, 2007
Stimmen: +0

Hallo Andreas,
nein das Suckerfish vertical brauchst Du nicht zu installieren. Du solltest JEDEN Schritt des Tutorial langsam und Schritt fr Schritt durchgehen. Ich habe das Gefhl Du hast einige Schritte vergessen. Hast Du das Extended Men켼 auf "Expand all" eigestellt? Hast Du das jsm.js korrekt eingebunden? Am besten nochmal das Tut durchgehen und schauen ob alles korrekt eingestellt ist. Viel Erfolg!

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

kann es sein, dass es mit Joomla! 1.0.8 nicht funktioniert?

report abuse
vote down
vote up
Tom
September 26, 2007
Stimmen: +0

Sein kann alles, allerdings ist es eher unwahrscheinlich, da die einzige Funktionalitt aus dem "Extended Menu" Modul kommt und dieses unter 1.0.8 funktioniert.
Das JS und CSS ist auch trivial und hngt nicht von der CMS Funktionalit䤤t ab.
Zum lokalen testen kann eine 1.0.13 Installation allerdings nicht schaden.

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

Ich habe jetzt die neue Joomla version auf dem Server und auch den neuen IE und siehe da, alles funktioniert.

Jedoch habe ich mhe mit anderen Designs.
Bis jetzt funktioniert es mit keinem der anderen Designs.

Gibt es da auch Hilfe

report abuse
vote down
vote up
Andreas
September 26, 2007
Stimmen: +0

Auch bleiben dei Untermenus stehen, wenn ich mit der Maus aus dem Menu fahre. Das ist bei Eurer Website auch anders. Dort verschwinden die Untermenus jeweils. Egal wo man mit der Maus hinfhrt.

Bei mir verschwinden die Untermenus nur, wenn ich genau wieder zur joomla license mit der Maus hinfahre.

report abuse
vote down
vote up
Tom
September 26, 2007
Stimmen: +0

Wie am Anfang des Tutorial erwähnt ist das Tutorial für das rhuk Template konzipiert. Die Anpassung für andere Templates ist jedoch für Menschen mit CSS-Kenntnissen nicht sehr schwierig. Ansonsten: Übung macht den Meister...es klappt ganz sicher und meine Tipps weiter oben (Cache) beachten.

report abuse
vote down
vote up
Andreas
Dezember 19, 2007
Stimmen: +0

Erstmal herzlichen Dank für die super Erklährung und Deine Arbeit. :-)

Ich habe jedoch festgestellt, dass es unter IE6 nicht funktioniert und wollte fragen ob dieses Problem bekannt ist und es allenfalls eine Lösung dafür gibt?

Besten Dank im voraus.

report abuse
vote down
vote up
Tom
Dezember 19, 2007
Stimmen: +0

Im IE6 wurde es getestet und sollte gehen. Vielleicht etwas vergessen oder ein Cache Problem?

report abuse
vote down
vote up
Dansel
Januar 21, 2008
Stimmen: +0

Habe das Problem, dass die Untermenüs zwar ausklappen, sobald ich aber mit der Maus nach unten gehe (um ein Sub auszuwählen), klappt das Menü wieder ein! Weiß jemand woran das liegt? Ist unabhängig von Browser und Rechner!

report abuse
vote down
vote up
Mike
Januar 31, 2008
Stimmen: +1

Hallo.

Ich versuche gerade 2 verschiedene Buttons fr das Men zu verwenden. F켼r Mainlevel verwende ich abgerundete Buttons und fr Sublevel htte ich gerne Eckige Buttons.

Kann man das irgenwie vereinen?

report abuse
vote down
vote up
Tom
Januar 31, 2008
Stimmen: +3

Eigentlich müssen Sie nur für das entsprechende Level einen Style definieren. Das Submenü ist ja die zweite Hierarchiestufe (ul ul), also:

div.moduletable-jsm ul ul a:link {
...
background: url(../images/menu_bg.png)
...
}

Die Navigation auf dieser Seite macht das genau so.

report abuse
vote down
vote up
Jörg
August 19, 2008
Stimmen: +2

Hab das Tutorial gerade bis hierhin verfolgt, und meine anfänglichen Probleme mit IE waren das Resultat einer unvollständigen mootools.js. Hatte FX nicht ausgewählt und es fehlten Funktionen.

report abuse
vote down
vote up
Markus
Februar 15, 2009
Stimmen: +0

An welcher Stelle muss ich mootools.js einbinden?

report abuse
vote down
vote up
pemue
Februar 27, 2010
Stimmen: +0

@Markus:
Dort wo du auch die jsm.css eingebunden hast, also in der index.php des templates.

report abuse
vote down
vote up
Andreas
Mai 27, 2010
Stimmen: +0

Trotz genauer Studie des Tutorials geht bei mir das Untermenü brav unter den Hauptpunkten auf.
Mir ist folgendes nicht ganz klar. Liege ich richtig, dass die jsm.css mit den Einfügungen ul#mainlevel.... und div.moduletable... und der Anweisung .moduletable... gefüttert wird? Die Einbindung in die index.php ist auf jeden Fall korrekt.
Wenn ich mit dem Firebug kontrolliere wird im Menü aber immer noch auf die template_css.css Datei verweisen. Im Modul mod_exmenu-j15 wurde der Suffix -jsm aber zugewiesen.

report abuse
vote down
vote up

Kommentar schreiben
 
  kleiner | groesser
 

security image
Bitte den folgenden Code eintragen


busy
 

B01 realisiert zeitgenössische Online-Kommunikationsmittel.
Wir sind spezialisiert auf OSCMS und unterstützen unsere Kunden vom Konzept bis zum Launch mit Erfahrung und exklusiven Komponenten zur Umsetzung von Communitys, Shops, Portalen und Webseiten.

B01 Kunden

Unsere Ideen, unsere Produkte, unsere Kunden.

B01 empfiehlt:

ZOO Content Construktion Kit

ZOO CCK

Virtuemart Shopsystem

E-Commerce

Joomla SEO

SEO

Joomla Content Editor

Content Editor

Joomla Social Networking

JomSocial