Повторный заказ без входа на сайт


#17

В целом может, но только если у вас на сайте это(регистрация по номеру) реализовано уже.
У нас именно так


#18

Файл 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'
);

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


#19

Ошиблись с файлом)
снизу должен быть init.php
Может и сделано у вас так?


#20

Чтоб по телефону тоже шла проверка, надо добавить к коду:

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, то заказ не привяжется.


#21

А в этом куске:

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;
}
}

Кавычки у вас правильные?


#22

Спасибо большое, работает.


#23

В смысле у вас уже реализована регистрация по номеру?


#24

Именно


#25

Это маской от AB решается. Просто запрешаете вводить вводить всякие символы и все.


#26

Маску и без модуля можно сделать. Через js или небольшую правку шаблона.
Кому как нравится.


#27

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


#28

А это вообще работает на каком чекауте и теме? У меня на быстром бета чекауте все равно выводит


#29

Что-то у меня такая ерунда в самом верху вылазит


#30

В начале файла нету <?php
А должно быть)))


#32

у кого работает, проверьте, не цепляется ли к учетной записи самый первый аккаунт?


#33

Под самым первым вы что имеете в виду?

У нас, к примеру, мультивитринность и разная база пользователей по магазинам. Если покупатель ранее регистрировался на витрине 1, но разместил заказ с витрины 2, то он привяжется к витрине 1, что в принципе ожидаемо, так как табличка users одна.

Можно ли как-то модифицировать функционал с привязкой по companyid?


#34

если в карточке товара кликнуть на покупателя то он цепляется к самой первой учетной записи списка покупателей


Оформление заказов Checkout
#35

В новом чекауте если заполнено поле email, то кнопка “оформить заказ” становится неактивна. Если поле имейл не заполнять, то заказ оформляется.


#36

fn_login_user($user_id);
Может она что даст вам?
Есть такая функция…


#37

Привет всем, прочитал всю ветку.

Так и не понял где полный рабочий код.? Поделитесь будьте добры)