FancyBox Fehlerverhalten - Ist das die Lösung?

  • Hallo Gemeinde,
    hallo Milbo,


    Immer wieder habe ich in meinen VM-Kunden-Projekten massiv Probleme mit der FancyBox. Sowohl die AddToCart-Funktion, also auch die Fragen zum Produkt und die Bild-Popups werden nicht korrekt angezeigt. Die Lösung auf das veraltete FaceBox zurückzugreifen scheint mir nicht zeitgemäß und vermutlich nicht von langer Dauer, da ich damit rechne, dass es in einer der nächsten Versionen von VM eh nicht mehr supported wird. Vermutlich ist aber der einzige Grund, warum FaceBox überhaupt noch Core-Bestandteil ist, weil es diverse Projekte gibt, bei denen FancyBox nicht läuft und deshalb auf FaceBox zurückgegriffen wird.


    (Ich nutze in meinen Projekten J!3.8.2 und VM 3.2.6)


    In diversen VM-Forenbeiträgen konnte ich lesen, dass es einige Anwender gibt, die sich damit rumschlagen, aber keiner eine wirkliche Lösung hat (z.B.: https://forum.virtuemart.de/al…n-restricted-access-2569/ oder https://forum.virtuemart.net/index.php?topic=131598.0). Irgendwo konnte ich lesen, dass auch Milbo das Problem noch nicht lösen konnte.


    Im FancyBox-Forum selbst konnte ich nun eine Lösung finden, die es offensichtlich macht, dass der Fehler selbst im FancyBox-Core-Script zu finden ist: https://github.com/nvidoni/fancybox/issues/2.


    Fehlerhaft sind im Script components/com_virtuemart/assets/js/fancybox/jquery.fancybox-1.3.4.js diese beiden Zeilen:

    Code
    1. content.get(0).style.removeAttribute('filter');
    2. wrap.get(0).style.removeAttribute('filter');


    'filter' ist demnach kein Attribut sondern eine CSS-Eigenschaft. Korrekt sollten diese Zeilen lauten:

    Code
    1. content.css('filter', 0);
    2. wrap.css('filter', 0);


    Natürlich nützt es nicht so viel in VM dieses Script zu modifizieren. Statt dessen müsste die Min-Version dieses Scriptes angepasst werden.
    hier müsste

    Code
    1. {j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}


    ersetzt werden durch

    Code
    1. {j.css('filter', 0);f.css('filter', 0);}


    Nachdem ich diese Änderungen vorgenommen hatte, waren sofort alle Fehlverhalten bzgl. der FancyBox behoben.


    Leider ist lt. Github selbst in der ScriptVersion jquery.fancybox-1.3.6.js dieser Fehler noch enthalten - seit 5 Jahren.


    Ich hätte jetzt folgende Bitten/Anfragen:

    • Kann jemand vom VM-CoreTeam (z.B. Milbo) meine obigen Ausführungen prüfen. Ist das eine zuverlässige Lösung, die nicht nur bei meinen Projekten funktioniert?
    • Wenn mit ja beantwortet: Gibt es eine Möglichkeit die FancyBox-Core-Scripte an der Originalquelle anzupassen (Github)?
    • ... oder wenigstens in den VM-Core in dieser korrigierten Version einzubinden, damit Updates unsere Änderungen nicht wieder zunichte machen?


    Über ein Feedback würde ich mich sehr freuen.

  • Danke für die gute Recherche. Der Fix sieht gut aus, werd das gleich mal in unsere min Version einbauen.


    Ich habe noch das gefunden

    Code
    1. j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});


    das könnte eventuell auch ein Problem sein, eventuell

    Code
    1. j.css('filter', 0);
    2. j.empty().css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});


    Aber eventuell wurde das in dem erwähnten Forumthread bei fancybox bereits diskutiert.

  • Salü
    hast du schon versucht in den Einstellungen
    Configuration --> Template von Virtuemart die Einstellung :
    Using the product Scripts zu deaktivieren?
    Dies hat bei mir den gewünschten Erfolg gebracht. Die Bilder stimmen dann sofort.
    Anscheinen beissen sich 2 Skripte.
    Gruss