Перейти к содержимому


Фото
- - - - -

Поиск заказа по телефону и имени в админке

2.1.5 поиск админка

  • Чтобы отвечать, сперва войдите на форум
20 ответов в теме

#1 Enhill

Enhill
  • Пользователь
  • 172 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Оттуда

Опубликовано 21.01.2013 - 23:13

Нынешний поиск умеет искать только по одной выбранной таблице: name, phone и тд.
Запрос, отвечающий за поиск выглядит так:
api/Orders.tpl

$keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');


Вопрос: как изменить структуру запроса, для поиска одновременно по нескольким таблицам, например 'name' и 'phone' ?

UPD:
Cпасибо delprofile !
Заработал поиск и по телефону и по имени с такой конструкцией

$keyword_filter .= $this->db->placehold('AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');
$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');



#2 Only

Only
  • Пользователь
  • 40 сообщений

Опубликовано 21.01.2013 - 23:18

$keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');



#3 Enhill

Enhill
  • Пользователь
  • 172 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Оттуда

Опубликовано 21.01.2013 - 23:37

Спасибо за ответ, но не отрабатывает.
Полный листинг стандартного запроса:

if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
				$keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');
						}



#4 delprofile

delprofile
  • Фрилансер
  • 819 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 22.01.2013 - 02:24

AND o.name LIKE

AND o.name OR o.хрен OR o.член LIKE



#5 Enhill

Enhill
  • Пользователь
  • 172 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Оттуда

Опубликовано 22.01.2013 - 22:44

delprofile Спасибо! Запрос отрабатывает, но не выводит результат.

При такой конструкции:

$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');

при поиске по имени выводит количество найденных заказов, но сами заказы не показывает, а выводит просто все заказы. Если искать по телефону, пишет заказы не найдены.

При такой конструкции:
$keyword_filter .= $this->db->placehold('AND o.name OR o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');

При поиске по телефону пишет что заказы не найдены, но все таки выводит найденные правильно заказы (парадокс). Если искать по имени, то пишет кол-во найденных заказов, но заказов не выводит.



#6 Enhill

Enhill
  • Пользователь
  • 172 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Оттуда

Опубликовано 22.01.2013 - 23:30

Прошу прощения за свои кривые руки. Ещё раз спасибо delprofile
Заработал поиск и по телефону и по имени с такой конструкцией

$keyword_filter .= $this->db->placehold('AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');
$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');



#7 zloydemon

zloydemon
  • Пользователь
  • 49 сообщений

Опубликовано 29.01.2013 - 07:40

Ребят а подскажите куда это вставлять?



#8 Hubble

Hubble
  • Пользователь
  • 37 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 29.01.2013 - 13:08

а если номер клиента будет в формате 050-000-50-50, найдет?



#9 Kosjak76

Kosjak76
  • Модератор
  • 3 845 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 29.01.2013 - 13:11

Проверте, или вы думаете, кто-то особо заморачивался ЮМСи?



#10 Hubble

Hubble
  • Пользователь
  • 37 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 29.01.2013 - 13:24

Если в заказе между цифрами дефис или пробел, то номер не находит



#11 delprofile

delprofile
  • Фрилансер
  • 819 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 29.01.2013 - 13:57

дак чтоб не фанится можно вырезать при добавлении все символы кроме цифорок
(= preg_match вам в помощь



#12 Enhill

Enhill
  • Пользователь
  • 172 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Оттуда

Опубликовано 30.01.2013 - 00:19

Для того, что бы убрать лишние символы из телефона, еще на стадии заказа, добавляем в view/CartView

после
$order->phone       = $this->request->post('phone');
добавим
$order->phone = preg_replace('/[^\d,]+/', '', $order->phone);



#13 JustDavali

JustDavali
  • Пользователь
  • 229 сообщений

Опубликовано 30.01.2013 - 01:18

А я наоборот во всех формах где вводится телефон применил скрипт ввода по маске +7(911)123-34-34



#14 Rash

Rash
  • Пользователь
  • 450 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Russian Federation

Опубликовано 30.01.2013 - 03:37

JustDavali, поделись пожалуйста решением как правильно сделать. спасибо!



#15 JustDavali

JustDavali
  • Пользователь
  • 229 сообщений

Опубликовано 30.01.2013 - 03:42

скрипт jquery.maskedinput-1.3.js
http://www.xiper.net...put-plugin.html



#16 antin

antin
  • Пользователь
  • 47 сообщений

Опубликовано 18.12.2014 - 14:28

Добрый день.

Подскажите где это править? :(



#17 snappk

snappk
  • Пользователь
  • 39 сообщений

Опубликовано 29.11.2018 - 18:23

Подскажите, а как добавить возможность поиска еще и по email, а то при поиске , убираеться с названия почты символ "@" и не хочет работать.

$keyword_filter .= $this->db->placehold('AND o.id OR o.email LIKE "%'.$this->db->escape(trim($keyword)).'%" '); - так не работает.



#18 snappk

snappk
  • Пользователь
  • 39 сообщений

Опубликовано 29.11.2018 - 18:35

Нашел решение сам, в файле api/reguest.php необходимо написать: return strval(preg_replace('/[^\p{L}\p{Nd}\d\@\s_\-\.\%\s]/ui', '', $val));



#19 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 29.11.2018 - 19:15


Нашел решение сам, в файле api/reguest.php необходимо написать: return strval(preg_replace('/[^\p{L}\p{Nd}\d\@\s_\-\.\%\s]/ui', '', $val));


Зря вы реквест трогали...

#20 phukortsin

phukortsin
  • Фрилансер
  • 1 022 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 29.11.2018 - 20:15

Зря вы реквест трогали...

 

Почему зря? Можете привести хоть один недостаток, который возникнет из-за этого решения?







Также с меткой «2.1.5, поиск, админка»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых