0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 10386 Просмотров
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
Логика работы 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

Хочу отметить, что раз это хак ядра, то имейте ввиду, что с большой вероятностью он при следующем обновлении затрется.
Однако, другого решения пока видимо не существует.
« Последнее редактирование: 05.05.2012, 10:02:43 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
Re: VM2 Метод доставки "по умолчанию"
« Ответ #1 : 05.05.2012, 08:50:54 »
Нашел косяк один - автовыбор срабатывает только при втором входе в корзину. Видимо инициализация происходит раньше, чем вызывается CheckAutomaticSelectedShipment. Поищу дальше.
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
Re: VM2 Метод доставки "по умолчанию"
« Ответ #2 : 05.05.2012, 09:36:12 »
Похоже нашел.
Есть файл 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 будет передан в любом случае (если у вас конечно настроены методы доставки в админке).

P.S. Дополнил код в первом сообщении.
Я помог вам? Ткните в карму.
*

Polosat

  • Давно я тут
  • 203
  • 7
  • Мечты - это то, из чего сделано будущее
Отличное решение - рабочее. А то же самое для "оплаты по умолчанию" можно сообразить?
*

xilgiz

  • Осваиваюсь на форуме
  • 129
  • 1
Что-то сделал все по инструкции - никаких изменений... VirtueMart 2.0.6
*

lakshmi

  • Осваиваюсь на форуме
  • 177
  • 3
Да для доставки это супер ^-^
Отличное решение - рабочее. А то же самое для "оплаты по умолчанию" можно сообразить?
присоединяюсь ;D
*

jenya

  • Новичок
  • 1
  • 0
Цитировать
Что-то сделал все по инструкции - никаких изменений... VirtueMart 2.0.6

та же фигня....
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
Похоже, у новых версий VM немного изменился механизм выбора.
Если уж у вас что-то не работает, описывайте полностью, что вы делали, сколько у вас способов доставки, как они настроены, какая версия компонента и т.д.
"У меня не работает" - это не описание проблемы. "А у меня - работает" - так хочется ответить на поставленную задачу.
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
Кстати, решение для вариантов оплаты уже сделали по моей схеме.
В той же теме в последнем сообщении описано изменение по доставке для 2.0.6
Для тех, кто английский язык ну совсем никак не понимает, придумали такой вариант.

А то у меня всё руки не доходили проверить на новых версиях.
« Последнее редактирование: 04.08.2012, 14:50:23 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

mumins

  • Захожу иногда
  • 23
  • 4
Чорд, search однозначно рулит, но субота все  же, неварит котелок...
Кстате - употребляющие 2.0.6 - смотрите на последнее сообщение в той ветке.

d0ublezer0 - большое вам спасибо.

Братья меншие ;>
*

aixman

  • Осваиваюсь на форуме
  • 67
  • 4
RE: VM2 Метод доставки "по умолчанию"
« Ответ #10 : 29.05.2013, 17:07:45 »
Было бы замечательно, если вообще не давать дальше двигаться покупателю пока не выбран способ доставки и оплаты.
Странно почему это не сделано по умолчанию в самом VM2

Если у кого есть подходящие хаки и решения! Прошу помощи!
всегда готов помочь с сайтами Joomla
http://vrnstudio.ru/
*

d0ublezer0

  • Давно я тут
  • 326
  • 29
  • Javaхарлал Неру
RE: VM2 Метод доставки "по умолчанию"
« Ответ #11 : 30.05.2013, 11:01:32 »
Было бы замечательно, если вообще не давать дальше двигаться покупателю пока не выбран способ доставки и оплаты.
А разве по умолчанию не так? Без выбранных способов оплаты и доставки вы не разместите заказ.
Я помог вам? Ткните в карму.
*

aixman

  • Осваиваюсь на форуме
  • 67
  • 4
RE: VM2 Метод доставки "по умолчанию"
« Ответ #12 : 30.05.2013, 12:54:23 »
Ох, и тупанул я ((
d0ublezer0 ты прав. Спасибо, что открыл мне глаза ))
всегда готов помочь с сайтами Joomla
http://vrnstudio.ru/
*

SibPromEnergo

  • Осваиваюсь на форуме
  • 25
  • 1
RE: VM2 Метод доставки "по умолчанию"
« Ответ #13 : 14.01.2014, 14:30:54 »
2.0.22 - не помогло.
Что странно, метод доставки не выбирается автоматически, даже когда стоит галочка автоматически выбирать метод доставки и он лишь один - почта России. Стоит плагин расчета доставки почтой, может в нем проблема?
*

Lann

  • Осваиваюсь на форуме
  • 117
  • 4
  • Палисандровый генерал
Re: VM2 Метод доставки "по умолчанию"
« Ответ #14 : 05.02.2014, 11:53:36 »
Добрый день! В VM 2.0.26 в файле administrator\components\com_virtuemart\helpers\calculationh.php нет указанной строки :(

На самом деле интересует почему у меня при повторном заходе в корзину пропадает выбор способов доставки? (подробно проблема описана тут http://joomlaforum.ru/index.php/topic,287776.new.htm)
« Последнее редактирование: 05.02.2014, 12:37:07 от Lann »
ZPmer - сервис, позволяющий быстро узнать реальные зарплаты на конкретных должностях.
*

Amatoravg

  • Захожу иногда
  • 20
  • 1
Re: VM2 Метод доставки "по умолчанию"
« Ответ #15 : 15.03.2015, 19:12:02 »
Решение нерабочее. Ибо нет возможности изменить выбранный по умолчанию способ доставки/оплаты.
Нашел способ, как сделать все красиво и изящно.

components\com_virtuemart\helpers\cart.php - оставляем все как было по умолчанию, ничего в этом файле менять не надо.

administrator\components\com_virtuemart\helpers\calculationh.php :

в функции calculateShipmentPrice перед строкой:

if (empty($cart->virtuemart_shipmentmethod_id)) return;

добавляем строку:

if (empty($cart->virtuemart_shipmentmethod_id)) $cart->virtuemart_shipmentmethod_id = 1;

Я поставил 1, у вас может быть нужный вам ID.

Аналогично с функцией calculatePaymentPrice:

//+Аматор
if (empty($cart->virtuemart_paymentmethod_id)) $cart->virtuemart_paymentmethod_id = 2;
//-Аматор

if (empty($cart->virtuemart_paymentmethod_id)) return;

Проверена на VM 2.0.24
« Последнее редактирование: 15.03.2015, 19:15:12 от Amatoravg »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться