Здравствуйте!
Написал собственную службу доставки - работает нормально. Опишу общую логику, чтобы было понятно в чём суть вопроса на примере:
При оформлении заказа пользователь выбирает вариант доставки - курьерская доставка по москве или доставка по мос области.
Стоимость курьерской доставки зависит от наличия лифта и этажа, оба параметра имеют соответствующие инпуты.
Доставка по мос области зависит от километража до МКАД. Инпута под километраж нет, но выводится стоимость каждого километра.
Как реализовал:
1) все расчёты при оформлении сделаны на яваскрипте, изменют стоимость интерактивно и работают независимо от написанной службы доставки - результаты этих расчётов отображаются пользователю на странице для ознакомления и далее никуда не передаются
2) служба доставки имеет 2 профиля для курьерской доставки и доставки по области соответственно. В зависимости от того, какой профиль выбран - скрипт подбирает из $_REQUEST параметры этажа и лифта. Исходя из полученных параметров рассчитывается цена доставки. Результаты этого расчёта и попадают в параметры заказа. Также, за счёт сохранения используемого профиля менеджер в дальнейшем видит, какой вариант доставки был выбран, а не только какова итоговая цена доставки.
Всё работает как надо и расчёты совпадают для клиентского JavaScript и автоматизированной службы. Но теперь появилась проблема - заказчик хочет иметь возможность редактировать некоторые параметры расчёта (стоимость подъёма на этаж, стоимость километра за МКАД и т.п.).
Изначально, когда я писал автоматизированную службу, я задал параметры, отвечающие за стоимость, в том числе и те, которые хочет редактировать заказчик - потому с самой службой проблем нет.
[B]Наконец, вопросы:[/B]
1) Вопрос состоит в том, как увязать воедино пользовательский интерфейс на странице и расчёты внутри службы. Т.е. нужно передать параметры из настроек службы в код страницы, а как это сделать я не могу найти :(
2) Может быть первый вопрос не разрешим и я неправильно воспользовался существующим функционалом - как "налету" запустить расчёт стоимости доставки выбранным вариантом (чтобы стоимость отобразилась ещё до того, как пользователь уже оформил заказ)? По идее можно аяксом отправить форму без параметра "confirmorder" и подменить имеющуюся форму на полученный ответ (есть ведь галочки рассчитывать стоимость доставки сразу), но тогда это будет космический корабль по сложности, так как на деле форма оформления заказа очень сложна, в реальности профилей доставки не 2, а 4, а некоторые части формы скрываются/отображаются в зависимости от введённых данных.. боюсь "подмена" обойдётся очень "дорого".
3) Ну и, наконец вопрос, который для меня так и остался загадкой ещё на этапе реализации автоматизированной службы: при расчёте стоимости доставки функция Calculate может отдать результат "NEXT_STEP", свидетельствующий о том, что нужно перейти на следующий шаг расчёта. Однако я так и не понял, с какой целью это может понадобиться - ведь рекурсию можно и у себя на уровне логики устроить, а параметры, передаваемые в обработчик Calculate, остаются неизменными.
Написал собственную службу доставки - работает нормально. Опишу общую логику, чтобы было понятно в чём суть вопроса на примере:
При оформлении заказа пользователь выбирает вариант доставки - курьерская доставка по москве или доставка по мос области.
Стоимость курьерской доставки зависит от наличия лифта и этажа, оба параметра имеют соответствующие инпуты.
Доставка по мос области зависит от километража до МКАД. Инпута под километраж нет, но выводится стоимость каждого километра.
Как реализовал:
1) все расчёты при оформлении сделаны на яваскрипте, изменют стоимость интерактивно и работают независимо от написанной службы доставки - результаты этих расчётов отображаются пользователю на странице для ознакомления и далее никуда не передаются
2) служба доставки имеет 2 профиля для курьерской доставки и доставки по области соответственно. В зависимости от того, какой профиль выбран - скрипт подбирает из $_REQUEST параметры этажа и лифта. Исходя из полученных параметров рассчитывается цена доставки. Результаты этого расчёта и попадают в параметры заказа. Также, за счёт сохранения используемого профиля менеджер в дальнейшем видит, какой вариант доставки был выбран, а не только какова итоговая цена доставки.
Всё работает как надо и расчёты совпадают для клиентского JavaScript и автоматизированной службы. Но теперь появилась проблема - заказчик хочет иметь возможность редактировать некоторые параметры расчёта (стоимость подъёма на этаж, стоимость километра за МКАД и т.п.).
Изначально, когда я писал автоматизированную службу, я задал параметры, отвечающие за стоимость, в том числе и те, которые хочет редактировать заказчик - потому с самой службой проблем нет.
[B]Наконец, вопросы:[/B]
1) Вопрос состоит в том, как увязать воедино пользовательский интерфейс на странице и расчёты внутри службы. Т.е. нужно передать параметры из настроек службы в код страницы, а как это сделать я не могу найти :(
2) Может быть первый вопрос не разрешим и я неправильно воспользовался существующим функционалом - как "налету" запустить расчёт стоимости доставки выбранным вариантом (чтобы стоимость отобразилась ещё до того, как пользователь уже оформил заказ)? По идее можно аяксом отправить форму без параметра "confirmorder" и подменить имеющуюся форму на полученный ответ (есть ведь галочки рассчитывать стоимость доставки сразу), но тогда это будет космический корабль по сложности, так как на деле форма оформления заказа очень сложна, в реальности профилей доставки не 2, а 4, а некоторые части формы скрываются/отображаются в зависимости от введённых данных.. боюсь "подмена" обойдётся очень "дорого".
3) Ну и, наконец вопрос, который для меня так и остался загадкой ещё на этапе реализации автоматизированной службы: при расчёте стоимости доставки функция Calculate может отдать результат "NEXT_STEP", свидетельствующий о том, что нужно перейти на следующий шаг расчёта. Однако я так и не понял, с какой целью это может понадобиться - ведь рекурсию можно и у себя на уровне логики устроить, а параметры, передаваемые в обработчик Calculate, остаются неизменными.