В целом может, но только если у вас на сайте это(регистрация по номеру) реализовано уже.
У нас именно так
Повторный заказ без входа на сайт
Файл app/addons/my_changes/func.php
<?php
use Tygh\Registry;
use Tygh\Navigation\LastView;
use Tygh\Http;
function fn_my_changes_place_order($order_id, $action, $order_status, $cart, $auth)
{
if($order_id != false){
$email = $cart['user_data']['email'] ? $cart['user_data']['email'] : $cart['user_data']['s_email'];
$user_id = db_get_field("SELECT user_id FROM ?:users WHERE email= ?s", $email);
if($user_id != false){
db_query('UPDATE ?:orders SET user_id = ?i WHERE order_id = ?i', $user_id, $order_id);
}
}
}
function fn_my_changes_is_user_exists_post($user_id, $user_data, &$is_exist){
if(Registry::get(‘runtime.controller’) == ‘checkout’ && Registry::get(‘runtime.mode’) != ‘create_profile’){
$is_exist = false;
}
}
Файл app/addons/my_changes/init.php
<?php
use Tygh\Registry;
use Tygh\Navigation\LastView;
use Tygh\Http;
if (!defined('BOOTSTRAP')) { die('Access denied'); }
fn_register_hooks(
'place_order',
'is_user_exists_post'
);
К сожалению, все еще показывается надпись, что пользователь уже зарегистрирован, и оформление заказа не продолжается.
Подскажите, пожалуйста, что может быть не так.
Чтоб по телефону тоже шла проверка, надо добавить к коду:
if($order_id != false){
$phone = $cart['user_data']['s_phone'] ? $cart['user_data']['s_phone'] : $cart['user_data']['s_phone'];
$user_id = db_get_field("SELECT user_id FROM ?:users WHERE phone= ?s", $phone);
if($user_id != false){
db_query("UPDATE ?:orders SET user_id = ?i WHERE order_id = ?i", $user_id, $order_id);
}
}
Не обязательно должна быть регистрация по телефону, кстати.
Тестил способ, привязывает заказ к учетке, даже если покупатель указал другой email, но телефон соответствует.
И самое главное, желательно маска телефона на сайте. Потому что если телефон в базе у учетки +79991234567, а покупатель в заказе укажет +7(999)123-45-67, то заказ не привяжется.
А в этом куске:
function fn_my_changes_is_user_exists_post($user_id, $user_data, &$is_exist){
if(Registry::get(‘runtime.controller’) == ‘checkout’ && Registry::get(‘runtime.mode’) != ‘create_profile’){
$is_exist = false;
}
}
Кавычки у вас правильные?
Маску и без модуля можно сделать. Через js или небольшую правку шаблона.
Кому как нравится.
По вопросу размещения заказов без авторизации.
Отличное решение есть у Amazon. При вводе неверного пароля на почту отправляется одноразовый пароль (6 цифр).
Отличное решение, если человек не может вспомнить пароль
А это вообще работает на каком чекауте и теме? У меня на быстром бета чекауте все равно выводит
Под самым первым вы что имеете в виду?
У нас, к примеру, мультивитринность и разная база пользователей по магазинам. Если покупатель ранее регистрировался на витрине 1, но разместил заказ с витрины 2, то он привяжется к витрине 1, что в принципе ожидаемо, так как табличка users одна.
Можно ли как-то модифицировать функционал с привязкой по companyid?
если в карточке товара кликнуть на покупателя то он цепляется к самой первой учетной записи списка покупателей
Оформление заказов Checkout
В новом чекауте если заполнено поле email, то кнопка “оформить заказ” становится неактивна. Если поле имейл не заполнять, то заказ оформляется.
Привет всем, прочитал всю ветку.
Так и не понял где полный рабочий код.? Поделитесь будьте добры)