Перейти к содержанию
Форум поддержки пользователей VamShop

Шаги оформления заказа


Рекомендуемые сообщения

Здравствуйте! Ситуация такая, есть 3 основных города, где налажены определенные способы доставки, в другие города - ПОЧТА России. В связи с этим когда человек оформляет заказ ему выводится абсолютно не нужная информация о доставке в другие города.

1. Возможно ли при нажатии на "Оформить заказ" направляло на страницу с выбором города, например:

( ) Санкт-Петербург

( ) Москва

( ) Сосновый Бор

( ) Другой город

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

2. Или может возможно как-то сделать чтобы магазин "на лету" подхватывал город из аккаунта покупателя и направлял на страницу доставки "заточеную" под его город (все пользователи зарегины)?

3. Или возможно ли, подхватив данные о городе из аккаунта пользователя, отфильтровать не нужные способы доставки?

Подскажите кто как реализовывал подобное. Очень хочется лишить шаги оформления заказа не нужной информацией.

Так же интересует, возможно ли как-то сделать способы оплаты зависимыми от способов доставки? ----- ТУТ Я РАЗОБРАЛСЯ! ) http://сайт.ru/admin/ship2pay.php

Ссылка на сообщение
Поделиться на другие сайты

1. Город указывается при регистрации, зачем два раза одно и тоже спрашивать. Нужно просто модули доставки не показывать не нужные, в зависимости от города.

2. Он и так подхватывает, но по умолчанию не выключаются модули доставки от города, нужно дописывать условия в модули доставки, что б лишнее убиралось.

Ссылка на сообщение
Поделиться на другие сайты

2. Он и так подхватывает, но по умолчанию не выключаются модули доставки от города, нужно дописывать условия в модули доставки, что б лишнее убиралось.

Ух, здорово! Я предполагал что можно.... )

А как условия дописать? Что-то вроде этого? (это я успешно проделываал;)

Если не сложно, подскажите пожалуйста, каким образом это можно реализовать на примере какого-нибудь города?

Например существует способ доставки А, Б, В. Для города Санкт-Петербург доступен только способ "Б".

Может даже решение в FAQ добавить?

Ссылка на сообщение
Поделиться на другие сайты

Наверное как-то так:


        if ($order->delivery['city'] == 'Москва') {
          $this->enabled = false;
        }
[/code]

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

Ссылка на сообщение
Поделиться на другие сайты

Наверное как-то так:


        if ($order->delivery['city'] == 'Москва') {
          $this->enabled = false;
        }
