pr0fessor 0 Опубликовано 2 мая, 2011 Жалоба Share Опубликовано 2 мая, 2011 Здравствуйте! Ситуация такая, есть 3 основных города, где налажены определенные способы доставки, в другие города - ПОЧТА России. В связи с этим когда человек оформляет заказ ему выводится абсолютно не нужная информация о доставке в другие города. 1. Возможно ли при нажатии на "Оформить заказ" направляло на страницу с выбором города, например: ( ) Санкт-Петербург ( ) Москва ( ) Сосновый Бор ( ) Другой город После того как выбираешь свой город, человек жмет на "Продолжить" и его направляет на страницу выбора доставки "заточеную" под его город. И затем как обычно Оплата, итп... 2. Или может возможно как-то сделать чтобы магазин "на лету" подхватывал город из аккаунта покупателя и направлял на страницу доставки "заточеную" под его город (все пользователи зарегины)? 3. Или возможно ли, подхватив данные о городе из аккаунта пользователя, отфильтровать не нужные способы доставки? Подскажите кто как реализовывал подобное. Очень хочется лишить шаги оформления заказа не нужной информацией. Так же интересует, возможно ли как-то сделать способы оплаты зависимыми от способов доставки? ----- ТУТ Я РАЗОБРАЛСЯ! ) http://сайт.ru/admin/ship2pay.php Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 3 мая, 2011 Жалоба Share Опубликовано 3 мая, 2011 1. Город указывается при регистрации, зачем два раза одно и тоже спрашивать. Нужно просто модули доставки не показывать не нужные, в зависимости от города. 2. Он и так подхватывает, но по умолчанию не выключаются модули доставки от города, нужно дописывать условия в модули доставки, что б лишнее убиралось. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 3 мая, 2011 Автор Жалоба Share Опубликовано 3 мая, 2011 2. Он и так подхватывает, но по умолчанию не выключаются модули доставки от города, нужно дописывать условия в модули доставки, что б лишнее убиралось. Ух, здорово! Я предполагал что можно.... ) А как условия дописать? Что-то вроде этого? (это я успешно проделываал;) Если не сложно, подскажите пожалуйста, каким образом это можно реализовать на примере какого-нибудь города? Например существует способ доставки А, Б, В. Для города Санкт-Петербург доступен только способ "Б". Может даже решение в FAQ добавить? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 3 мая, 2011 Жалоба Share Опубликовано 3 мая, 2011 Наверное как-то так: if ($order->delivery['city'] == 'Москва') { $this->enabled = false; }[/code]Тогда, по идее, не будет показываться модуль, если у покупателя указан город Москва. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 3 мая, 2011 Автор Жалоба Share Опубликовано 3 мая, 2011 Наверное как-то так: if ($order->delivery['city'] == 'Москва') { $this->enabled = false; }[/code] Огромное спасибо! чуть потыкал и заработало!!! Скажите пожалуйста ничего страшного что я в строке [code] if ($order->delivery['city'] == 'Москва') { убрал одно "=" и получилось вот так if ($order->delivery['city'] = 'Москва') { $this->enabled = false; }[/code]Просто если второй знак "=" не убрать, то условие не работает. В PHP я не спец, синтаксис знаю слабо. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 3 мая, 2011 Жалоба Share Опубликовано 3 мая, 2011 Нормально. Я тоже не спец. Ссылка на сообщение Поделиться на другие сайты
ABerezin 0 Опубликовано 3 мая, 2011 Жалоба Share Опубликовано 3 мая, 2011 Скажите пожалуйста ничего страшного что я в строке 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/ Ссылка на сообщение Поделиться на другие сайты
YuraS 4 Опубликовано 3 мая, 2011 Жалоба Share Опубликовано 3 мая, 2011 По теме - http://www.e-xecutive.ru/community/life/1441792/ там нет ничего для трепанации черепа :D Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 4 мая, 2011 Автор Жалоба Share Опубликовано 4 мая, 2011 Конечно ничего страшного - Вы просто операцию сравнения заменили на операцию присваивания. Теперь $order->delivery['city'] всегда равен 'Москва'. А так всё нормально, всё в порядке. P.S. По теме - http://www.e-xecutive.ru/community/life/1441792/ Так можно мне с таким кодом работать или нет? Если нет, то подскажите пожалуйста, как быть? Как условие прописать? Ссылка на сообщение Поделиться на другие сайты
ABerezin 0 Опубликовано 4 мая, 2011 Жалоба Share Опубликовано 4 мая, 2011 Нет конечно. Я же объяснил разницу и последствия. Нужно использовать тот код, который дал Саша. У Вас, скорее всего, не получилось потому что файл не в кодировке utf-8 сохранён. Поэтому Ваша 'Москва' не соответствовала Москве из заказа. Только нужно сравнивать в одном регистре: if (mb_strtolower($order->delivery['city']) == 'москва') { Вообще, определять по контексту не правильно. Пример выше всё равно не сработает для заказов с городом доставки Масква, Мск, Маскова, Морква и т.д. И это для Москвы столько вариантов, а уж для Санкт-Петербурга с его количеством букв - так это вообще беда :( Учитывая сегодняшнее пренебрежение к родному языку вероятность возникновения такой ситуации весьма высока. В случае Москвы и Санкт-Петербурга ситуация упрощается, т.к. город совпадает с регионом. Для остальных городов, чтобы избежать неоднозначности нужно использовать формализованные данные, как в случае с регионами - дать на выбор. При регистрации или смене адреса выбирать город из списка. Или при оформлении предложить выбрать город, если автоматом не определили и "заточенные" города из региона доставки. Или придумать "свой" регион, например "Ленинградская обл. г.Сосновый Бор". Ещё конечно можно по почтовому индексу однозначно определить и регион и область и город и район города. Но это совсем другая история. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 4 мая, 2011 Жалоба Share Опубликовано 4 мая, 2011 pr0fessor или может не туда код вставили!? Вы б показали, куда именно вставляете. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 6 мая, 2011 Автор Жалоба Share Опубликовано 6 мая, 2011 pr0fessor или может не туда код вставили!? Вы б показали, куда именно вставляете. Александр, вставлял все верно. Ваш код работает, условие выполняется. Действительно все дело было в кодировке. Изменил ваш код, согласно совета ABerezin. Так же все прекрасно работает. За код спасибо! Ещё конечно можно по почтовому индексу однозначно определить и регион и область и город и район города. Но это совсем другая история. А можете подсказать как задавать условия используя почтовый индекс? Интересует определение города, в моем случае все тех же Москва, СПб, Сосновый Бор. Ссылка на сообщение Поделиться на другие сайты
ABerezin 0 Опубликовано 6 мая, 2011 Жалоба Share Опубликовано 6 мая, 2011 А можете подсказать как задавать условия используя почтовый индекс? Интересует определение города, в моем случае все тех же Москва, СПб, Сосновый Бор. Как я уже говорил, это совсем другая история. Качаем Эталонный справочник индексов объектов почтовой связи, распаковываем, преобразуем из формата dbf и грузим в mySQL. После это можно будет по индексу определить город, область, регион. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 10 мая, 2011 Автор Жалоба Share Опубликовано 10 мая, 2011 Наверное как-то так: if ($order->delivery['city'] == 'Москва') { $this->enabled = false; } [/code] Тогда, по идее, не будет показываться модуль, если у покупателя указан город Москва. Блиин, начал втыкать код куда надо... все ОК, работает. Но тут появляется другая проблемка, приходится много вписывать условий и когда человек не является жителем тех или иных городов ему один черт выводиться весь огромный список доставки... Подскажите пожалуйста, можно ли как-то похожим способом не отключать модули, а наоборот ВКЛЮЧАТЬ!? Я пробовал с кодом побаловаться... но как-то безрезультатно :( Т.е. для города Москва показать\включить модуль, в противном случае выключить\скрыть. p.s. думал может изначально выключить модуль в Админке, а кодом его подключить... НО как тогда указать стоимость доставки.... так и не понял. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 10 мая, 2011 Жалоба Share Опубликовано 10 мая, 2011 Нет, включается модуль в Админке - Модули - Доставка, при установке записываются данные в базу, его настройки. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 10 мая, 2011 Автор Жалоба Share Опубликовано 10 мая, 2011 Нет, включается модуль в Админке - Модули - Доставка, при установке записываются данные в базу, его настройки. Т.е. включение модуля по условия невозможно? Не совсем понял ответ. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 10 мая, 2011 Жалоба Share Опубликовано 10 мая, 2011 Невозможно. Во всяком случае я не знаю как, да и не понятно, зачем. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 10 мая, 2011 Автор Жалоба Share Опубликовано 10 мая, 2011 Невозможно. Во всяком случае я не знаю как, да и не понятно, зачем. Ну я просто считаю так: чем меньше вариантов выбора для пользователя, тем меньше вероятности что он запутается и покинет страницу. В любом случае, спасибо. В целом потихоньку приближаюсь к тому что хочу видеть на своем сайте. А вы можете подсказать есть ли в синтаксисе PHP какое либо выражение или знак "НЕРАВНО\НЕ ЯВЛЯЕТСЯ" :) т.е. возможен ли такой код: if (mb_strtolower($order->delivery['city']) НЕРАВНО 'москва') { $this->enabled = false; }[/code] Смысл кода такой: если город доставки не является Москвой - вырубить модуль... p.s. ЁПРСТ ;) Я тут наткнулся на установку Географических зон в модулях.... это случайно не то что я так давно ищу? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 мая, 2011 Жалоба Share Опубликовано 11 мая, 2011 Так если он не увидит подходящего именно ему варианта - он тоже покинет страницу. Вот так например != Зоны ограничивают модули доставки по региону, вот тут про них написан, читайте только про зону, не про ставку налога - http://vamshop.ru/manual/catalog.html#id2588473 Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 12 мая, 2011 Автор Жалоба Share Опубликовано 12 мая, 2011 Вот так например != Извиняюсь за назойливость, но один вопрос не вылазит из головы :) Такой код возможен? if (mb_strtolower($order->delivery['city']) != 'москва') { $this->enabled = false; }[/code] Я пробовал, но не получается, как только что-то подобное втыкаю, пропадает модуль из списка Выбора доставки. Может есть какие-то вариации задания условия "НЕРАВНО"? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 12 мая, 2011 Жалоба Share Опубликовано 12 мая, 2011 Возможен. Но наверное у Вас какая-то ошибка. Для начала посмотрите, чему вообще равно $order->delivery['city'], выведите через echo $order->delivery['city']; , в примеру. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 12 мая, 2011 Автор Жалоба Share Опубликовано 12 мая, 2011 Возможен. Но наверное у Вас какая-то ошибка. Для начала посмотрите, чему вообще равно $order->delivery['city'], выведите через echo $order->delivery['city']; , в примеру. Все заработало! Все что хотел сделать создавая этот топик - все реализовал! Спасибо ;) Ошибка у меня была такая, редактировал документы прям на хостинге в веб-интерфейсе (так вроде быстро казалось и на ФТП не надо лезть), и тот при сохранении менял кодировку на ANSI отсюда все проблемы. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 12 мая, 2011 Жалоба Share Опубликовано 12 мая, 2011 Хорошо, что разобрались. Ссылка на сообщение Поделиться на другие сайты
pr0fessor 0 Опубликовано 15 сентября, 2011 Автор Жалоба Share Опубликовано 15 сентября, 2011 Александр, немного не до конца я в прошлый раз задачу решил, подскажите пожалуйста, почему такой код: 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; } Я пробовал что-то не получилось :( или как еще можно отключить модуль почты в моем случае? Ссылка на сообщение Поделиться на другие сайты
tweenpix 0 Опубликовано 16 сентября, 2011 Жалоба Share Опубликовано 16 сентября, 2011 чтобы работало в почте россии надо изменить файл 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 Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения