+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Joomla und das JavaScript-Chaos

  1. #1
    Neu an Board
    Registriert seit
    09.09.2009
    Beiträge
    9
    Bedankte sich
    0
    1 Danksagung in 1 Beitrag

    Böse Joomla und das JavaScript-Chaos

    Hallo ...

    Ich bin Joomla Anfänger und habe mich immer davor gescheut, Joomla zu nutzen, weil es mir zu unprofessionell erschien.

    Eine Auftrag zwang mich nun dazu, mich mit Joomla auseinanderzusetzen. Am Anfang war ich positiv überrascht, da mir die Struktur des Programms doch mehr und mehr gefiel.

    Dann begann das Chaos mit Konflikten einiger Module ... immer iweder gab es Fehler und unerwünschte Effekte: mal ist es Mootools, was in Joomla selbst als alte Version drinsteckt, dann ist es jQuery welches von vielen Modulen genutzt wird .. wie zum Beispiel Superfischmenu. Aber auch mit internen Funktionen gab es dann Probleme: die Lightbox die durch das einbinden der modal.js erst möglich ist, ist (glaube ich) auch nur mit jQuery möglich. Ich habe dann die Slimbox gefunden, und diese in den CORE (behavior.php) versucht einzubinden.

    auch war es notwendig diese Datei zu bearbeiten, um Mootools auf die aktuelle Version zu bekommen. Das Problem ist wohl, dass das Backend Mootools 1.1 benötigt.:

    PHP-Code:
    if ($debug || $konkcheck) {
       
    JHTML::script('mootools-uncompressed.js''media/system/js/'false);
    } else if (
    $mainframe->getClientId()==1) {
       
    JHTML::script('mootools.js''media/system/js/'false);
    } else {
       
    JHTML::script('mootools-1.2.4-core.js''media/system/js/'false);
       
    JHTML::script('mootools-1.2.4.4-more.js''media/system/js/'false);


    Slimbox habe ich so in die behavior.php eingefügt:
    Bin mir aber sicher, dass die Parameter noch angepasst werden müssen, weil diese noch aus der Kopie von der funktion "modal" ein überbleibsel sind.
    vorher müssen natürlich noch die slimbox.js und slimbox.css in die jeweiligen Ordner des media-Ordners kopiert und angepasst werden.
    PHP-Code:
    function slimbox($selector='a.modal'$params = array())
        {
            static 
    $slimbox;
            static 
    $included;

            
    $document =& JFactory::getDocument();

            
    // Load the necessary files if they haven't yet been loaded
            
    if (!isset($included)) {

                
    // Load the javascript and css
                
    JHTML::script('slimbox.js');
                
    JHTML::stylesheet('slimbox.css');

                
    $included true;
            }

            if (!isset(
    $slimbox)) {
                
    $slimbox = array();
            }

            
    $sig md5(serialize(array($selector,$params)));
            if (isset(
    $slimbox[$sig]) && ($slimbox[$sig])) {
                return;
            }

            
    // Setup options object
            
    $opt['ajaxOptions']    = (isset($params['ajaxOptions']) && (is_array($params['ajaxOptions']))) ? $params['ajaxOptions'] : null;
            
    $opt['size']        = (isset($params['size']) && (is_array($params['size']))) ? $params['size'] : null;
            
    $opt['onOpen']        = (isset($params['onOpen'])) ? $params['onOpen'] : null;
            
    $opt['onClose']        = (isset($params['onClose'])) ? $params['onClose'] : null;
            
    $opt['onUpdate']    = (isset($params['onUpdate'])) ? $params['onUpdate'] : null;
            
    $opt['onResize']    = (isset($params['onResize'])) ? $params['onResize'] : null;
            
    $opt['onMove']        = (isset($params['onMove'])) ? $params['onMove'] : null;
            
    $opt['onShow']        = (isset($params['onShow'])) ? $params['onShow'] : null;
            
    $opt['onHide']        = (isset($params['onHide'])) ? $params['onHide'] : null;

            
    $options JHTMLBehavior::_getJSObject($opt);

            
    // Attach modal behavior to document
            
    $document->addScriptDeclaration("
        window.addEvent(\"domready\", function() {
            if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
                $$(\"a\").filter(function(el) {
                    return el.href && !el.href.indexOf(\"http://www.flickr.com/photos/\") && el.firstChild && el.firstChild.src;
                }).slimbox({
                    loop: true,
                    initialWidth: 1024,
                    initialHeight: 768,
                    overlayOpacity: 0.6,
                    overlayFadeDuration: 200,
                    resizeDuration: 1000,
                    resizeTransition: Fx.Transitions.Elastic.easeOut,
                    counterText: \"This is image <strong>{x}</strong> on a total of <strong>{y}</strong> in this fabulous Flickr image gallery\",
                    previousKeys: [37, 80, 16],
                    nextKeys: [39, 78, 17],
                }, function(el) {
                    return [el.firstChild.src.replace(/_[mts]\.(\w+)$/, \".$1\"),
                        (el.title || el.firstChild.alt) + '<br />Visit the <a href=\"' + el.href + '\">Flickr page</a> for this picture.'];
                });
            }
            try {
                _gat._getTracker(\"UA-760577-1\")._trackPageview();
            } catch(e) {}
        });"
    );


            
    // Set static array
            
    $slimbox[$sig] = true;
            return;
        } 
    in der componente musste ich dann die componentendatei anpassen, da ich es nicht geschafft habe die componente von "com_seminar" in meinem Template zu überschreiben.

    nun kann man mit dem PHP-Befehl
    PHP-Code:
    JHTML::_('behavior.slimbox'); 
    das einbinden der slimbox.js und slimbox.css in den header auslösen ... analog habe ich dies dann entfernt:
    PHP-Code:
    JHTML::_('behavior.modal'); 
    ****************************************
    Wirklich zufrieden bin ich mit Joomla nicht, da es keine Lösung für die vielen Konflikte anbietet. Man muss erst selbst herrausfinden was JavaScript ist ... was Bibliotheken (Mootools, jQuery, Prototype) sind und welche Probleme es in diesen Blibliotheken gibt ...
    Ich würde mich freuen, wenn Joomla die einzelnen Bibliotheken selbst erkennt, vielleicht kapselt und selbst die Konflikte vermeidet oder wenigstens verständlich bekanntgibt.

    Gruß,
    Grille.
    Geändert von MB-Grille (20.04.2010 um 10:27 Uhr)

  2. #2
    Gehört zum Inventar Avatar von j!-n
    Registriert seit
    26.07.2007
    Ort
    EA / HH / B
    Beiträge
    5.846
    Bedankte sich
    258
    Erhielt 1.229 Danksagungen
    in 1.155 Beiträgen

    Standard

    Das Problem an sich ist, daß viele Variablen in verschiedenen Scripts doppelt vorkommen, und es dadurch zu Konflikten kommt. Der Client meckert, wenn gleichnamige Variablen oder Funktionen mehrfach initialisiert werden, und kommt dadurch ins Straucheln. Der Client benötigt eindeutige Bezeichner. Eine echte Abhilfe wird es wohl nicht geben, der wenn soll das kontrollieren? Ein übergeordnete "Instanz" wäre vielleicht etwas, um einen Standard zu etablieren, aber bis dahin bleibt wohl nur, so wenig wie möglich Scriptgedöns zu verwenden, oder notfalls manuell in den Scriptcode einzugreifen.
    Joomla kaputt? Gehackt? Migration mißlungen? Datensalat?
    www.joomla-notdienst.de - Soforthilfe & Webentwicklung
    Einsteiger- FAQ - bitte lesen!

  3. #3
    Neu an Board
    Registriert seit
    09.09.2009
    Beiträge
    9
    Bedankte sich
    0
    1 Danksagung in 1 Beitrag

    Standard

    @j!-n
    Danke für Deine Antwort ... ich denke man dass Du auch schon so einige schlechte Erfahrungen mit diesen Problemen hattest.
    in jQuery hat man sich ja schon Gedanken darüber gemacht und die "noConflict"-Funktion für das "$"-Zeichen eingeführt.

    Ich bin gerade am überlegen, ob man nicht eine Automatische Erkennung von solchen mehrfach initialisierungen ermöglichen könnte, um wenigstens eine Ausgabe zu haben welche besagt:
    "funktion-x" in Datei "bla" wird durch "funktion-x" in Datei "blub" überschrieben ... gültig ist nun "funktion-x" aus Datei "blub".

    Das könnte ja schon mal helfen den Fehlern das Handwerk zu legen.


    ******************
    Ist es eigentlich auch möglich die CORE-Dateinen von Joomla im eigenen Template zu überschreiben, anstatt direkt in den Dateien herrumzuändern?

    Gruß,
    Grille.
    Geändert von MB-Grille (20.04.2010 um 12:55 Uhr)

  4. #4
    Gehört zum Inventar Avatar von j!-n
    Registriert seit
    26.07.2007
    Ort
    EA / HH / B
    Beiträge
    5.846
    Bedankte sich
    258
    Erhielt 1.229 Danksagungen
    in 1.155 Beiträgen
    Joomla kaputt? Gehackt? Migration mißlungen? Datensalat?
    www.joomla-notdienst.de - Soforthilfe & Webentwicklung
    Einsteiger- FAQ - bitte lesen!

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein