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


#1

Подскажите, пожалуйста, как можно привязать акцию к местоположению или геолокации покупателя?
Например, зачем покупателю из Хабаровска показывать на странице оформления заказа, что у него есть бонус в виде бесплатной курьерской доставки в пределах МКАД ?
Screenshot_42

Может это можно как то отключить для других регионов и показывать только для Москвы?


#2

как вариант сделать такую промоакцию


#3

Надо расширить схему акций.

В app/schemas/promotions/schema.php после кода:

$schema['conditions']['state'] = array(
    'operators' => array ('eq', 'neq', 'in', 'nin'),
    'type' => 'input',
    'field' => '@cart.user_data.s_state',
    'zones' => array('cart')
);

Вставьте:

$schema['conditions']['city'] = array(
    'operators' => array ('eq', 'neq', 'in', 'nin'),
    'type' => 'input',
    'field' => '@cart.user_data.s_city',
    'zones' => array('cart')
);

После этого, в условиях акции появится новый параметр, в котором можно указать город:

Языковую переменную параметру можно добавить через Администрирование - Языки - Переводы.


#4

Спасибо. Помогло.


#5

А это не слетит при следующем обновлении?


#6

А это не слетит при следующем обновлении?

Вряд ли, акции не обновляют уже давно, но можно перестраховаться и сделать через модуль.

Включите модуль “Мои изменения”, затем создайте файл schema.post.php в папке /app/addons/my_changes/schemas/promotions (отсутствующие папки тоже надо создать) и вставьте в файл:

<?php
$schema['conditions']['city'] = array(
	'operators' => array ('eq', 'neq', 'in', 'nin'),
	'type' => 'input',
	'field' => '@cart.user_data.s_city',
	'zones' => array('cart')
);

return $schema;

Почистите кэш.

С таким алгоритмом точно не слетит, если будет обновление.


#7

Спасибо. Попробую.
Но первый способ кажется более простым.


#8

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


#9

Согласен.
Посмотрел, такой способ ещё для Питера подойдёт и, как ни странно, для Севастополя.


#10

Зачем, если из коробки этот функционал уже имеется?


#11

У меня последняя версия. Возможности настроить акцию для города не вижу в списке условий.
Например нужна акция для города в московской области (не для всей области, а для города).
Как сделать из коробки?


#12

@albinoz выше уже написал как сделать. Нужно расширить схему


#13

Это я понял, но @ecomlabs написал ,что это из коробки возможно стало. Вот и хочу узнать как. Коробочный вариант предпочтительнее всегда ели он есть и работает как надо.


#14

Возможно, имелся ввиду индекс как условие города?


#15

Возможно, но с индексом неудобно. У меня в чекауте например индекс совсем убран, он не нужен


#16

Среди условий нет выбора города для акции.

image

Для Москвы и Питера можно подставить код и акция будет работать для города, но для других городов это не подойдет. Например, у Краснодара код KDA и такой же код у всех остальных населенных пунктов региона – поэтому акция будет работать только на весь регион, что и логично.

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


#17

А языковую переменную можно через модуль добавить для параметра?


#18

У нас в подмосковном городе 12 почтовых отделейний и 12 индексов соответственно - ненадобавляешься )
поэтому спасибо @albinoz - поставил в закладки


#19

Надо загрузить файл с расширением .pо, в котором прописаны переводы. Так как используется модуль “Мои изменения”, то my_changes.po уже существует.
Я добавил в нем перевод для promotion_cond_city; файл устанавливается через “Языки - Языки”, нажимаете шестеренка у нужного языка, выбираете “Обновить переводы” и загружаете файл.

my_changes.zip (744 Байта)

Но гораздо проще и лучше перевести переменную через “Языки - Переводы”.


#20

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