Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Bestellabbruch auf checkout_payment.php durch Pop-up-Blocker

    mei chan

    • Frisch an Board
    • Beiträge: 70
    Hallo,

    ein Kunde konnte heute seine Bestellung nicht abschließen weil er keine Zahlung gewählt oder den Haken bei den AGB vergessen hatte und ein Pop-up-Blocker den Java-Hinweis blockierte.
    Da Browser mit integriertem Pop-up-Blocker immer mehr Verbreitung finden, wollte ich nur den noscript fallback für die checkout_payment.php nutzen.

    Habe mal testweise \includes\classes\payment.php:

    Code: PHP  [Auswählen]
            if (DISPLAY_CONDITIONS_ON_CHECKOUT == 'true') {
            $js .= "\n" . '  if (!document.getElementById("checkout_payment").conditions.checked) {' . "\n" .
                   '    error_message = error_message + unescape("' . xtc_js_lang(ERROR_CONDITIONS_NOT_ACCEPTED) . '");' . "\n" .
                   '    error = 1;' . "\n" .
                   '  }' . "\n\n";
            }
            $js .= "\n" . '  if (payment_value == null) {' . "\n" .
                   '    error_message = error_message + unescape("' . xtc_js_lang(JS_ERROR_NO_PAYMENT_MODULE_SELECTED) . '");' . "\n" .
                   '    error = 1;' . "\n" .
                   '  }' . "\n\n" .
                   '  if (error == 1 && submitter != 1) {' . "\n" . // GV Code Start/End
                   '    alert(error_message);' . "\n" .
                   '    return false;' . "\n" .
                   '  } else {' . "\n" .
                   '    return true;' . "\n" .
                   '  }' . "\n" .
                   '}' . "\n" .
                   '//--></script>' . "\n";
          }
     

    gändert:

    Code: PHP  [Auswählen]
            if (DISPLAY_CONDITIONS_ON_CHECKOUT == 'true') {
            $js .= "\n" . '  if (!document.getElementById("checkout_payment").conditions.checked) {' . "\n" .
                   '    error_message = error_message + unescape("' . xtc_js_lang(ERROR_CONDITIONS_NOT_ACCEPTED) . '");' . "\n" .
                   '    error = 0;' . "\n" .
                   '  }' . "\n\n";
            }
            $js .= "\n" . '  if (payment_value == null) {' . "\n" .
                   '    error_message = error_message + unescape("' . xtc_js_lang(JS_ERROR_NO_PAYMENT_MODULE_SELECTED) . '");' . "\n" .
                   '    error = 0;' . "\n" .
                   '  }' . "\n\n" .
                   '  if (error == 1 && submitter != 1) {' . "\n" . // GV Code Start/End
                   '    alert(error_message);' . "\n" .
                   '    return false;' . "\n" .
                   '  } else {' . "\n" .
                   '    return true;' . "\n" .
                   '  }' . "\n" .
                   '}' . "\n" .
                   '//--></script>' . "\n";
          }
     

    Aber das geht sicher eleganter.  ;-)
    Wie würdet Ihr das am besten machen?

    Gruß

    neroBRN

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34575.0

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Eigentlich gibt es ein PHP-Fallback und die Fehlermeldung sollte bei deaktiviertem Javascript als Meldung im HTML erscheinen.
    Die php-generierte Fehlermeldung wird (bislang noch) über einen Get-Parameter in der URL generiert.
    Wie sieht denn die URL aus auf der /checkout_payment.php wenn du Javascript deaktiviert hast und die Fehlermeldung provozierst ?

    Gruß,
    noRiddle

    mei chan

    • Frisch an Board
    • Beiträge: 70
    Die Fehlermeldung kommt nun unabhängig von Javascript immer über die URL:
    Code: PHP  [Auswählen]
    /checkout_payment.php?error_message=Achtung%3A+Fehler...<br+%2F><br+%2F>
     

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Heißt, es geht doch ?
    Oder reagiert das alles anders wenn nicht Javascript deaktiviert sondern ein Popup-Blocker installiert ist ?,
    will sagen, kommt das PHP-Fallback dann nicht ?

    Was hast du überhaupt an deinem zitierten Code geändert ?, ich sehe da nichts (ist allerdings auch unübersichtlich so).

    Gruß,
    noRiddle

    mei chan

    • Frisch an Board
    • Beiträge: 70
    Geändert habe ich:
    Code: PHP  [Auswählen]
    error = 1
     
    zu:
    Code: PHP  [Auswählen]
    error = 0
     

    Passt soweit, weil die if Abfrage nicht mehr greift.
    Habe es auf die schnelle gelöst und konnte bisher keine negativen Effekte beobachten.
    Aber die ganze Javafunktion wird noch unnötigerweise geladen, ist halt ein Schönheitsfehler  ;-)
    Dachte ich poste es aber trotzdem, vielleicht braucht es der ein oder andere auch mal.
    Trade Republic - Provisionsfrei Aktien handeln