Odbiór osobisty zamiast tekstu wysyłka za darmo

Dzień dobry. Mam kolejne pytanie - dotyczące Presta 8.1 ... Chodzi mi o koszyk i informacje na temat wysyłki Dodaję coś do koszyka i mam durną informację - Wysyłka za darmo. A wcale nie jest to wysyłka, tylko koszt odbioru osobistego == 0. Bo koszt kuriera jest np 50 zł. Czy jest jakiż moduł albo ustawienie, które w koszyku pokazuje ten domyślny sposób wysyłki (czyli np odbiór osobisty, tak jak jest to zdefiniowane w parametrach przewoźników) zamiast tego napisu "wysyłka"? Jest to bardzo wprowadzające klientów w błąd niestety. Zrobiłem to nieelegancko, bo pogrzebałem w kodzie presty i zmieniłem sobie tak funkcje w src\Adapter\Presenter\Cart\CartPresenter.php (bo w szablonie nie znalazłem żadnych danych do tego, może za mało wiem)
private function getShippingDisplayValue($cart, $shippingCost)
{
    $shippingDisplayValue = '';

    // if one of the applied cart rules have free shipping, then the shipping display value is 'Free'
    foreach ($cart->getCartRules() as $rule) {
        if ($rule['free_shipping'] && !$rule['carrier_restriction']) {
            return $this->translator->trans('Free', [], 'Shop.Theme.Checkout');
        }
    }

    if ($shippingCost != 0) {
        $shippingDisplayValue = $this->priceFormatter->format($shippingCost);
    } else {
        $defaultCountry = null;

        if (isset(Context::getContext()->cookie->id_country)) {
            $defaultCountry = new Country((int) Context::getContext()->cookie->id_country);
        }

        $deliveryOptionList = $cart->getDeliveryOptionList($defaultCountry);

        if (count($deliveryOptionList) > 0) {
            foreach ($deliveryOptionList as $option) {
                foreach ($option as $currentCarrier) {
                    $carrier_id = array_key_first($currentCarrier['carrier_list']);
//                        error_log('First key is -->' . $carrier_id . ' <--' . PHP_EOL,3,'mm_carier_list.log');
//                        error_log('value' . PHP_EOL,3,'mm_carier_list.log');
//                        error_log(print_r($currentCarrier['carrier_list'][$carrier_id] , 1) . PHP_EOL,3,'mm_carier_list.log');
                    $mg_carrier = $currentCarrier['carrier_list'][$carrier_id]['instance'];
//                        error_log('Carrier' . PHP_EOL,3,'mm_carier_list.log');
//                        error_log(print_r($mg_carrier->name , 1) . PHP_EOL,3,'mm_carier_list.log');
                    if (isset($currentCarrier['is_free']) && $currentCarrier['is_free'] > 0) {
                        $shippingDisplayValue = $this->translator->trans('Free', [], 'Shop.Theme.Checkout');
                        $shippingDisplayValue = $mg_carrier->name . ' - ' . $shippingDisplayValue;
                        break 2;
                    }
                }
            }
        }
    }

    return $shippingDisplayValue;
}





Dzień dobry

ja to widzę tylko poprzez modyfikacje pliku tpl, gdzie sprawdzamy jaki jest id_carrier koszyka
jeżeli id_carrier koszyka to id metody dostawy "odbiór osobisty" to po prostu zmieniamy label {$cart.label} na swój tekst np. "odbiór osobisty"
 
plik:
themes/nazwa-szablonu/templates/checkout/_partials/cart-detailed-totals.tpl
w zależności od stosowanego szablonu ścieżka do pliku może być inna (twórcy szablonów różnie budują swoje szablony)
 
kod:
            {if 'products' == $subtotal.type}
{$cart.summary_string}
{else}
{$subtotal.label}
{/if}
zmieniamy na:
            {if $subtotal.type === "shipping"}
{if Context::getContext()->cart->id_carrier == 2}
//TUTAJ TEKST ODBIORU OSOBISTEGO GDY NP id_carrier TO 2 (2 - id metody "odbioru osobistego")
{l s='Pickup at store' d='Shop.Theme.Checkout'}
{else}
{$subtotal.label}
{/if}
{else}
{if 'products' == $subtotal.type}
{$cart.summary_string}
{else}
{$subtotal.label}
{/if}
{/if}


 
 

Komentarze

Popularne posty z tego bloga

Rabat za newsletter a "stare" konta klientów - wtyczka do prestashop

Własny kod w miejscu slidera w PrestaShop

Zapisywanie metod dostawy do produktów na podstawie cech