Форум русской поддержки Joomla!® CMS
08.12.2016, 15:58:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] VM2 Метод доставки "по умолчанию"

 (Прочитано 9495 раз)
0 Пользователей и 1 Гость смотрят эту тему.
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« : 04.05.2012, 22:59:08 »

Логика работы 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
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #1 : 05.05.2012, 08:50:54 »

Нашел косяк один - автовыбор срабатывает только при втором входе в корзину. Видимо инициализация происходит раньше, чем вызывается CheckAutomaticSelectedShipment. Поищу дальше.
Записан
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #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
Давно я тут
****

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 202


Мечты - это то, из чего сделано будущее


« Ответ #3 : 18.06.2012, 15:26:33 »

Отличное решение - рабочее. А то же самое для "оплаты по умолчанию" можно сообразить?
Записан
xilgiz
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 129


« Ответ #4 : 18.06.2012, 22:14:44 »

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

Репутация: +3/-0
Offline Offline

Сообщений: 177



« Ответ #5 : 26.06.2012, 11:23:59 »

Да для доставки это супер Smiley
Отличное решение - рабочее. А то же самое для "оплаты по умолчанию" можно сообразить?
присоединяюсь Grin
Записан
jenya
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #6 : 27.06.2012, 13:41:54 »

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

та же фигня....
Записан
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #7 : 04.08.2012, 13:33:07 »

Похоже, у новых версий VM немного изменился механизм выбора.
Если уж у вас что-то не работает, описывайте полностью, что вы делали, сколько у вас способов доставки, как они настроены, какая версия компонента и т.д.
"У меня не работает" - это не описание проблемы. "А у меня - работает" - так хочется ответить на поставленную задачу.
Записан
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #8 : 04.08.2012, 13:49:37 »

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

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

Репутация: +4/-0
Offline Offline

Сообщений: 23


« Ответ #9 : 04.08.2012, 14:06:50 »

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

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

Братья меншие ;>
Записан
aixman
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 67


« Ответ #10 : 29.05.2013, 17:07:45 »

Было бы замечательно, если вообще не давать дальше двигаться покупателю пока не выбран способ доставки и оплаты.
Странно почему это не сделано по умолчанию в самом VM2

Если у кого есть подходящие хаки и решения! Прошу помощи!
Записан
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #11 : 30.05.2013, 11:01:32 »

Было бы замечательно, если вообще не давать дальше двигаться покупателю пока не выбран способ доставки и оплаты.
А разве по умолчанию не так? Без выбранных способов оплаты и доставки вы не разместите заказ.
Записан
aixman
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 67


« Ответ #12 : 30.05.2013, 12:54:23 »

Ох, и тупанул я ((
d0ublezer0 ты прав. Спасибо, что открыл мне глаза ))
Записан
SibPromEnergo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 25


« Ответ #13 : 14.01.2014, 14:30:54 »

2.0.22 - не помогло.
Что странно, метод доставки не выбирается автоматически, даже когда стоит галочка автоматически выбирать метод доставки и он лишь один - почта России. Стоит плагин расчета доставки почтой, может в нем проблема?
Записан
Lann
Осваиваюсь на форуме
***

Репутация: +5/-1
Offline Offline

Пол: Мужской
Сообщений: 114


Палисандровый генерал


« Ответ #14 : 05.02.2014, 11:53:36 »

Добрый день! В VM 2.0.26 в файле administrator\components\com_virtuemart\helpers\calculationh.php нет указанной строки Sad

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

Репутация: +1/-0
Offline Offline

Сообщений: 20


« Ответ #15 : 15.03.2015, 20: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, 20:15:12 от Amatoravg » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet