Update 3.5.5 - Problem Artikel in Wk. legen (IE6)

Hallo, hab ein Testsystem auf 3.5.5 upgedatet. Wenn ich einen Artikel in den Warenkorb legen will, wird der Artikel zwar in den Warenkorb gelegt, aber es erscheint kein Dialog ‘Artikel in WK gelegt’ und die Artikeldetail-Seite wird auch nicht aktualisiert. Das Problem besteht nur im IE6 (6.0.2600). Mit der 3.5.4 klappt es auch im IE6. Hat jemand ein ähnliches Problem? PS.: In der 3.5.5 erhalte ich auch eine Fehlermeldung vom IE6: Zeile: 83, Zeichen: 18, Fehler: Failed, Code 0. Das war mit 3.5.4 nicht. Hab versucht die Stelle (Zeile, Zeichen) zu finden. Kein Erfolg. Evtl. hat jemand eine Idee.

Weitere Infos: Wenn ich im IE6 die temp. Internetdateien lösche und dann auf die Artikeldetail-Seite gehe, erhalte ich keinen Fehler und der Dialog ‚Artikel in WK‘ erscheint, wenn ich den Artikel in den Warenkorb lege. Gehe ich dann erneut auf die Artikeldetail-Seite, bringt der IE einen Fehler und das Problem (siehe erster Beitrag) ist wieder da. Lösche ich die temp. Internetdateien, klappts wieder.

http://code.google.com/p/ie6-upgrade-warning/

Sorry, scheint doch nicht nur mit dem IE6 zusammenzuhängen, sondern allgemein mit IE und JQuery. Muss ich morgen mal debuggen. Hab ich anscheinend beim Test mit neueren IE-Versionen übersehen. Der Fehler tritt auch bei anderen IE-Versionen auf, nur beim IE6 ist es mir aufgefallen, weil in dem Zusammenhang das Fenster ‘Artikel in Warenkorb’ nicht erscheint.

Hi, kannst Du einmal eime kurze Aufstelllung stichpunktartig von allen Plugins machen, die Du installiert hast zusaetzlich? Muesstest Du ja auch in Deiner Downloaduebersicht in Deinem Account baben. Alternaiv teile mal Deine Shopware-ID hier mit. Wenn Dir dann zusaetzlich noch jemand Plugins gebaut hat, die man nicht in der Downloaduebersicht findet, bitte auch angeben. Ich vermute da einen Zusammenhang mit einem Plugin evtl. Wie lautet Deine Shop Domain? Stefan

Hallo Stefan, erst mal Danke für deine schnelle Antwort. Ich habe keine Plugins anderer Anbieter (Community, etc.) auf dem Testsystem. Meine eigenen habe ich alle deaktiviert. Daran scheint es nicht zu liegen. Es ist eine Kopie eines 3.5.4-er Shops + Update auf 3.5.5. Die Probleme treten nur nach dem Update auf. Der erste Fehler, den ich unter IE erhalte, hängt mit dem JQuery text selector ‚:text‘ zusammen. Hier soll ein Bug im Zusammenhang mit dem IE in JQuery 1.4.2 sein, der in höheren Versionen ausgebessert wurde. Den text selector verwendet ihr in der 3.5.5 häufiger - evtl. liegts daran? Wenn ich den Fehler abfange (siehe unten), kommt ein weiterer an anderer Stelle. Ich werde noch mal weiter suchen. filters: ... Ca. zeile 3135 // original text: function(elem){ return "text" === elem.type; }, // neu text: function(elem){ try { return "text" === elem.type; } catch(e) { } }, Jeder, der mal nachschauen will und meint er hätte evtl. eine Lösung, kriegt von mir die Url zum Testsystem. Einfach eine kurze IM schreiben. Evtl. gibts ja doch eine einfache Lösung, mit Plugin deaktivieren oder ich hab einfach was übersehen - wäre mir momentan am liebsten. :wink: Danke vorab.

So, heute Abend noch mal dran gesetzt. Die ‘AJAX Validation for Shopware’ in der ‘jquery.shopware.js’ scheint ja in der 3.5.5 neu zu sein. Wenn ich folgende Zeilen auskommentiere, funktioniert alles wieder. jquery.shopware.js, ca. Zeile: 300 // $('.account .password :input').accountValidation(); // $('.account .email :text').accountValidation(); Kann ich die Ajax-Validierung einfach weglassen? Danke vorab.

Für mich ist das Abschalten der Ajax-Validierung erst mal die Lösung. Werde demnächst noch mal nachschauen, warum die Fehler genau auftreten. Falls jemand den Kontobereich geändert hat und in der 3.5.5 Javascript-Fehler im IE erhält, weiß er schon mal woran es ungefähr liegt. :wink:

Hallo zusammen, ich habe mir das Problem einmal näher angeschaut und das Problem betrifft nur den Internet Explorer 6. Meinen Nachforschungen zufolge gibt es im IE 6 ein Problem, wenn man probiert die Selektoren „:text“, „:password“, „:input“ und „:submit“ in Kombination mit der „find()“-Methode auf ein in einer Variable gespeicherten jQuery Objekt anzuwenden. Ich habe mit diesen Wissen im Hinterkopf das jQuery Plugin ".fn.accountValidation" nochmal komplett überarbeitet. Als kleiner Bonus habe ich die Dokumentation etwas erweitert. ;) Um diese Lösung einzuspielen müssen die Zeilen [b]290[/b] bis [b]478[/b] mit folgenden Code überschrieben. [code] /\*\* \* AJAX Validation \* for Shopware \* \* Shopware AG (c) 2011 \*/ (function() { /** Plugin starter */ (document).ready(function() { (’.account .password :input’).accountValidation(); ('.account .email input').accountValidation(); }); /\*\* \* Shopware UI - Account validation \* \* This jQuery plugin checks the given \* mail address and the given password \* against our criterions. Additionally we're \* checking the mail address against the server side \* to avoid account hijacking \* \* Example usage: \* (’[selector]’).accountValidation([settings]); * * @param {obj} settings - user settings * @return {obj} jQuery object based on the given selector */ .fn.accountValidation = function(settings) { /\*\* Extend the default configuration with the provided user settings \*/ if(settings) .extend($.accountValidation.config, settings); /** Return this for jQuery’s chaining support */ return this.each(function() { var me = (this); /** Disable the submit button */ if(!.browser.msie && parseInt(.browser.version) != 6) { $me.parents(‚form‘).find(‚input[type=submit]‘).attr(‚disabled‘, ‚disabled‘).css(‚opacity‘, 0.5); } /** Event listener which checks on every keystroke the password and it’s iteration */ $me.bind(‚keyup‘, function() { if($me.attr(‚id‘) == ‚newpwdrepeat‘ && me.val().length == (’#newpwd’).val().length) { $me.triggerHandler(‚blur‘); } if($me.attr(‚id‘) == ‚newmailrepeat‘ && me.val().length == (’#newmail’).val().length) { $me.triggerHandler(‚blur‘); } }); /** Event listener which checks the given mail addresses or the given password against the server side */ $me.bind(‚blur‘, function() { var error = false; if(!$me.val().length) { error = true; } if(($me.attr(‚id‘) == ‚newpwd‘ || me.attr('id') == 'newpwdrepeat') && !error) { .accountValidation.checkPasswd($me); } if(($me.attr(‚id‘) == ‚neweailrepeat‘ || me.attr('id') == 'newmail') && !error) { .accountValidation.checkEmail(me); } }); }); }; .accountValidation = { /** Default configuration */ config: { errorCls: ‚instyle_error‘, successCls: ‚instyle_success‘ }, /** * Simple method which sets the configured error class to the given element * * @param {obj} $el - jQuery object of the element which will become invalid * @return {obj} $el - jQuery object of the passed element */ setError: function($el) { el.removeClass(.accountValidation.config.successCls).addClass($.accountValidation.config.errorCls); return $el; }, /** * Simple method which sets the configured success class to the given element * * @param {obj} $el - jQuery object of the element which will become valid * @return {obj} $el - jQuery object of the passed element */ setSuccess: function($el) { el.removeClass(.accountValidation.config.errorCls).addClass($.accountValidation.config.successCls); return $el; }, /** * Validates the password * * @param {obj} object of the repeat field * @return void */ checkPasswd: function($repeat) { var $form = $repeat.parents(‚form‘); var str = ‚‘; $form.find(‚input[type=password]‘).each(function(i, el) { var el = (el), name = $el.attr(‚name‘); if(str.length) { str += ‚&‘; } str += ‚register[personal][‘ + name + ‚]=‘+el.val(); }); str = encodeURI(str); .accountValidation.ajaxValidation(‚ajax_validate_password‘, str, $form); }, /** * Validates the email address * * @param {obj} object of the repeat field * @return void */ checkEmail: function($repeat) { var $form = $repeat.parents(‚form‘); var str = ‚‘; $form.find(‚input[type=text]‘).each(function(i, el) { var el = (el), name = $el.attr(‚name‘); if(str.length) { str += ‚&‘; } str += ‚register[personal][‘ + name + ‚]=‘+el.val(); }); str = encodeURI(str); .accountValidation.ajaxValidation(‚ajax_validate_email‘, str, $form); }, /** * Validates the given elements against the server side * and determines on the base of the request response * if the given elements are valid or invalid. * * @param {str} action - the action which will be called server side * @param {str} data - the data string which will be send to the server * @param {obj} $form - jQuery object of the form * @return void */ ajaxValidation: function(action, data, form) { .ajax({ ‚data‘: ‚action=‘ + action + ‚&‘ + data, ‚type‘: ‚post‘, ‚dataType‘: ‚json‘, ‚url‘: .controller.ajax\_validate, 'success': function(result) { .each(result.error_flags, function(key, val) { if(val) { .accountValidation.setError((‚input[name=‘ + key + ‚]‘)); } else { .accountValidation.setSuccess((‚input[name=‘ + key + ‚]‘)); } }); if(!result.success) { if(!.isEmptyObject(result.error\_flags)) { (document.body).find(’#ajax-validate-error’).remove(); // Get first element in form var first = form.find('input:first'); // Output error message var err = (’

‚, { ‚class‘: ‚error‘, ‚id‘: ‚ajax-validate-error‘, ‚html‘: result.error_messages[0], ‚css‘: { ‚display‘: ‚none‘, ‚position‘: ‚absolute‘, ‚top‘: first.offset().top, ‚left‘: first.offset().left + first.outerWidth() + 30, ‚width‘: 200, ‚zIndex‘: 100 } }).prependTo((document.body)).fadeIn('fast'); window.setTimeout(function() { err.remove(); }, 4000); // Check for IE6 to prevent a displaying issue if(!.browser.msie && parseInt($.browser.version) != 6) { $form.find(‘:submit’).attr(‚disabled‘, ‚disabled‘).css(‚opacity‘, 0.5); } } } else { form.find('input[type=password], input[type=text]').each(function(i, el) { (document.body).find(’#ajax-validate-error’).remove(); // Check for IE6 to prevent a displaying issue if(!.browser.msie && parseInt(.browser.version) != 6) { $form.find(‚input[type=submit]‘).removeAttr(‚disabled‘).css(‚opacity‘, 1); } }); } } }); } }; })(jQuery); [/code] Das Problem wurde in unseren interen Bug-Tracker aufgenommen und wird mit dem nächsten Update behoben. Über Rückmeldungen ob dieser Code euer Problem behoben hat würde ich mich freuen. Viele Grüße, Stephan Pohl :shopware:

2 Likes

Super, ging ja schnell!! :thumbup: Werd ich heute Abend gleich mal testen.

Hallo Stephan, eben getestet: - IE6, Win 2000 - IE7, IE-Tester - IE8, Win XP Keine Javascript-Fehler mehr und die Ajax-Validierung klappt auch! Spitze und Danke! :thumbup:

Hallo Stefan, ich habe 'etwas# später upgedatet und habe natürlich den gleichen Fehler. In welcher php Datei ist die Funktion denn beschrieben, wo finde ich sie, damit ich den Code überschreiben kann? Danke Uwe

Ich nochmal. Vielleicht hilft es zu wissen, dass ich das Update erst 11/2011 gemacht habe. Danke Uwe

Hallo Stefan, Deine Lösung hat auch bei mir funktioniert. Das Problem trat bei einem IE 8 unter Windows 7 64 bit auf, also nicht unter IE 6. Nach dem Einspielen Deiner Lösung können nun auch wieder IE8-Nutzer in unserem Shop einkaufen (o; Dank Dir! Gruß Kai

Moin zusammen, ich wollte das Problem auch bei uns gerdae fixen - aber nach dem Betrachten der ‘jquery.shopware.js’ kann ich besagt Stelle ab Zeilennummer 290 nicht finden - da ist bei uns alles für den Ajax-Slider zu finden. Bin ich in der richtigen Datei?! :happy: Grüße, Eric.

Hallo Eric, welche Version von Shopware hast du aktuell im Einsatz? Viele Grüße, Stephan Pohl :shopware: [quote=“kaffeeteam”]Moin zusammen, ich wollte das Problem auch bei uns gerdae fixen - aber nach dem Betrachten der ‘jquery.shopware.js’ kann ich besagt Stelle ab Zeilennummer 290 nicht finden - da ist bei uns alles für den Ajax-Slider zu finden. Bin ich in der richtigen Datei?! :happy: Grüße, Eric.[/quote]

Moin, installiert ist die 3.5.5 (Update von 3.5.3 -> 3.5.4) Rev. 5922. Hilft das? :wink:

Hallo Eric, das Problem, dass keine Artikel in den Warenkorb gelegt werden können betrifft nur die Shopware Version 3.5.5. Bei dir wird das Problem von Shopware Mobile ausgelöst. Der Internet Explorer unterstützt erst ab Version 9 die Standard-Funktion “addEventListener”. Um das Problem zu lösen musst du folgendes machen: Wechsele in den Ordner /engine/Shopware/Plugins/Community/Frontend/SwagMobileTemplate/Views/frontend/plugin/index.tpl. Hier findest du in der Zeile 27 folgendes Skript: addEventListener("load", function() { setTimeout(function() { window.scrollTo(0, 1) }, 0) }, false); Ersetze dieses Skript bitte mit folgenden Snippet: (function() { function hideScrollbar() { window.setTimeout(function() { window.scrollTo(0, 1); }, 0); } if(document.addEventListener) { document.addEventListener("load", hideScrollbar, false); } else if(document.attachEvent) { document.attachEvent("load", hideScrollbar); } })(); Falls du Probleme hast die Datei zu editieren, dann deinstalliere bitte das Plugin und lade es manuell per FTP hoch. So solltest du die richtigen Rechte haben um die Datei zu editieren. Viele Grüße, Stephan Pohl :shopware:

1 Like

[quote=“Stephan Pohl”]… Wechsele in den Ordner /engine/Shopware/Plugins/Community/Frontend/SwagMobileTemplate/Views/frontend/plugin/index.tpl. …[/quote] Hallo, das hat gekplappt, allerdings habe ich die index.tpl in ‘/engine/Shopware/Plugins/Community/Frontend/SwagMobileTemplate/Views/frontend/plugins/swag_mobiletemplate’ gefunden. War das trotzdem die richtige? :stuck_out_tongue: Ich teste nun mal weiter - geändert ist es nun jedenfalls. Grüße, Eric.

@Shopware: Wäre es nicht evtl. an der Zeit, ein Zwischenrelease 3.5.6 bzw. 3.5.5.1 herauszubringen, das wirklich nur Bugfixes und wirklich mal keine neuen Features enthält wie bei 3.5.4 und 3.5.5? Es gibt ja offensichtlich mittlerweile so einige Fehler u.a. in Verbindung mit JavaScript und jeweils den Korrekturcode hier zu posten ist sehr nett, aber ich mag eigentlich nicht nach einem Minor-Update das komplette Forum nach diversen Fehlern durchforsten und sie dann entsprechend einzeln manuell fixen. Das muss in die Hose gehen. Bis zur 4.0 fließt wahrscheinlich noch viel Wasser durch den Rhein und dann kämpfen wir mit den neuen Fehlern durch neue Features.