Jump to content


Photo
- - - - -

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

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

11 replies to this topic

#1 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 21 December 2017 - 07:55

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

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

 

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


  • 0

#2 hasanchemerzaev

hasanchemerzaev
  • JBZoo User (rus)
  • User rate: 5.8
  • posts: 282
  • topics: 74

Posted 21 December 2017 - 08:02

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


  • 0

#3 Rivermc

Rivermc
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 21 December 2017 - 08:27

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

 

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


  • 0

#4 fiction13

fiction13
  • JBZoo User (rus)
  • User rate: 272.6
  • posts: 604
  • topics: 23

Posted 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(). Тогда нужно просто будет получить значение скрытого поля и вернуть его. В общем смысл, я думаю, понятен.


Edited by fiction13, 21 December 2017 - 08:43.

  • 3

#5 Rivermc

Rivermc
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 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
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 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
смена стоимости доставки срабатывает при нажатии на стоимость доставки ниже карты (просто временное решение)

Edited by Rivermc, 24 December 2017 - 18:02.

  • 0

#7 fiction13

fiction13
  • JBZoo User (rus)
  • User rate: 272.6
  • posts: 604
  • topics: 23

Posted 25 December 2017 - 06:24

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

Edited by fiction13, 25 December 2017 - 06:43.

  • 1

#8 Rivermc

Rivermc
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 25 December 2017 - 06:33

 

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

 

 

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


  • 3

#9 programmos

programmos
  • JBZoo User (rus)
  • User rate: 6.8
  • posts: 259
  • topics: 13

Posted 26 December 2017 - 00:45

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

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


  • 1

#10 Rivermc

Rivermc
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 26 December 2017 - 16:55

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

 

Что делает:

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

 

События:

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

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

 

Установка:

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

 

Мысля:

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

 

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

 

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

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

Attached Files


Edited by Rivermc, 26 December 2017 - 17:13.

  • 3





Click to return to top of page in style!