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: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul

    web0null

    • Experte
    • Beiträge: 1.998
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #15 am: 21. August 2013, 04:28:48
    Ich antworte mal schnell und teste deinen dann nochmal :-D, bei mir ging es nicht bei z. B. so einer Eingabe:

    DE:,00:9.00

    Da wurde bei DE das Modul angezeigt ohne Preis.

    Zitat
    Was hat denn if ($cod_cost == '') return; innerhalb der ersten Schleife zu suchen
    Dass eben bei DE oder 00 (ohne Wert) das Modul nicht angezeigt wird, damit kann man alle Möglichkeiten abdecken, denke ich :crazy:

    Z.B. auch die:
    DE:,AT:0.00,CH:5.00,00:9.00

    Bei DE nicht anzeigen, bei AT 0€, bei CH 5€ ...und bei allen anderen 9€

    Aber ich probiere das jetzt nochmal aus mit deinem Code :-D
    rechtstexte für onlineshop

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #16 am: 21. August 2013, 04:31:44
    Irgendiwe ist das ganz schön kompliziert, bilcke mom. nicht mehr durch, zu spät,
    muß heia gehen, morgen Billard-Turnier spielen.

    Das hier gibt's übrigens ohnehin nicht:
    DE:,AT:5.00,00:9.00
    Was soll denn DE:, sein ?, das ist kein zulässige Eintrag.

    *EDIT*
    Nur damit kein Mißverständnis entsteht.
    Der zur Rede stehende Code if ($code_zones == 0) ist für den Fall, daß gar nichts eingetragen wurde weil man für die Versandart keine Nachnahme anbieten möchte.

    *EDIT2*
    Und das
    Zitat von: web0null
    "Dann kann man für jedes beliebige Land pro Versandart ...., bzw. hat auch die Möglichkeit das Modul anzuzeigen mit 0.00€."
    geht ja sowieso, nämlich so: DE:0

    Gute Nacht vorerst.
    noRiddle

    web0null

    • Experte
    • Beiträge: 1.998
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #17 am: 21. August 2013, 04:59:38
    Zitat
    Was soll denn DE:, sein ?, das ist kein zulässige Eintrag.
    durch diese abfrage if ($cod_cost == '') return; wird er zulässig  :-D
    Damit kann ich eben wenn ich DE:(ohne Wert) eingebe, den Abbruch und somit das NICHT anzeigen des Nachnahme-Modul hervorrufen.

    Zitat
    geht ja sowieso, nämlich so: DE:0
    Ja klar, da wird das Modul angezeigt, aber eben ohne Gebühr.

    Aber wenn ich das Modul bei DE NICHT anzeigen will, habe ich eben die Möglichkeit mit:
    DE:(ohne Wert) und
    Code: PHP  [Auswählen]
    if ($cod_cost == '') return;
    es zu machen.

    Ich habe das natürlich probiert, und teste es nochmal.

    Aber jetzt muss ich auch mal schlafen gehen, Gute Nacht.
    Gruß

    Nachtrag:
    Zitat
    Der zur Rede stehende Code if ($code_zones == 0) ist für den Fall, daß gar nichts eingetragen wurde weil man für die Versandart keine Nachnahme anbieten möchte.

    Ich glaube ich hab dich falsch verstanden.

    Hattest du vorgesehen bei einem bestimmten Land das Modul gar nicht anzeigen zu lassen, also z. B. nur bei DE?

    Das habe ICH nämlich gemeint.

    wenn man eingibt:
    DE:,AT:0.00,CH:5.00,00:9.00

    Wird bei,
    DE das Modul Nachnahme gar nicht anzeigt,
    bei AT 0.00€,
    bei CH 5.00€
    ...und bei allen anderen 9.00€

    wenn man nur:
    00:
    eingibt, wird für die Versandart keine Nachnahme angeboten.

    wenn input Feld leer bleibt:
    wird für die Versandart und alle Länder Nachnahme angeboten aber ohne Gebühr.

    Dafür wäre mein Code gedacht.

    web0null

    • Experte
    • Beiträge: 1.998
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #18 am: 21. August 2013, 06:21:50
    So bin noch immer wach.
    Also ich habe alles nochmal durchgespielt.
    Ich hatte dich wirklich falsch verstanden, ich dachte du wolltest einzelne Länder ausschließen.

    Dann ist dein Code auch richtig so wie er ist, ich wollte ihn auch nicht kritisieren.

    Mein Überlegung war eben nur dass bei bestimmten Ländern das Modul gar nicht angezeigt wird, und für den Rest alles beim alten bleibt.

    Jedenfalls noch mal ein Danke für die Erweiterung.
    Gruß web0null

    web28

    • modified Team
    • Beiträge: 9.404
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #19 am: 21. August 2013, 10:48:41
    Hey web28.
    Der max-Wert wird im Backend als integer oder float eingegeben, ohne Währung (wie ja eigtl. immer).
    Der Vergleich geschieht mit round($order['subtotal']), also vor der Preisformatierung.
    Mir scheint, alles im grünen Bereich ;-).
    Lasse mich aber gerne eines besseren belehren.

    Gruß,
    noRiddle

    Ich Rede nicht von der Preisformatierung sondern von der Währung  ;-)
    round($order['subtotal']) kann aber z.b. Dollar oder Pfund oder Zloty sein
    Dsas muss vor dem Vergleich "währungskorrigiert" werden, schau Dir mal das Modul freeamount an.

    Gruss Web28

    JZ_Aqua

    • Gast
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #20 am: 21. August 2013, 15:42:59
    Hallo
    Danke noRiddle für die Erweiterung.
    Ich habe mir sonst immer mit dem ändern im Code nach Anleitung helfen müssen um den Warenwert zu begrenzen. Das brauche ich jetzt nicht mehr und mit der zusätzlichen Info im Checkout die glaube ich auch von Dir ist funktioniert das perfekt.
     :thx:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #21 am: 21. August 2013, 16:30:02
    @web28
    Ah, verstehe, das hatte ich ja gar nicht bedacht und dich erst nicht verstanden, danke für den Hinweis.
    Da habe ich mit meiner Erweiterung ja mal schön in's Klo gegriffen  :oops:, zumindest fast...

    Da ich mich jetzt erstmal um unsere großen Billard-Turniere kümmern muß, schaue ich mir das später nochmal an.

    Vielleicht hast du noch einen Tipp ?
    Also brauche ich ja lediglich die Funktion xtcRemoveCurr() zu benutzen, right ?
    Oder sollte ich auf $_SESSION['cart']->show_total() zugreifen anstatt auf $order['subtotal'] ?,
    und natürlich die Funktion xtcRemoveCurr() nutzen (wie schön, daß es die schon gibt ;-))

    Jendenfalls vielen Dank für den Tipp.

    @web0null
    Es ist doch ganz einfach so:
    Das hier
    Code: PHP  [Auswählen]
    if (count($cod_zones) == 0) return;
    bewirkt, daß eine Versandart die gar nicht in ot_cod_fee berücksichtigt ist ausgeschlossen wird.
    Damit kann ich aber nicht eine Versandart auschließen die in ot_cod_fee vorhanden ist jedoch einen lerren string in der Gebühreneingabe hat, da count($cod_zones) hier 1 ergeben würde, ein array mit einem index 0 und einem einzigen leeren Value.
    Auch kann ich nicht an dieser Code-Stelle bereits auf empty($code_zones) prüfen um eine Versandart mit leerer Eingabe auszuschließen, da $cod_zones eben wie oben gesagt nicht empty ist.

    Das hier an der richtigen Stelle, nämlich innerhalb der for-Schleife
    Code: PHP  [Auswählen]
    if ($cod_zones[$i] == 0) return;
    bewirkt folgendes:
    • Das array $code_zones hat ja bei einem leeren string in der Backend-Eingabe bei der Versandart diesen einen Wert:
      array (0 =>  )
      und beim Durchlaufen der for-Schleife findet es mit [$i] = 0 auch nur einen Value, nämlich einen leeren.
    • sobald eine korrekte Syntax im Backend eingegeben wurde, findet die Schleife jedoch Werte.
      Dabei ist egal was du einträgst.
      DE:0
      DE:5.04,00:7.52
      oder was immer.
      Aber eben korrekte Syntax vorausgesetzt,
      also nix sowas
      DE:,

    Gruß,
    noRiddle

    *EDIT*
    if (empty($cod_zones[$i])) geht entgegen meiner Vermutung in einem vorherigen Post jedoch aus hier o.g. Gründen nicht.

    *EDIT2*
    @JZ_Aqua
    Du solltest dann noch das hier in /includes/modules/payment/cod.php
    Code: PHP  [Auswählen]
    if($this->limit_subtotal && round($order->info['subtotal']) >= $this->limit_subtotal) return;

    austauschen gegen das hier
    Code: PHP  [Auswählen]
    if($this->limit_subtotal && ($xtPrice->xtcRemoveCurr($_SESSION['cart']->show_total()) >= $this->limit_subtotal)) return;  // added $_SESSION['cart']->show_total() comparison to be able to limit sum where cod allowed

    Neue Anleitung folgt später.

    web0null

    • Experte
    • Beiträge: 1.998
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #22 am: 21. August 2013, 17:16:42
    Ich weiß was du meinst und dein Code ist auch richtig so.

    Zitat
    Das array $code_zones hat ja bei einem leeren string in der Backend-Eingabe bei der Versandart diesen einen Wert:
    array (0 =>  )

    Aber hiermit irrst du dich, ich will dich aber nicht Nerven :-D.

    Lass dir das mal anzeigen:
    Code: PHP  [Auswählen]
    // 1. Test
    $string = 'DE:10.50,AT:5.50,CH:7.50,00:9.99';
    $cod_zones = preg_split("/[:,]/", $string);
    echo '<pre>'.print_r($cod_zones, TRUE).'</pre>';
    // 2. Test
    $string = 'DE:10.50';
    $cod_zones = preg_split("/[:,]/", $string);
    echo '<pre>'.print_r($cod_zones, TRUE).'</pre>';
    // 3. Test
    $string = 'DE:';
    $cod_zones = preg_split("/[:,]/", $string);
    echo '<pre>'.print_r($cod_zones, TRUE).'</pre>';

    Und jetzt sag mir bitte wie viele du siehst beim 3. Test:
    ich sehe folgendes, also 2 stk.
    Code: PHP  [Auswählen]
    Array
    (
        [0] => DE
        [1] =>
    )

    ... und $cod_cost
    Code: PHP  [Auswählen]
    $cod_cost = $cod_zones[$i + 1];
    if ($cod_cost == '') return;

    ist ja der 2. Wert, und der ist leer, also Abbruch, und das Modul wird nicht angezeigt.

    Nur wenn du den Doppelpunkt nicht mit eingibst, bekommst du nur eines, aber ich hatte es ja nie ohne Doppelpunkt geschrieben.

    Probiere das einfach mal aus:
    Code: PHP  [Auswählen]
            for ($i = 0; $i < count($cod_zones); $i++) {
              if ($cod_zones[$i] == $order->delivery['country']['iso_code_2'] || $cod_zones[$i] == '00') {
                $cod_cost = $cod_zones[$i + 1];
                if ($cod_cost == '') return;
                $cod_country = true;
                break;
              }
              $i++;
            }

    Dann wird bei 'DE:' das Modul NICHT angezeigt, und alles andere bleibt beim alten, und wenn man es komplett deaktivieren will gibt man nur '00:' ein.
    Bei mir geht das einwandfrei.

    Gruß web0null, und wehe du bekommst was anderes raus :lol1:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #23 am: 22. August 2013, 05:11:46
    Sag mal, liest du eigtl. was ich schreibe ?
    Zitat
    ...bei einem leeren string in der Backend-Eingabe...
    Du zitierst es ja sogar noch.
    Das heißt nichts eingeben, nicht DE: eingeben.

    Verstehe gar nicht warum du eine eigene Syntax aufmachen willst.
    Das gibt's nicht:
    DE:
    und das DE:, auch nicht.

    Man kann doch die Argumentation nicht auf willkürlicher Syntax aufbauen.
    Sonst könnte ich ja auch fragen was eigtl. passiert wenn ich drei X eingebe... ;-).

    Ich sage es nochmals:
    Um Nachnahme bei einer bestimmten vom Kunden gewählten Versandart nicht anzeigen zu lassen, läßt man das input-Feld leer.
    Das ist nicht nur die einfachste und nicht-syntax-brechende sondern auch die logischste Variante.

    Gruß,
    noRiddle

    *EDIT*
    Dein Test müsste also so aussehen:
    Code: PHP  [Auswählen]
    $string = '';
    $cod_zones = preg_split("/[:,]/", $string);
    echo '<pre>';
    print_r($cod_zones);
    echo '</pre>';

    (und echo print_r() gibt's auch nicht ;-).)

    jannemann

    • modified Team
    • Beiträge: 6.275
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #24 am: 22. August 2013, 07:07:50
    Hallo noRiddle,

    herzlichen Dank für das Bereitstellen deiner Erweiterung  :!:

    Schöne Grüße,
    Jan

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #25 am: 22. August 2013, 10:15:21
    Zitat
    echo print_r() gibt's auch nicht

    Einspruch euer Ehren, diese Variante
    Code: PHP  [Auswählen]
    echo '<pre>' . print_r($foo, TRUE) . '</pre>';
    funktioniert einwandfrei. Benutze ich auch seit langem zum Debuggen.

    Gruß
    Ronny

    JZ_Aqua

    • Gast
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #26 am: 22. August 2013, 11:06:07
    Hallo
    Zitat
    @JZ_Aqua
    Du solltest dann noch das hier in /includes/modules/payment/cod.php

    Danke, ist geändert.

    web0null

    • Experte
    • Beiträge: 1.998
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #27 am: 22. August 2013, 13:35:24
    Zitat
    Sag mal, liest du eigtl. was ich schreibe
    Ja  ich schon ;-) in bezug auf:
    Zitat
    (und echo print_r() gibt's auch nicht ;-).)

    Zitat
    Verstehe gar nicht warum du eine eigene Syntax aufmachen willst. Das gibt's nicht:
    Was heißt "Das gibt's nicht" ,ja bis jetzt gab es das nicht, aber wenn ich eben genau eine bestimmte Situation hervorrufen will die mit einem leeren Wert zu realisieren ist, dann mache ich es eben so dass es diese neue Syntax gibt. Wo ist da ein Problem?

    Man könnte auch schreiben 'DE:false'. damit man für DE das Modul abschaltet.

    Zitat
    Man kann doch die Argumentation nicht auf willkürlicher Syntax aufbauen.
    Sonst könnte ich ja auch fragen was eigtl. passiert wenn ich drei X eingebe
    Ja und?
    Was ist daran willkürlich, könnte man zb statt '00' machen.
    '00' ist im Prinzip genauso willkürlich, denn genauso nichtssagend.

    Und mir ging es genau um..., nur "ein" bestimmtes Land zu Deaktivieren, um nichts mehr.

    Am Anfang dachte ich nur dass du das selbe machen wolltest, deshalb war mein Einwand in Beitrag Nr. 13, habe ich ja später klargestellt mit "Ich hatte dich wirklich falsch verstanden" in Beitrag Nr. 18.

    Ich sage ja nicht das deine Variante nicht geht, nur kannst du mit deiner Variante nur das Modul komplett deaktivieren, durch keine Eingabe, mit dem von mir kann man auch einzelne Länder ausschließen (deaktivieren). was ist daran bitte falsch?

    Ich verstehe dein Problem nicht, ich habe nur versucht eine Möglichkeit mehr anzubieten.

    Aber gut, den Code dafür habe ich ja schon gepostet, mit Beispielen, kann sich ja jeder nachträglich einbauen, getestet habe ich ihn und funktionieren tut er auch.

    Hier nochmal die Beispiele:
        'DE:4.00' Modul wird bei DE und dieser Versandart angezeigt mit 4,00€
        'DE:0.00' Modul wird bei DE und dieser Versandart angezeigt mit 0,00€
        'DE:'       Modul wird bei DE und dieser Versandart nicht angezeigt
        '00:'       Modul wird bei dieser Versandart komplett Deaktiviert.

    Gruß

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #28 am: 22. August 2013, 17:39:16
     :doh:

    Lieber, lieber web0null.
    Jetzt habe ich endlich verstanden.
    Mann, man sollte nicht zwischen allen möglichen anderen Dingen versuchen ein Problemchen zu lösen.
    Du hast also Recht, daß meine Erweiterung in der Tat nicht berücksichtigt ein bestimmtes Land auszuschließen.

    Dann würde ich doch vorschlagen in meinem Code weiter oben, hier
    Code: PHP  [Auswählen]
    if (count($cod_zones) == 0) return;

    das daraus zu machen
    Code: PHP  [Auswählen]
    if (count($cod_zones) == 0 || !in_array(($order->delivery['country']['iso_code_2']), $cod_zones)) return;

    und weiter unten
    Code: PHP  [Auswählen]
    else if ($cod_zones[$i] == 0)

    machen wir das daraus (wegen der besseren Verständlichkeit)
    Code: PHP  [Auswählen]
    else if ($cod_zones[$i] == '')

    Dann ist der von dir berechtigterweise monierte Fall auch abgedeckt, ohne eine neue Syntax.
    *EDIT* (indem man das Versand-Land für welches man keine Nachnahme wünscht einfach nicht mit angibt)

    Wäre das ein schöner Kompromiss ?

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MODUL: Erweitertes Nachnahme (cod) Zahlungsmodul
    Antwort #29 am: 22. August 2013, 17:57:41
    Zitat
    echo print_r() gibt's auch nicht

    Einspruch euer Ehren, diese Variante
    Code: PHP  [Auswählen]
    echo '<pre>' . print_r($foo, TRUE) . '</pre>';
    funktioniert einwandfrei. Benutze ich auch seit langem zum Debuggen.

    Gruß
    Ronny
    und @web0null

    Okay, mit dem Parameter 'true', in der Tat.
    Ihr habt ja Recht.
    Nehme alles zurück und behaupte das Gegenteil ;-).

    Gruß,
    noRiddle
    Trade Republic - Provisionsfrei Aktien handeln
    7 Antworten
    5237 Aufrufe
    12. November 2011, 12:56:25 von Tomcraft
    13 Antworten
    16386 Aufrufe
    11. August 2013, 14:27:18 von miCro2k
    8 Antworten
    5537 Aufrufe
    07. Mai 2013, 18:15:27 von ShopNix
    10 Antworten
    8643 Aufrufe
    22. August 2013, 23:30:14 von ReEdit
               
    anything