Здравствуйте, на сайте включено 2 способа доставки, и где-то в настройках включена функция отображения стоимости доставки в карточке товара, и по умолчанию отображается вариант “Обсудить с менеджером”, как сделать, чтобы в карточке товара отображался по умолчанию стоимость доставки почтой россии?
выяснил только то, что за эту функциональность отвечает модуль “Карты и геолокация”
а шаблон, отвечающий за отображение стойомости находится по пути
/design/themes/responsive/templates/addons/geo_maps/views/geo_maps/shipping_estimation.tpl
похоже, что логика отображения стоимости находится в этом коде
{foreach $shippings_summary as $shipping_type => $shipping}
<div class="ty-geo-maps-shipping__item">
<div class="ty-geo-maps-shipping__label">
{strip}
<a class="cm-dialog-opener cm-dialog-auto-size ty-geo-maps-shipping__link" data-ca-target-id="geo_maps_shipping_methods_list_{$product_id}">
{if $shipping_type == "pickup"}
{include_ext file="common/icon.tpl" class="ty-icon-pointer"}
{elseif $shipping_type == "courier"}
{include_ext file="common/icon.tpl" class="ty-icon-courier"}
{else}
{include_ext file="common/icon.tpl" class="ty-icon-shipping"}
{/if}
<span class="ty-geo-maps-shipping__link-text">
{__("geo_maps.shipping_group_`$shipping_type`")}
</span>
</a>
{if $shipping.number_of_pickup_points}
{__("geo_maps.from_pickup_points", [$shipping.number_of_pickup_points, "[shipping]" => $shipping.shipping])}
{/if}
<span class="ty-geo-maps-shipping__value-separator">:</span>
{/strip}
</div>
<div class="ty-geo-maps-shipping__value">
{if $shipping.delivery_time}
{__("geo_maps.shipping_about")}
{$shipping.delivery_time},
{/if}
{__("geo_maps.shipping_from")}
{include file="common/price.tpl" value=$shipping.rate class="ty-geo-maps-shipping__price"}
</div>
</div>
{/foreach}
переменная $shipping.rate передается для отображения, но никак не пойму что заставляет выбрать вариант для отображения по умолчанию “обсудить с менеджером”, а не любой другой
проверил содержимое массива $shippings_summary из которого вытаскиваются стоймости доставки и в нем оказалось всего 1 элемент, видимо надо искать функции, которые его передают в шаблон…
Array
(
[delivery] => Array
(
[rate] => 0
[delivery_time] =>
)
)
нашел функцию, которая заполняет массив значением стоймости доставки
app/addons/geo_maps/Tygh/Addons/GeoMaps/ShippingEstimator.php
protected static function prepareShippingsSummary($shipping_methods)
{
$shippings_summary = (new Collection($shipping_methods))
->map(function ($shipping) use (&$shipping_methods) {
$shipping_id = $shipping['shipping_id'];
$type = $shipping_methods[$shipping_id]['type'] =
self::isPickupShipping($shipping) ? ShippingGroupTypes::PICKUP : ShippingGroupTypes::DELIVERY;
return [
'rate' => $shipping['rate'],
'type' => $type,
'delivery_time' => !empty($shipping['service_delivery_time']) ? $shipping['service_delivery_time'] : $shipping['delivery_time'],
'number_of_pickup_points' => $shipping['number_of_pickup_points'],
];
})
->groupBy('type')
->map(function ($group) {
return $group->reduce(function ($group_summary, $shipping) {
if (empty($group_summary) || $shipping['rate'] < $group_summary['rate']) {
$group_summary = [
'rate' => $shipping['rate'],
'delivery_time' => $shipping['delivery_time'],
];
if ($shipping['type'] == ShippingGroupTypes::PICKUP) {
$group_summary['number_of_pickup_points'] = $shipping['number_of_pickup_points'];
}
}
return $group_summary;
}, []);
})
->toArray();
return [$shipping_methods, $shippings_summary];
}
вся магия происходит тут, стоймость как-то вытаскивается из какого-то массива (похоже на карту функций) и сразу же возвращается первый элемент
->map(function ($shipping) use (&$shipping_methods) {
$shipping_id = $shipping['shipping_id'];
$type = $shipping_methods[$shipping_id]['type'] =
self::isPickupShipping($shipping) ? ShippingGroupTypes::PICKUP : ShippingGroupTypes::DELIVERY;
return [
'rate' => $shipping['rate'],
'type' => $type,
'delivery_time' => !empty($shipping['service_delivery_time']) ? $shipping['service_delivery_time'] : $shipping['delivery_time'],
'number_of_pickup_points' => $shipping['number_of_pickup_points'],
];
не пойму как туда вечно попадает вариант цены “обсудить с менеджером”
популярность доставок менял бесполезно…
выяснил только одну закономерность, стоймость берется из способа доставки по порядку значения “расчет тарифа”
т.е. получается если 5 способов доставки, то они все отсортируются согласно этому списку в порядке убывания и на сайте как раз отображается самый первый согласно этому списку т.е. “Обсудить с менеджером” т.к. у него в расчете тарифа используется значение “по адресу покупателя” а раз он находится выше других тарифов, то он и отображается в карточке товара первее всех, причем игнорирую популярность, настроенную в админке, может разработчик может это как-то исправить, а то у всех людей я заметил отображается по умолчанию вариант “обсудить с менеджером” и в основном там стоит цена 0р. и выглядит это странно и не понятно для посетителя сайта
может как-то можно по своему отсортировать этот список а то я не нашел где он хранится?