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 koszykajeż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
Prześlij komentarz