Перейти к содержимому


Фотография
- - - - -

Стоимость доставки Яндекс Карты

яндекс карта доставка карта

Сообщений в теме: 11

#1 Rivermc

Rivermc

Отправлено 21 December 2017 - 07:55

Добрый день. Подскажите как решить задачу.

Сделал карту на яндекс api для определения расстояния до адреса и подсчет стоимости доставки. Но как изменить цену в корзине? Почитал документацию, форумы понял что надо думать в сторону функции getRate(), но это php функция, а переменные у меня в js. Как вызвать через ajax изменение цены? При переключении типа доставки происходит динамическое изменение цены, подскажите как сделать так же? 

 

P.S. картой поделюсь если все будет работать, я думаю многим будет полезно


  • 0

#2 hasanchemerzaev

hasanchemerzaev

Отправлено 21 December 2017 - 08:02

Если удастся реализовать то было бы шикарно, сейчас мои прогеры этим же занимаются.


  • 0

#3 Rivermc

Rivermc

Отправлено 21 December 2017 - 08:27

Если удастся реализовать то было бы шикарно, сейчас мои прогеры этим же занимаются.

 

Карту я уже реализовал, оптимизировать код довести до ума и можно интегрировать, вот только не понимаю как


  • 0

#4 fiction13

fiction13

Отправлено 21 December 2017 - 08:38

Возьмите, к примеру, способ доставки russianpost, посмотрите, как там реализована смена цены доставки.

 

В основном файле php (element/element.php) должна быть функция getRate(), которая вернет стоимость доставки. Пересчет стоимости доставки вызывается из js (element/js/element.js) функцией $this._updatePrice(); После вызова этой функции вызывается аяксом getRate() и цена меняется в зависимости от возвращенного функцией значения.

 

Теперь на практике, как это вижу я.

  • В настройка прописываете зависимости цены от номера зоны (например в тестовом поле по определенным правилам).
  • В файле (element/tmpl/submission.php) Вы делаете скрытое поле, которое обозначает номер зоны доставки.
  • В element/js/element.js пишите логику, по которой при выборе пользователем зоны - в добавленное выше скрытое подставляется id зоны, после чего вызываете функцию $this._updatePrice();
  • В element/element.php в функции getRate() получаете цену в зависимости от зоны (тут надо спарсить зависимость цены от зоны, сделать можно разными способами). Значение скрытого поля получаете с помощью метода $this->get('name'), где name - имя Вашего скрытого поля с номером зоны.

Или вместо id зоны доставки просто пишите в скрытое поле сразу стоимость, чтобы не заниматься лишним в функции getRate(). Тогда нужно просто будет получить значение скрытого поля и вернуть его. В общем смысл, я думаю, понятен.


Сообщение отредактировал fiction13: 21 December 2017 - 08:43

  • 3

#5 Rivermc

Rivermc

Отправлено 21 December 2017 - 09:30

Возьмите, к примеру, способ доставки russianpost, посмотрите, как там реализована смена цены доставки.

 

В основном файле php (element/element.php) должна быть функция getRate(), которая вернет стоимость доставки. Пересчет стоимости доставки вызывается из js (element/js/element.js) функцией $this._updatePrice(); После вызова этой функции вызывается аяксом getRate() и цена меняется в зависимости от возвращенного функцией значения.

 

Теперь на практике, как это вижу я.

  • В настройка прописываете зависимости цены от номера зоны (например в тестовом поле по определенным правилам).
  • В файле (element/tmpl/submission.php) Вы делаете скрытое поле, которое обозначает номер зоны доставки.
  • В element/js/element.js пишите логику, по которой при выборе пользователем зоны - в добавленное выше скрытое подставляется id зоны, после чего вызываете функцию $this._updatePrice();
  • В element/element.php в функции getRate() получаете цену в зависимости от зоны (тут надо спарсить зависимость цены от зоны, сделать можно разными способами). Значение скрытого поля получаете с помощью метода $this->get('name'), где name - имя Вашего скрытого поля с номером зоны.

Или вместо id зоны доставки просто пишите в скрытое поле сразу стоимость, чтобы не заниматься лишним в функции getRate(). Тогда нужно просто будет получить значение скрытого поля и вернуть его. В общем смысл, я думаю, понятен.

 

Спасибо большое, логика понятна. Буду пробовать


  • 1

#6 Rivermc

Rivermc

Отправлено 24 December 2017 - 17:57

Возьмите, к примеру, способ доставки russianpost, посмотрите, как там реализована смена цены доставки.

 

В основном файле php (element/element.php) должна быть функция getRate(), которая вернет стоимость доставки. Пересчет стоимости доставки вызывается из js (element/js/element.js) функцией $this._updatePrice(); После вызова этой функции вызывается аяксом getRate() и цена меняется в зависимости от возвращенного функцией значения.

 

Теперь на практике, как это вижу я.

  • В настройка прописываете зависимости цены от номера зоны (например в тестовом поле по определенным правилам).
  • В файле (element/tmpl/submission.php) Вы делаете скрытое поле, которое обозначает номер зоны доставки.
  • В element/js/element.js пишите логику, по которой при выборе пользователем зоны - в добавленное выше скрытое подставляется id зоны, после чего вызываете функцию $this._updatePrice();
  • В element/element.php в функции getRate() получаете цену в зависимости от зоны (тут надо спарсить зависимость цены от зоны, сделать можно разными способами). Значение скрытого поля получаете с помощью метода $this->get('name'), где name - имя Вашего скрытого поля с номером зоны.

Или вместо id зоны доставки просто пишите в скрытое поле сразу стоимость, чтобы не заниматься лишним в функции getRate(). Тогда нужно просто будет получить значение скрытого поля и вернуть его. В общем смысл, я думаю, понятен.

 

Почти все работает. Только не могу разобраться в одном моменте. Стоимость доставки передает. Но меняет только при клике, никак не могу разобраться с событием change в JBZoo.Widget. Оно срабатывает только если в ручную поменять данные в input, а как вызвать $this_updatePrice после не ручного внесения изменений в input 

 

$('.counter-city input').attr('value', parseInt(routePriceCalc));
$('.counter-city input').text(parseInt(routePriceCalc));
$('.counter-city input').val(parseInt(routePriceCalc));
 
На эти события change не срабатывает :(
Надеюсь понятно объяснил, что не так
 
посмотреть можно здесь http://koz.2f-vsk.ru
смена стоимости доставки срабатывает при нажатии на стоимость доставки ниже карты (просто временное решение)

Сообщение отредактировал Rivermc: 24 December 2017 - 18:02

  • 0

#7 fiction13

fiction13

Отправлено 25 December 2017 - 06:24

$('.counter-city input').val(parseInt(routePriceCalc)).trigger('change'); 

Сообщение отредактировал fiction13: 25 December 2017 - 06:43

  • 1

#8 Rivermc

Rivermc

Отправлено 25 December 2017 - 06:33

 

$('.counter-city input').val(parseInt(routePriceCalc)).trigger('change');

 

 

Спасибо большое. Все работает. Доведу до ума и выложу для всех


  • 3

#9 programmos

programmos

Отправлено 26 December 2017 - 00:45

Спасибо большое. Все работает. Доведу до ума и выложу для всех

Ожидаем ;) , как раз можно как мини элемент для корзины


  • 1

#10 Rivermc

Rivermc

Отправлено 26 December 2017 - 16:55

Вот рабочая, но сырая версия, для тех кому не терпится. Демо можно посмотреть на сайте kozhevatkinprof.ru

 

Что делает:

Строит маршрут от начальной точки до адреса покупателя, проверяет за МКАДом адрес или нет. Рассчитывает расстояние от МКАДа до адреса. Считает стоимость доставки.

 

События:

1. Строит маршрут по адресу указанному в textarea адрес

2. Строит маршрут при клике на карту

 

Установка:

Закинуть папку shipmap в /media/zoo/applications/jbuniversal/cart-elements/shipping. Далее в админке выбрать shipmap в сервисах доставки.

 

Мысля:

Появилась интересная мысль, подменять адрес в textarea из того что выдала карта, что бы менеджеру приходил нормальный адрес. Т.е. например человек написал Коломна гоголя 18, а менеджеру пришло Московская область г. Коломна ул. Гоголя д.18. И как бы все здорово, но яндекс не знает квартир и потому эта информация подтирается, если есть идеи как можно обойти этот момент буду признателен. Выводить отдельный input для квартиры слишком корявое решение

 

Все настройки в файлах, в параметры элемента еще не успел переделать.

 

Начальную точку указывать в координатах с геокодера Яндекс, с остальным думаю все будет понятно.

Пользуйтесь на здоровье, помогайте другим. Улучшения элемента приветствуются

Прикрепленные файлы

  • Прикрепленный файл  shipmap.zip   11.91К   150 Количество загрузок:

Сообщение отредактировал Rivermc: 26 December 2017 - 17:13

  • 3





Темы с аналогичным тегами яндекс карта, доставка, карта

Click to return to top of page in style!