Jump to content

Versanddienste einstellen für Artikel aus 2 verschiedenen Kategorien


Recommended Posts

Hallo zusammen.

Ich habe in meinem 8.1.6 2 Kategorien von Artikeln, für die ich auch jeweils einen gewichtsbasierenden Versanddienst erstellt habe. Was auch erst einmal klappt, solange ich nicht Artikel aus dem einen und anderem Versanddienst im Warenkorb kombiniere. Da gibt er mir dann nicht das aus, was er soll:

Er soll beim vorhandensein von Artikeln aus beiden Versanddiensten entweder einen von mir dritten Versanddienst nutzen, oder die Versandkosten eines bereits bestehenden Versanddienstses (in meinem Fall A).

Ich habe auch schon das Addon Advanced Shipping Costs Plus probiert, aber damit kann man das wohl auch nicht umsetzen. Zudem habe ich ausprobiert mittels Cart.php in /ovverride/classes diesen Code hier ans laufen zu bekommen:

 

<?php

class Cart extends CartCore
{
    public function getShippingMethods()
    {
        $products = $this->getProducts();
        
        $hasDPDShipping = false;
        $hasDPDMicrofiberShipping = false;
        
        $totalWeight = $this->getTotalWeight(); // Gesamtgewicht in Gramm

        foreach ($products as $product) {
            if ($product['id_shipping_method'] == 15) { // DPD Versand
                $hasDPDShipping = true;
            }
            if ($product['id_shipping_method'] == 19) { // DPD Versand Microfaser
                $hasDPDMicrofiberShipping = true;
            }
        }

        if ($hasDPDShipping && $hasDPDMicrofiberShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(15, 5); // 5 Euro für DPD Versand
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(15, 9); // 9 Euro für DPD Versand
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        elseif ($hasDPDShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(15, 5); // 5 Euro für DPD Versand
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(15, 9); // 9 Euro für DPD Versand
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        elseif ($hasDPDMicrofiberShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(19, 5); // 5 Euro für DPD Versand Microfaser
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(19, 9); // 9 Euro für DPD Versand Microfaser
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        return parent::getShippingMethods();
    }

    private function getShippingByCarrier($carrierId, $price = 0)
    {
        return array(
            'id_carrier' => $carrierId,
            'price' => $price
        );
    }
}

Kann mir jemand helfen mit einer Lösung?

Liebe Grüße

Link to comment
Share on other sites

Das ganze ist extrem verwirrend, was bezweckst du eigentlich mit so einer Konstruktion?

Im Code fällt mir auf, kann man wirklich mit DPD 110 kg-Pakete versenden (oder sogar noch schwerere), und das für ein paar Euro? Was ist mit Paketen zwischen 110 und 120 kg, die lässt du aus? Kostenloser Versand ab 120 kg Gewicht (d. h. nicht nach Preis), sehr ungewöhnlich und für Kunden schlecht nachvollziehbar.

5 verschiedene Versanddienste? Und dann doch immer die gleichen gestaffelten Versandkosten, wozu das? Warum nicht einfach ein einziger Versanddienst mit verschiedenen Versandpreisen je nach Gewicht? Der Kunde kann bei dir ja offenbar noch nicht einmal wählen ...

 

Link to comment
Share on other sites

9 hours ago, masterriemi1702 said:

Hallo zusammen.

Ich habe in meinem 8.1.6 2 Kategorien von Artikeln, für die ich auch jeweils einen gewichtsbasierenden Versanddienst erstellt habe. Was auch erst einmal klappt, solange ich nicht Artikel aus dem einen und anderem Versanddienst im Warenkorb kombiniere. Da gibt er mir dann nicht das aus, was er soll:

Er soll beim vorhandensein von Artikeln aus beiden Versanddiensten entweder einen von mir dritten Versanddienst nutzen, oder die Versandkosten eines bereits bestehenden Versanddienstses (in meinem Fall A).

Ich habe auch schon das Addon Advanced Shipping Costs Plus probiert, aber damit kann man das wohl auch nicht umsetzen. Zudem habe ich ausprobiert mittels Cart.php in /ovverride/classes diesen Code hier ans laufen zu bekommen:

 

<?php

class Cart extends CartCore
{
    public function getShippingMethods()
    {
        $products = $this->getProducts();
        
        $hasDPDShipping = false;
        $hasDPDMicrofiberShipping = false;
        
        $totalWeight = $this->getTotalWeight(); // Gesamtgewicht in Gramm

        foreach ($products as $product) {
            if ($product['id_shipping_method'] == 15) { // DPD Versand
                $hasDPDShipping = true;
            }
            if ($product['id_shipping_method'] == 19) { // DPD Versand Microfaser
                $hasDPDMicrofiberShipping = true;
            }
        }

        if ($hasDPDShipping && $hasDPDMicrofiberShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(15, 5); // 5 Euro für DPD Versand
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(15, 9); // 9 Euro für DPD Versand
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        elseif ($hasDPDShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(15, 5); // 5 Euro für DPD Versand
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(15, 9); // 9 Euro für DPD Versand
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        elseif ($hasDPDMicrofiberShipping) {
            if ($totalWeight <= 30000) { // Bis 30 kg (30.000 g)
                return $this->getShippingByCarrier(19, 5); // 5 Euro für DPD Versand Microfaser
            } elseif ($totalWeight <= 110000) { // Bis 110 kg (110.000 g)
                return $this->getShippingByCarrier(19, 9); // 9 Euro für DPD Versand Microfaser
            } elseif ($totalWeight >= 120000) { // Ab 120 kg (120.000 g)
                return $this->getShippingByCarrier(0); // Kostenloser Versand (ID 0)
            }
        }

        return parent::getShippingMethods();
    }

    private function getShippingByCarrier($carrierId, $price = 0)
    {
        return array(
            'id_carrier' => $carrierId,
            'price' => $price
        );
    }
}

Kann mir jemand helfen mit einer Lösung?

Liebe Grüße

Frage neu formuliert

Wie kann man Versanddienste so einstellen, dass Artikel aus zwei unterschiedlichen Kategorien automatisch die jeweils passenden Versandarten nutzen?

 

Antwort

PrestaShop weist Versandarten nicht direkt pro Kategorie zu, sondern über Versandzonen, Gewicht, Preisregeln oder Einschränkungen pro Produkt/Carrier. Das heißt, wenn zwei Kategorien unterschiedliche Versanddienste brauchen, gibt es mehrere saubere Wege:

 

Über Carrier-Einschränkungen pro Produkt
Geh in die Produkteinstellungen, Tab „Versand“, und deaktiviere dort die Carrier, die für dieses Produkt nicht erlaubt sind. So steuerst du es unabhängig von der Kategorie.

Über Versandregeln
Definiere zwei Carrier, jeweils mit eigenen Bedingungen (z. B. Zone, Gewicht, Preis). Weise dann in den betroffenen Produkten die passenden Carrier zu.

Testmodus
Um Fehler auszuschließen, aktiviere vorübergehend ein Standard-Theme und deaktiviere alle nicht notwendigen Module. So stellst du sicher, dass keine Drittanbieter-Erweiterung die Carrier-Logik blockiert.

 

 

Zusatz-Tipp

Wenn du viele Produkte pro Kategorie hast, lohnt sich ein kleines Modul oder SQL-Skript, das die Carrier-Zuweisung massenhaft vornimmt. Das spart enorm Zeit und ist stabiler als jede manuelle Pflege.

Link to comment
Share on other sites

  • 2 weeks later...

Hallo und entschuldigung für die späte Rückmeldung. Danke für die Hinweise.

Mit den oben genannten Erläuterrungen kann ich meine Wünsche so wie ich das sehe, nicht abbilden:

- Ich habe Versandpreise auf Grund von Gewichten

- Ich hab 2 Gruppen von Produkten, wo die Versandkosten auf Grund des Gewichtes anders berechnet werden

- Momentan funktioniert alles super, solange ich nicht Artikel aus BEIDEN Gruppen GLEICHZEITIG in den Warenkorb lege

- Der Shop soll dies tun, wenn BEIDE GRUPPEN im Warenkorb legen: Entweder eine 3 Versandart nehmen, welche auf Grund des Gewichtest berechnet wird, oder ich kann sagen: Wenn beide Gruppen im Warenkorb liegen und du dir nicht sicher bist, nimm die Preisstaffelung der Versandkosten aus Gruppe A.

 

Link to comment
Share on other sites

Auf die Fragen in meinem Post gehst du überhaupt nicht ein ...

Welchen Versanddiensten hast du denn die Produkte zugeordnet? Sind es zwei oder insgesamt drei unterschiedliche "Gruppen"?

Jedenfalls sollte es funktionieren, wenn du alle Gruppen Versanddienst 1 zuordnest, Gruppe B Versanddienst 1 und 2 und ggf. Gruppe C Versanddienst 1, 2 und 3.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...