Логика работы VirtueMart 2 такова, что метод доставки выбирается автоматически только в том случае, если он всего один.
Если у вас настроено несколько методов доставки, то ни один из них не будет выбран автоматически.
Это значит, что настройка "метода доставки по умолчанию" не предусмотрена (о чем свидетельствует кол-во вопросов на эту тему на форуме разработчиков)
Для того чтобы исправить эту ситуацию, я разработал такой хак:
Нужно изменить файл
components\com_virtuemart\helpers\cart.phpНайдите в нем функцию
CheckAutomaticSelectedShipment и в конце этой функции найдите такие строки:
$this->automaticSelectedShipment=false;
$this->setCartIntoSession();
return false;
и прямо перед ними вставьте этот код:
$preferred_shipment=0; // тут можно поставить любой ID метода доставки, который вы бы хотели использовать по умолчанию
if ($preferred_shipment==0){ // не используется, если уже определен "ID доставки по умолчанию" на строчке выше
if (!class_exists('VirtueMartModelShipmentmethod'))
require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'shipmentmethod.php');
$myship= new VirtueMartModelShipmentmethod;
$shipments=$myship->getShipments();
if ($shipments){
$preferred_shipment = intval($shipments[0]->virtuemart_shipmentmethod_id);
}
}
if ($this->virtuemart_shipmentmethod_id==0) {
$this->virtuemart_shipmentmethod_id=$preferred_shipment;
$virtuemart_shipmentmethod_id=$preferred_shipment;}
Смысл исправления: если в коде не выбран метод доставки по умолчанию, то будет выбран первый попавшийся из доступного списка настроенных методов в админке. При этом у посетителя сохраняется возможность поменять способ доставки на любой другой доступный.
Есть файл
administrator\components\com_virtuemart\helpers\calculationh.php, в нем также нужно изменить одну строчку.
Найти (у меня на 968 строке):
if ($automaticSelectedShipment) $ship_id=$cart->virtuemart_shipmentmethod_id;
И поменять на:
$ship_id=$cart->virtuemart_shipmentmethod_id;
В чем смысл этого исправления: хелпер проверяет, был ли автоматически выбран ID метода доставки. Функция определения возвращает отрицательный результат (это нужно для того, чтобы сохранить возможность выбора другого способа доставки). И хелпер, не ожидая, что ему вернут готовый ID (как сделали разработчики), на этом останавливается, предоставляя пользователю самому выбрать доставку.
Изменение кода убирает проверку условия "на автоматизм", потому что в нашем случае ID будет передан в любом случае (если у вас конечно настроены методы доставки в админке).
Код не претендует на гениальность, проверялся на VM 2.0.7
Хочу отметить, что раз это хак ядра, то имейте ввиду, что с большой вероятностью он при следующем обновлении затрется. Однако, другого решения пока видимо не существует.