Lightbox Problem (gelöst)

Veröffentlicht am 23. Mai 2009, in code, von David

This article is also available in: English

Schon seit ich WordPress 2.7 benutze habe ich ein Problem damit Lightbox 2 zum laufen zu kriegen.
Nach ewigem Recherieren, stundenlangem Herumprobieren, habe ich herausgefunden woran es liegt: am Theme. Ich benutze SimpleX.
Dieses Theme lädt eine Version von jQuery und benutzt ein Objekt mit der Variablen $.

$(function(){
var tabContainers = $(‘div#maintabdiv > div’);
tabContainers.hide().filter(‘#comments’).show();

$(‘div#maintabdiv ul#tabnav a’).click(function () {
tabContainers.hide();
tabContainers.filter(this.hash).show();
$(‘div#maintabdiv ul#tabnav a’).removeClass(‘current’);
$(this).addClass(‘current’);
return false;
}).filter(‘#comments’).click();

});

Das Problem dabei: Lightbox benutzt diese Variable ebenfalls!
Wie ist das Problem zu lösen? Variable umbenennen:

mjq(function(){
var tabContainers = mjq(‘div#maintabdiv > div’);
tabContainers.hide().filter(‘#comments’).show();

mjq(‘div#maintabdiv ul#tabnav a’).click(function () {
tabContainers.hide();
tabContainers.filter(this.hash).show();
mjq(‘div#maintabdiv ul#tabnav a’).removeClass(‘current’);
mjq(this).addClass(‘current’);
return false;
}).filter(‘#comments’).click();

});

Einfach die Datei /wp-content/themes/simplex/header.php bearbeiten und den ersten durch den von mir zweiten genannten Text ersetzen.

Dann muss noch der von SimpleX mitgelieferten jQuery mitgeteilt werden, dass sie nicht mehr nach $ sondern nach mjq suchen soll. Dazu die Datei /wp-content/themes/simplex/js/jquery-1.2.6.min.js (o.Ä.) bearbeiten und folgendes ersetzen:

var _jQuery=window.jQuery,_$=window.$;durchvar _jQuery=window.jQuery,_mjq=window.mjq;
var jQuery=window.jQuery=window.$=function(selector,context)durchvar jQuery=window.jQuery=window.mjq=function(selector,context)
window.$=_$;durchwindow.mjq=_mjq;

Danach funktionieren die Lightbox Plugins und das Theme problemlos miteinander!

Angehängte Dateien
mod_simplex_files

 

3 Responses to “Lightbox Problem (gelöst)”

  1. Christian sagt:

    hi, das Problem lässt sich viel einfacher lösen. Es muss nur der no-conflict Mode von JQuery aktiviert werden.

    jQuery.noConflict();

    $(function(){
    var tabContainers = $('div#maintabdiv > div');
    tabContainers.hide().filter('#comments').show();

    $('div#maintabdiv ul#tabnav a').click(function () {
    tabContainers.hide();
    tabContainers.filter(this.hash).show();
    $('div#maintabdiv ul#tabnav a').removeClass('current');
    $(this).addClass('current');
    return false;
    }).filter('#comments').click();

    });

    lg. Christian

  2. Christian sagt:

    Sorry, das war zu schnell … so gehts:

    jQuery.noConflict();

    jQuery(document).ready(function($){

    var tabContainers = $(‘div#maintabdiv > div’);
    tabContainers.hide().filter(‘#comments’).show();

    $(‘div#maintabdiv ul#tabnav a’).click(function () {
    tabContainers.hide();
    tabContainers.filter(this.hash).show();
    $(‘div#maintabdiv ul#tabnav a’).removeClass(‘current’);
    $(this).addClass(‘current’);
    return false;
    }).filter(‘#comments’).click();

    });

  3. [...] Volgens sommigen zijn er natuurlijke betere oplossing, die bijvoorbeeld beter geprogrammeerd zijn of veiliger zijn. WordPress heeft echter zo’n grote community achter zich dat bijna elk probleem die je tegenkomt al door iemand anders weer opgelost is. Om bijvoorbeeld de veiligheid te testen is er de WordPress Scanner. Zelf had ik een probleem dat Lightbox 2 (een plugin voor foto’s) niet werkte met mijn thema SimpleX, na een rondje google-en was er al iemand met een oplossing. [...]

Leave a Reply