Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware
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: Nur günstigste Versandart einblenden

    Headshop

    • Fördermitglied
    • Beiträge: 18
    Nur günstigste Versandart einblenden
    am: 24. Juli 2010, 22:44:45
    Ich möchte nur die jeweils günstigste Versandart für den Kunden einblenden.
    Aktuell habe ich:
    Zitat
    Versandkosten nach Zonen
    • Es ist kein Versand in dieses Land möglich!
    Pauschale Versandkosten
    • Bester Weg    4,60 EUR
    Punkt 1 ist sinnlos. das soll weg.
    Punkt 2 ist ok, aber nicht vorausgewählt. Es ist gar nichts ausgewählt.

    Hier gibt's das Problem in live und Farbe: Headshop.org



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

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #1 am: 03. März 2023, 07:00:49
    Ich verwende in einem Shop das Modul von AGI Artikelabhängige Versandarten. Das funktioniert bestens. Allerdings kommt es bei der Verwendung von 6 Versandarten zu sehr viele Überschneidungen, so das bei manchen Artikeln alle erlaubten Versandarten im Warenkorb angezeigt werden, was bei Kunden zu Verwirrungen führt.

    Hat jemand einen Vorschlag, einen Anschubs für mich wie ich nur die günstigste von den gelisteten Versandarten anzeigen lassen kann (shopping_cart & checkout_shipping)?

    BG Karsta

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.984
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #2 am: 03. März 2023, 16:49:53
    Es gibt ja in der Klasse shipping  bereits eine Methode cheapest()  (gibt ein Array aus in welchem der Schlüssel id  den internen Namen des Versandmodules enthölt, z.B. table_table).
    Die Frage ist wie du die verwenden kannst.
    Gerade für den Warenkorb gibt es leider ja keinen Hook in /includes/shipping_estimate.php.
    Vielleicht kann man über die /includes/extra/application_bottom/ unter Zuhilfenahme von Javascript gehen ?

    Gruß,
    noRiddle

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #3 am: 04. März 2023, 08:14:54
    Danke für's mitdenken.

    Ich hatte überlegt auf der checkout_shipping die nicht vorausgewählten Versandarten mittels css auszublenden, natürlich zusätzlich ausgenommen Selbstabholung.
    Schön wäre es schon das updatsicher umzusetzen, da ich aber immer für geänderte System-Dateien eine Dokumentationsdatei im root hinterlege, bin ich in diesem Fall auch mit einer nicht updatsicheren Lösung zufrieden bis es eine andere Möglichkeit gibt.
    cheapest() hatte ich gesehen, aber so richtig habe ich da keinen Ansatz zur Umsetzung gefunden. Ich werde mir das nochmals genauer anschauen.

    BG Karsta

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.984
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #4 am: 05. März 2023, 01:36:31
    So knifflige Sachen reizen mich immer.
    Hier ein Vorschlag:

    Für den Warenkorb steht in der order_details.html  noch
    Code: XML  [Auswählen]
    $shipping_data.QUOTE.id

    zur Verfügung, was jedoch bislang nirgends ausgegeben wird.
    Es enthält jeweils den Namen des Versandmoduls.
    Das könnte man in ein data-Attribute geben und dann alle die nicht in $OBJECT->cheapest()  ausgegeben werden mittels JS ausblenden.

    Ein Beispiel für den Warenkorb:
    In /temnplates/YOUR_TEMPLATE/module/order_detals.html  anstatt
    Code: XML  [Auswählen]
    {foreach name=aussen item=shipping_data from=$shipping_content}
          <li class="otl_row3 cf">

    das
    Code: XML  [Auswählen]
    {foreach name=aussen item=shipping_data from=$shipping_content}
          <li class="otl_row3 cf" data-shipp-module="{$shipping_data.QUOTE.id}">

    und in einer Hook-Datei in /includes/application_bottom/  für Warenkorb und Checkout
    Code: PHP  [Auswählen]
    <?php
    if(basename($PHP_SELF, '.php') == 'shopping_cart') {
      if(!isset($shipping) || !is_object($shipping)) {
        $shipping = new shipping;
      }
      $chpst = $shipping->cheapest();
      $data_module = explode('_', $chpst['id'])[0];
    ?>
    <script>
    $(function() {
      let $desired_lis = $('.ord_total_list li.otl_row3');
      $desired_lis.each(function() {
        if($(this).data('shipp-module') != '<?php echo $data_module; ?>') {
          $(this).hide();
        }
      });
    });
    </script>
    <?php
    } else if(basename($PHP_SELF, '.php') == 'checkout_shipping') {
      if(!isset($shipping_modules) || !is_object($shipping_modules)) {
        $shipping_modules = new shipping;
      }
      $chpst = $shipping_modules->cheapest();
      $data_module = $chpst['id'];
    ?>
    <script>
    $(function() {
      let $desired_lis = $('.resp-tabs-container').find('input[name="shipping"]');
      $desired_lis.each(function() {
        if($(this).val() != '<?php echo $data_module; ?>') {
          $(this).parent().parent('h2').hide();
        }
      });
    });
    </script>
    <?php
    }
    ?>

    Getestet und funktioniert.
    Hab' aber bestimmt irgend etwas übersehen.

    Gruß,
    noRiddle

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #5 am: 05. März 2023, 10:08:33
    WAHNSINN, super Lösung und dann auch noch updatesicher.
    Vielen Dank  :thx:

    Im Moment versuche ich noch in deiner Abrage für die checkout_shipping 'selfpickup' von der Ausblendung auszuschließen.
    Im Warenkorb war das kein Problem, da hier der Ausschluss über die $shipping_data.QUOTE.id im Template gesteuert werden kann.
    Code: PHP  [Auswählen]
    {if $shipping_data.QUOTE.id != 'selfpickup'} ...

    BG Karsta

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #6 am: 05. März 2023, 12:12:29
    Ich habe jetzt die Zeile:
    Code: PHP  [Auswählen]
    let $desired_lis = $('.resp-tabs-container').find('input[name="shipping"]');

    geändert in:
    Code: PHP  [Auswählen]
    let $desired_lis = $('.resp-tabs-container').find('input[name="shipping"][value!="selfpickup_selfpickup"]');

    So funktionierts auf der checkout_shipping, dass Selbstabholung und die günstigste Versandart angezeigt werden.
    Einfach nur Mega.

    BG Karsta

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.984
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #7 am: 05. März 2023, 12:21:16
    Jau.
    Ich hätte es so gemacht, wenn ich mich nicht irre:
    Code: Javascript  [Auswählen]
        if($(this).val() != '<?php echo $data_module; ?>' && $(this).val() != 'selfüickup_selfpickup') {

    Ich kann's mom. nicht testen, da mein betrügerischer Hoster mal wieder meinen Server unerreichbar hat.
    Ist zwar ein Nebenthema aber seit ich bei dem bin werde ich nur vera......
    Noch ein wenig und ich werde ihn öffentlich im I-Net zerreißen.


    Gruß,
    noRiddle

    *NACHTRAG*
    Könntest du auch im WK analog im JS machen, dann mußt du im Template nichts filtern und hast die komplette Steuerung in der einen Hook-Datei.
    Für den WK müsste es allerdings so lauten
    Code: Javascript  [Auswählen]
        if($(this).data('shipp-module') != '<?php echo $data_module; ?>' && $(this).data('shipp-module') != 'selpickup') {

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #8 am: 05. März 2023, 12:26:54
    Habe deinen Vorschlag eben getestet, funktioniert auch. (allerdings natürlich statt 'selfüickup_selfpickup'  > 'selfpickup_selfpickup')

    @Hoster
    Man hat immer eine Wahl und kann innerhalb von 24h wechseln. Sich wegen so was aufzuregen, ist verschenkte Lebenszeit.

    BG Karsta

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.984
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #9 am: 05. März 2023, 12:40:48
    Och, dabei ist das"ü" doch so nah am "p"...

    So einfach ist das nicht, oder was fehlt mir an Wissen ?
    Die ganzen Mail-Konten umziehen, zig Domains umziehen ?
    Das ist Stress den ich mir mom. nicht antun will und kann.

    Gruß,
    noRiddle

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #10 am: 06. März 2023, 15:06:41
    @noRiddle
    Irgend etwas scheint noch zu haken. Ich bekomme da noch eine Fehlermeldung:
    Code: PHP  [Auswählen]
    ERROR found for URL: /shopping_cart.php {} {}
    Class "shipping" not found in File: /includes/extra/application_bottom/10_cheapest_shipping.php on Line: 5

    Zeile 5 steht:
    Code: PHP  [Auswählen]
    $shipping = new shipping;

    Eigentlich ist die Class "shipping" in der shipping_estimate eingebunden.
    Hast du eine Erklärung für die Fehlermeldung bzw. muss an der Stelle noch einmal classes/shipping.php eingebunden werden?

    BG Karsta

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.984
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #11 am: 06. März 2023, 15:48:22
    Puuh, ich kann den Fehler nicht nachstellen.
    Ja, die Class shipping steht in der in der /includes/modules/order_details_cart.php  includierten /includes/shipping_estimate.php   zur Verfügung, allerdings unter einer Condition:
    Code: PHP  [Auswählen]
    //suppot downloads and gifts
    if ($order->content_type == 'virtual' || ($order->content_type == 'virtual_weight') || ($_SESSION['cart']->count_contents_virtual() == 0)) {
      $shipping_content = array(array('NAME' => _SHIPPING_FREE));
      if (DOWNLOAD_SHOW_LANG_DROPDOWN == 'false') {
        $module_smarty->clear_assign('SELECT_COUNTRY');
        $smarty->clear_assign('SELECT_COUNTRY');
      }
    } elseif (defined('MODULE_ORDER_TOTAL_SHIPPING_STATUS')
              && MODULE_ORDER_TOTAL_SHIPPING_STATUS == 'true'
              )
    {
      require_once (DIR_WS_CLASSES.'shipping.php');
      $shipping = new shipping;

    Evtl. trifft die aus irgendeinem Grund unter bestimmten Voraussetzungen nicht zu ?
    Ich habe die Hintergründe der ersten if-Clause nicht näher untersucht.

    Lass uns einfach noch das einfügen und es sollte nichts mehr passieren:
    Code: PHP  [Auswählen]
        if(!class_exists('shipping')) {
          require_once (DIR_WS_CLASSES.'shipping.php');
        }

    also eingebettet so:
    Code: PHP  [Auswählen]
    if(basename($PHP_SELF, '.php') == 'shopping_cart') {
      if(!isset($shipping) || !is_object($shipping)) {
        if(!class_exists('shipping')) {
          require_once (DIR_WS_CLASSES.'shipping.php');
        }
        $shipping = new shipping;
      }
      $chpst = $shipping->cheapest();
      $data_module = explode('_', $chpst['id'])[0];

    Gruß,
    noRiddle

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: Nur günstigste Versandart einblenden
    Antwort #12 am: 06. März 2023, 16:23:58
    Besser. Die Fehlermeldung ist erst einmal weg. Beobachte ich weiter.
    Ich konnte es auch nicht nachstellen, denn es gibt in dem Shop weder Downloadartikel noch versandkostenfrei.

    Danke
    BG Karsta

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.367
    • Geschlecht:
    Re: Nur günstigste Versandart einblenden
    Antwort #13 am: 07. März 2023, 10:32:17
    Die fertige Lösung ist hier nochmal zusammengeschrieben worden: ANLEITUNG: Nur günstigste Versandart einblenden

    Grüße

    Torsten
    14 Antworten
    1582 Aufrufe
    19. Januar 2024, 15:52:09 von bumerang24
    5 Antworten
    3360 Aufrufe
    05. September 2011, 17:52:45 von Tomcraft
    12 Antworten
    5411 Aufrufe
    12. November 2008, 22:06:46 von Anonym