Zum Inhalt springen

RO in GMENU mit disableAllHeaderCode

Erstellt am 13. April 2006 · 9 Antworten · letzte Antwort am 30. April 2006

Tags: Frage

Benjamecho ·

Hallo!

Kennt jemand eine Möglichkeit, das für den RollOver-Zustand eines GMENU notwendige JavaScript nachträglich in einen Marker zu parsen?

Ich habe "disableAllHeaderCode = 1" gesetzt, um den Quelltext sauber halten zu können, muss allerdings nachträglich dieses "additionalJavaScript" (oder was auch immer das sein mag) reinbekommen ;-(

Würde mich sehr über eine positive Antwort freuen!!!

Viele Grüße
Ben

NCoDer ·

Es gibt 3 dynamisch erzeugte Javascripts-Abschnitte:

Einmal <script type="text/javascript" src="typo3temp/javascript_757c080409.js"></script>

da steht aber nur statischer Code für die Browserweiche drin (wenn man nicht noch mehr Funktionen eingebaut hat), den kannst du auch ins Template direkt reinschreiben:

var msie4 = (browserName == "Microsoft Internet Explorer" && browserVer >= 4);
        if ((browserName == "Netscape" && browserVer >= 3) || msie4 || browserName=="Konqueror" || browserName=="Opera") {version = "n3";} else {version = "n2";}
// Blurring links:
function blurLink(theObject)    {    //
  if (msie4)    {theObject.blur();}
}

kritischer ist es mit dem 2.Teil, da man ja die temporären Namen der Bilddateien nicht kennt:

if (version == "n3") {
img19_3dc2_0_n=new Image(); img19_3dc2_0_n.src = "typo3temp/menu/5e93d35621.gif";
img19_3dc2_0_h=new Image(); img19_3dc2_0_h.src = "typo3temp/menu/5e93d35621.gif";
img12_3dc2_1_n=new Image(); img12_3dc2_1_n.src = "typo3temp/menu/fb783d03cd.gif";
img12_3dc2_1_h=new Image(); img12_3dc2_1_h.src = "typo3temp/menu/5a55b10a6a.gif";

usw.

Da werden neue Imageobjekte für jede temporäre Bilddatei angelegt. DiesenTeil brauchen aber nur ältere Browser sowie Opera und Konqueror.
Ich würde sagen, bei denen könnte man auf den Rollover-Effekt verzichten (bei Opera geht es inzwischen bestimmt auch so wie bei den anderen).

Der dritte Teil enthält die Funktionen für den Rollover-Effekt, die kannst du ja direkt ins Template reinschreiben und so modifizieren dass sie bei version=='n3' nichts tun. Die Funktionen im Original sehen so aus:

function over(name,imgObj)    {    //
        if (version == "n3" && document[name]) {document[name].src = eval(name+"_h.src");}
        else if (typeof(document.getElementById)=="function" && document.getElementById(name)) {document.getElementById(name).src = eval(name+"_h.src");}
        else if (imgObj)    {imgObj.src = eval(name+"_h.src");}
    }
        // JS function for mouse-out
    function out(name,imgObj)    {    //
        if (version == "n3" && document[name]) {document[name].src = eval(name+"_n.src");}
        else if (typeof(document.getElementById)=="function" && document.getElementById(name)) {document.getElementById(name).src = eval(name+"_n.src");}
        else if (imgObj)    {imgObj.src = eval(name+"_n.src");}
    }

Gruß,

Nico

Benjamecho ·

Hallo Nico,

erstmal vielen Dank!

NCoDer schrieb

Der dritte Teil enthält die Funktionen für den Rollover-Effekt, die kannst du ja direkt ins Template reinschreiben und so modifizieren dass sie bei version=='n3' nichts tun. Die Funktionen im Original sehen so aus:

Ich habe gerade mal testweise ein alert(browserVer); in die "Browserweiche" eingebaut: Firefox gibt mir eine "5" und der IE eine "4" und somit springen beide auf "n3" an:

if ((browserName == "Netscape" && browserVer >= 3) || msie4 || browserName=="Konqueror" || browserName=="Opera") {version = "n3";} else {version = "n2";}

Grundsätzlich glaube ich, dass alle Browser die dynamischen Dateinamen brauchen, denn aus dem normalen Dateinamen lässt sich der Hover-Dateiname nicht ableiten. Beispiel:

<a href="ordner/" onmouseover="over('img114_c6ae_0');" onmouseout="out('img114_c6ae_0');"><img src="typo3temp/menu/38db1ab705.gif" width="163" height="18" border="0" name="img114_c6ae_0" alt="" /></a>

zugehöriges Hover-JS:

img114_c6ae_0_n=new Image(); img114_c6ae_0_n.src = "typo3temp/menu/38db1ab705.gif"; 
img114_c6ae_0_h=new Image(); img114_c6ae_0_h.src = "typo3temp/menu/d22f94c880.gif";

Ich gehe also davon aus, dass die dynamischen Bildnamen schon per JavaScript eingebunden werden müssen und somit die einzige mögliche Lösung daran besteht, dass ich irgendwie das ursprüngliche Script, welches das JS-Zeugs generiert, nehme und damit einen von mir definierten Marker fülle. Die Frage ist bloß wie...

Geschickter wäre es natürlich, wenn Typo3 direkt alle Hover-Bilder unter gleichem Dateinamen mit einem fixen Zusatz (z.B. *_h.gif abspeichern würde).

Viele Grüße und allen schöne Ostern!
Ben

toyde ·

Ich habe "disableAllHeaderCode = 1" gesetzt, um den Quelltext sauber halten zu können, muss allerdings nachträglich dieses "additionalJavaScript" (oder was auch immer das sein mag) reinbekommen ;-(

Weshalb gehst Du nicht von der anderen Seite an das Problem: blende das aus, was Du nicht möchtest. So bleibt das Notwendige bestehen.

JS und CSS-Styles kann man ja alles bequem per Einzeiler ausblenden.

Benjamecho ·

Ja, ich denke darauf muss es dann leider zwangsläufig hinauslaufen, wenn ich es so nicht hinbekomme. Das Problem dabei ist, dass ich bisher alle Projekte immer mit dem disableAllHeaderCode angegangen bin und noch keine Erfahrungen mit dem "normalen" Anatz habe. In meinem Header gibt es halt Marker, die mit dynamischem Inhalt gefüllt werden und ich befürchte, das das dann auch überschrieben wird, und ich dann für jede Extension angeben muss, dass diese nichts in den Header schreiben soll. Bevor ich weiter Eure Zeit mit meiner untypischen Herangehensweise verschwende, werde ich mich mal daran setzen und es testen. Falls Du den "Einzeiler" gerade zur Hand hat würde ich mich natürlich darüber freuen, ansonsten find ich's bestimmt auch in der TSREF..

P.S. Der Grund für mein bisheriges "disablen": Ich wollte ein CMS, bei dem ich definieren kann was wo hingeschrieben wird – und nicht eins, bei dem ich alles überflüssige ausblende, bis es so aussieht, wie ich es mir vorstelle ;-)

toyde ·

P.S. Der Grund für mein bisheriges "disablen": Ich wollte ein CMS, bei dem ich definieren kann was wo hingeschrieben wird – und nicht eins, bei dem ich alles überflüssige ausblende, bis es so aussieht, wie ich es mir vorstelle

War nur ein Tipp. Ob das nun mehr Zeit kostet alles Nötige erneut hineinzuschreiben oder das Störende auszublenden, kann ich nich beurteilen. Spätestens wenn ich mit JS für Bilder jonglieren müsste, würde ich Letzteres wählen.

Beispiel: CSS einer Extention leeren (im TS Object Browser nachschlagen)

plugin.tx_veguestbook_pi1._CSS_DEFAULT_STYLE >

Default JS/CSS im Header ausblenden bzw. auslagern:

#external = auslagern, none = leeren
config.removeDefaultJS = external
config.inlineStyle2TempFile = 1

(beides Setup Snippets)

Benjamecho ·

So, disbleAllHeaderCode ist aus und das RO-Menü funktioniert so wie es soll. Bei der Umstellung sind noch ein paar Fragen aufgekommen - ein paar Kleinigkeiten, die ich noch gerne anpassen würde, aber nirgendwo Lösungsansätze ohne Verwendung zusätzliche Extensions gefunden habe:

1. der Title-Tag
Da ich den Untertitel dem Seitentitel als <title> bevorzuge, habe ich es so umgesetzt:

page.headerData {
  1 = TEXT
  1.field = subtitle // title
  1.wrap = <title>|</title>
}

Das sieht allerdings im Quelltext etwas unschön aus, da vor dieser Zeile, entgegen allen anderen Zeilen des Head-Bereiches, der Tabulator-Abstand fehlt. Kann man den irgendwie reinbekommen? Es ist zwar nicht so tragisch, aber wenn ich das alles für zukünftige Projekte als Vorlage nehme, dann sollte es auch so gut wie möglich sein.

2. <meta name="generator" content="TYPO3 4.0 CMS" />
Wie kann ich diese Zeile wegbekommen? Meiner Meinung nach reicht der 4-zeilige "powered by TYPO3"-Kommentar absolut aus, um zu zeigen, dass es eine Typo3-Website ist. Das ist unnötige Aufblähung des Quelltextes. Selbst der powerde-by Hinweis nervt etwas, denn zum einen gibt es den anscheinend nur auf englisch (ein Kommentar in der jeweilig verwendeten Sprache wäre angebrachter), und zum anderen gibt es auch bessere Wege um auf Typo3 hinzuweisen: z.B. eine entsprechende Anmerkung im Impressum.

3. Reihenfolge der Angaben im Head-Bereich
Kann man die beeinflussen? Z.B. hätte ich den <title> gerne direkt unter der "meta http-equiv="Content-Type"-Zeile.

Vielen Dank für jeden Tipp und viele Grüße aus Freiburg
Ben

toyde ·

Abstand vom linken Rand

Beispiel:

page.headerData.50 = TEXT
page.headerData.50.value (
        <!-- FLIPMENU CODE start -->
        <script src="fileadmin/scripts/prototype.lite.js" type="text/javascript"></script>
        ..
        ..
)

Ganz einfach 8 Leerschläge einfügen. Mit "page.headerData.50.value {}" kannst Du gleich mehrere Zeilen definieren.

Zu meta gibt's immer wieder Fragen im Forum. Evtl. wurden einiger der Fragen bereits abgedeckt.

Benjamecho ·

In diesem Fall (statischer Text) funktioniert das problemlos - auch mit einem Tab. Aber bei dem gewrappten Title funktioniert das so leider nicht :-(

P.S. Ich bin mir ziemlich sicher, dass die Fragen im Forum noch nicht beantwortet wurden. Ich habe die Suchfunktion und auch Google zig mal benutzt und 100te von Beiträgen gelesen :-)