Сделать нормальный поиск заказа по номеру телефона

Сделать поиск заказа по номеру телефона, чтобы находился заказ по любым цифрам, входящим в номер. На данный момент необходимо вводить номер полностью, либо если в номере присутствует дефис, то номер не ищет. Например, номер+7(123)456-78-99. Если ввести “78”, то заказ найдется. Если ввести “7899”, то не ищет.

Боюсь что в коробке такое сделать будет действительно не просто - тут требуется допилить логику под конкретную страну в движке, так в массовых решениях не делается.

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

Если не ошибаюсь, до обновления движка эта функция работала

Раньше.в get_orders было
if (isset($params[‘phone’]) && !empty($params[‘phone’])) {
$phone = ‘%’ . $params[‘phone’] . ‘%’;
$condition .= db_quote(
" AND ((REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(?:orders.phone, ’ ', ‘’), ‘-’, ‘’), ‘+’, ‘’), ‘(’, ‘’), ‘)’, ‘’) LIKE ?l)"
. " OR (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(b_phone, ’ ', ‘’), ‘-’, ‘’), ‘+’, ‘’), ‘(’, ‘’), ‘)’, ‘’) LIKE ?l)"
. " OR (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(s_phone, ’ ', ‘’), ‘-’, ‘’), ‘+’, ‘’), ‘(’, ‘’), ‘)’, ‘’) LIKE ?l))",
$phone,
$phone,
$phone
);
}

у вас возможно сейчас иначе просто подправьте под данный формат.

в идеале нужно, чтобы в БД телефоны хранились только цифрами, без каких-либо знаков. тогда и искать будет легче.

2 лайка

В какой версии такая проблема? Проверил на 4.9.3 и на 4.12.2.SP2. Отлично находит и со знаками, и без.

На демо-версии воспроизводится ваша ошибка?

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

1 лайк

У нас 4.13.2 SP1

попробуйте воспроизвести на демо и оформляйте на форуме как баг.

Тех поддержка дала вот такую инфу http://joxi.ru/Rmz0BlgtjaknRA. Странно.

Все верно. Давно писал о том, что номер телефона - это только цифры, а маска - это визуализация данных, и нечего из смешивать. В базе надо хранить только цифры, а все дефисы и скобки - это только для отображения на экране. Ну и поиск. Я тоже никак в толк не возьму, в чем проблема использовать в запросе при поиске не а=в, а LIKE %… % ?

2 лайка

Да ежики в кляре, я же выше написал запрос который был раньше и ищет по базе не важно есть там знаки или нет, все это убирается

1 лайк

Сделали, не помогло.

Скорее всего у вас там какие-то проблемы с внешним модулем, так как в последних версиях все так же ищет без проблем по цифрам в номерах с дефисами.