[/code] Огромное спасибо! чуть потыкал и заработало!!! Скажите пожалуйста ничего страшного что я в строке
[code] if ($order->delivery['city'] == 'Москва') {
убрал одно "=" и получилось вот так

        if ($order->delivery['city'] = 'Москва') {
          $this->enabled = false;
        }
[/code]

Просто если второй знак "=" не убрать, то условие не работает. В PHP я не спец, синтаксис знаю слабо.

Ссылка на сообщение
Поделиться на другие сайты

Скажите пожалуйста ничего страшного что я в строке

 if ($order->delivery['city'] == 'Москва') {
убрал одно "=" и получилось вот так

        if ($order->delivery['city'] = 'Москва') {
          $this->enabled = false;
        }
[/code]

Просто если второй знак "=" не убрать, то условие не работает.

Конечно ничего страшного - Вы просто операцию сравнения заменили на операцию присваивания. Теперь $order->delivery['city'] всегда равен 'Москва'. А так всё нормально, всё в порядке.

P.S. По теме - http://www.e-xecutive.ru/community/life/1441792/

Ссылка на сообщение
Поделиться на другие сайты

Конечно ничего страшного - Вы просто операцию сравнения заменили на операцию присваивания. Теперь $order->delivery['city'] всегда равен 'Москва'. А так всё нормально, всё в порядке.

P.S. По теме - http://www.e-xecutive.ru/community/life/1441792/

Так можно мне с таким кодом работать или нет?

Если нет, то подскажите пожалуйста, как быть? Как условие прописать?

Ссылка на сообщение
Поделиться на другие сайты

Нет конечно. Я же объяснил разницу и последствия.

Нужно использовать тот код, который дал Саша. У Вас, скорее всего, не получилось потому что файл не в кодировке utf-8 сохранён. Поэтому Ваша 'Москва' не соответствовала Москве из заказа. Только нужно сравнивать в одном регистре:

if (mb_strtolower($order->delivery['city']) == 'москва') {

Вообще, определять по контексту не правильно. Пример выше всё равно не сработает для заказов с городом доставки Масква, Мск, Маскова, Морква и т.д. И это для Москвы столько вариантов, а уж для Санкт-Петербурга с его количеством букв - так это вообще беда :( Учитывая сегодняшнее пренебрежение к родному языку вероятность возникновения такой ситуации весьма высока.

В случае Москвы и Санкт-Петербурга ситуация упрощается, т.к. город совпадает с регионом.

Для остальных городов, чтобы избежать неоднозначности нужно использовать формализованные данные, как в случае с регионами - дать на выбор. При регистрации или смене адреса выбирать город из списка. Или при оформлении предложить выбрать город, если автоматом не определили и "заточенные" города из региона доставки. Или придумать "свой" регион, например "Ленинградская обл. г.Сосновый Бор".

Ещё конечно можно по почтовому индексу однозначно определить и регион и область и город и район города. Но это совсем другая история.

Ссылка на сообщение
Поделиться на другие сайты

pr0fessor

или может не туда код вставили!?

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

Александр, вставлял все верно. Ваш код работает, условие выполняется. Действительно все дело было в кодировке.

Изменил ваш код, согласно совета ABerezin. Так же все прекрасно работает. За код спасибо!

Ещё конечно можно по почтовому индексу однозначно определить и регион и область и город и район города. Но это совсем другая история.

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

Ссылка на сообщение
Поделиться на другие сайты

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

Как я уже говорил, это совсем другая история.

Качаем Эталонный справочник индексов объектов почтовой связи, распаковываем, преобразуем из формата dbf и грузим в mySQL. После это можно будет по индексу определить город, область, регион.

Ссылка на сообщение
Поделиться на другие сайты

Наверное как-то так:


        if ($order->delivery['city'] == 'Москва') {
          $this->enabled = false;
        }
[/code]

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

Блиин, начал втыкать код куда надо... все ОК, работает. Но тут появляется другая проблемка, приходится много вписывать условий и когда человек не является жителем тех или иных городов ему один черт выводиться весь огромный список доставки...

Подскажите пожалуйста, можно ли как-то похожим способом не отключать модули, а наоборот ВКЛЮЧАТЬ!? Я пробовал с кодом побаловаться... но как-то безрезультатно :(

Т.е. для города Москва показать\включить модуль, в противном случае выключить\скрыть.

p.s. думал может изначально выключить модуль в Админке, а кодом его подключить... НО как тогда указать стоимость доставки.... так и не понял.

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

Т.е. включение модуля по условия невозможно? Не совсем понял ответ.

Ссылка на сообщение
Поделиться на другие сайты

Невозможно.

Во всяком случае я не знаю как, да и не понятно, зачем.

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

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

А вы можете подсказать есть ли в синтаксисе PHP какое либо выражение или знак "НЕРАВНО\НЕ ЯВЛЯЕТСЯ" :) т.е. возможен ли такой код:

if (mb_strtolower($order->delivery['city']) НЕРАВНО 'москва') {
$this->enabled = false;
}[/code]

Смысл кода такой: если город доставки не является Москвой - вырубить модуль...

p.s. ЁПРСТ ;) Я тут наткнулся на установку Географических зон в модулях.... это случайно не то что я так давно ищу?

Ссылка на сообщение
Поделиться на другие сайты

Так если он не увидит подходящего именно ему варианта - он тоже покинет страницу.

Вот так например !=

Зоны ограничивают модули доставки по региону, вот тут про них написан, читайте только про зону, не про ставку налога - http://vamshop.ru/manual/catalog.html#id2588473

Ссылка на сообщение
Поделиться на другие сайты

Вот так например !=

Извиняюсь за назойливость, но один вопрос не вылазит из головы :)

Такой код возможен?

if (mb_strtolower($order->delivery['city']) != 'москва') {
$this->enabled = false;
}[/code]

Я пробовал, но не получается, как только что-то подобное втыкаю, пропадает модуль из списка Выбора доставки. Может есть какие-то вариации задания условия "НЕРАВНО"?

Ссылка на сообщение
Поделиться на другие сайты

Возможен.

Но наверное у Вас какая-то ошибка.

Для начала посмотрите, чему вообще равно $order->delivery['city'], выведите через echo $order->delivery['city']; , в примеру.

Ссылка на сообщение
Поделиться на другие сайты

Возможен.

Но наверное у Вас какая-то ошибка.

Для начала посмотрите, чему вообще равно $order->delivery['city'], выведите через echo $order->delivery['city']; , в примеру.

Все заработало! Все что хотел сделать создавая этот топик - все реализовал! Спасибо ;)

Ошибка у меня была такая, редактировал документы прям на хостинге в веб-интерфейсе (так вроде быстро казалось и на ФТП не надо лезть), и тот при сохранении менял кодировку на ANSI отсюда все проблемы.

Ссылка на сообщение
Поделиться на другие сайты
  • 4 months later...

Александр, немного не до конца я в прошлый раз задачу решил, подскажите пожалуйста, почему такой код:


if ($order->delivery['city'] == 'Москва') {
$this->enabled = false;
}
[/CODE] не отключает модули доставки связанные с почтой (Почта России, Наложенный платеж). У меня задача отключить (спрятать) доставку Почтой опираясь или на город или на индекс. Нашел в коде интересные значения :) что-то вроде zone_id и iso_code_2 и просто id, является ли из этого что-то индексом? Возможна ли такое условие (или что-то вроде этого):
[CODE]
if (mb_strtolower($order->delivery['zone_id']) == '188540') {
$this->enabled = false;
}

Я пробовал что-то не получилось :(

или как еще можно отключить модуль почты в моем случае?

Ссылка на сообщение
Поделиться на другие сайты

чтобы работало в почте россии надо изменить файл russianpostprepay.php и russianpostpf.php

а конкретнее убрать определение глобальной переменной "global $order" ..... из функции quot

и добавить "global $order;" в функию russianpostpf или russianpostprepay

сам код для russianpostprepay добавить после $this->enabled = ....;

//проверяем и отключаем для своих городов

$ifcity = mb_strtolower($order->delivery['city'],'UTF-8');

$mycity = array("красноярск","иркутск","абакан","ужур","ачинск","назарово","железногорск","зеленогорск","канск","уяр","дивногорск", "енисейск", "лесосибирск");

in_array($ifcity, $mycity) ? $this->enabled = false : $this->enabled = true;

//eof

а вот шапка функции russianpostprepay

function russianpostprepay()

{

global $order;

$this->code.....

аналогично проделать с russianpostpf

решение перенести в FAQ

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...