на странице чекаута я вывожу поля для имени, телефона и емыла покупателя
при оформлении заказа зарегистрированным пользователем в эти поля можно записать значения отличные от хранящихся в учётной записи (например, некто заказывает не себе, а другому некту)
клик в кнопу “оформить заказ” внезапно перезаписывает все три поля профиля о_О
баг ли это али фича недокументированная?
мод place_order контроллера checkout вызывает функцию fn_checkout_place_order из пакета fn.cart
внутри fn_checkout_place_order происходит вызов fn_checkout_update_user_profile
Так для этого и есть же в поля профиля отдельный блок данные по доставке, есть 3 типа данных
Контакты
Данные плательщика
Данные получателя
Если взять импортные сайты amazon там уточняют куда отправить счет и куда доставить товар и причем все это может отличаться от данных аккаунта.
Еще есть полезная вещь разрешить клиентам иметь несколько профилей доставки, если у вас MV активный, это удобно клиент заполняет данные человека и подгружает их когда надо доставить тому человеку.
Но смена профиля там же вроде работает в той секции, нет? Ясно что это велосипед, но cs-cart врядли в ближайшем будущем реализует чтобы этот блок работал на секции адрес доставки, а разработчика у вас видимо нет.
В пн зайдут и скажут, это не баг это фича, и ярлык не подтвержденный.
Перезапись указанных полей профиля со страницы оформления заказа действительно заложена в логику CS-Cart. Т.е. это фича, и поведение в будущей версии мы не меняли.
Но так как эта логика вам не подходит, мы сделали патч с изменениями в fn_checkout_update_user_profile, при которых поля “Email”, “Имя”, “Фамилия” и “Телефон” больше не будут перезаписываться. Этот патч вы можете применить индивидуально для своего маркетплейса.
Логика понятна, с первых дней вставал вопрос, как идентифицировать покупателя в 1С? В итоге придумали свой костыль, основанный на номере телефона, но это не важно. Важно, что если человек изменит имя, фамилию, телефон и почту - это будет другой покупатель. Возможно, в логику надо добавить:
если покупателю разрешено создавать несколько профилей - если покупатель внес изменения в данные для доставки - спрашивать, хочет ли он изменить данные в текущем профиле, создать новый профиль или ничего не делать?
если создание нескольких профилей не разрешено - то просто спросить - перезаписать данные в профиле или нет?
PS Или так: если какое-то поле изменяется и генерирует событие onChange - к форме чере JS добавляется обязательное поле селект - не сохранять, сохранить в старый профиль, создать новый профиль