Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 1.5.1.3 (backend): улучшение поиска в фильтрах - не только с начала строки или по полному совпадению (имя, email, IP, опции, атрибуты)

27 февраля 2012 г. Ruslan Brest Просмотров: 5711 RSS 3
Howto » OpenCart
,

Админка: улучшение поиска в фильтрах - не только с начала строки или по полному совпадению (имя, email, IP, опции, атрибуты).

Для тех, кто хочет искать не только по имени, но и фамилии покупателей, а также по части IP-адреса и почтовому домену, и т.д. и и т.п.

commit 860f41a57c7506331c4fef9d50d3ef8cb65ffa22
Author: Ruslan Brest <rb@labtodo.com>
Date:   Tue Feb 21 19:12:04 2012 +0200
    [!] backend: улучшение поиска в фильтрах - не только с начала строки или по полному совпадению (имя, email, IP, опции, атрибуты)
diff --git a/upload/admin/model/catalog/option.php b/upload/admin/model/catalog/option.php
index a5b65f8..29f25dc 100644
--- a/upload/admin/model/catalog/option.php
+++ b/upload/admin/model/catalog/option.php
@@ -72,7 +72,7 @@ class ModelCatalogOption extends Model {
 		$sql = "SELECT * FROM `" . DB_PREFIX . "option` o LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE od.language_id = '" . (int)$this->config->get('config_language_id') . "'";
 
 		if (isset($data['filter_name']) && !is_null($data['filter_name'])) {
-			$sql .= " AND LCASE(od.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
+			$sql .= " AND LCASE(od.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
 		}
 
 		$sort_data = array(
diff --git a/upload/admin/model/catalog/product.php b/upload/admin/model/catalog/product.php
index f11247a..b83b224 100644
--- a/upload/admin/model/catalog/product.php
+++ b/upload/admin/model/catalog/product.php
@@ -346,11 +346,11 @@ class ModelCatalogProduct extends Model {
 			$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
 
 			if (!empty($data['filter_name'])) {
-				$sql .= " AND LCASE(pd.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
+				$sql .= " AND LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
 			}
 
 			if (!empty($data['filter_model'])) {
-				$sql .= " AND LCASE(p.model) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_model'])) . "%'";
+				$sql .= " AND LCASE(p.model) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_model'])) . "%'";
 			}
 			if (!empty($data['filter_sku'])) {
 				$sql .= " AND LCASE(p.sku) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_sku'])) . "%'";
diff --git a/upload/admin/model/sale/affiliate.php b/upload/admin/model/sale/affiliate.php
index 2d3809d..da3911a 100644
--- a/upload/admin/model/sale/affiliate.php
+++ b/upload/admin/model/sale/affiliate.php
@@ -35,11 +35,11 @@ class ModelSaleAffiliate extends Model {
 		$implode = array();
 
 		if (!empty($data['filter_name'])) {
-			$implode[] = "LCASE(CONCAT(a.firstname, ' ', a.lastname)) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
+			$implode[] = "LCASE(CONCAT(a.firstname, ' ', a.lastname)) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
 		}
 
 		if (!empty($data['filter_email'])) {
-			$implode[] = "a.email = '" . $this->db->escape($data['filter_email']) . "'";
+			$implode[] = "a.email = '%" . $this->db->escape($data['filter_email']) . "'";
 		}
 
 		if (!empty($data['filter_code'])) {
diff --git a/upload/admin/model/sale/customer.php b/upload/admin/model/sale/customer.php
index 495d086..1c742b5 100644
--- a/upload/admin/model/sale/customer.php
+++ b/upload/admin/model/sale/customer.php
@@ -77,11 +77,11 @@ class ModelSaleCustomer extends Model {
 		$implode = array();
 
 		if (!empty($data['filter_name'])) {
-			$implode[] = "LCASE(CONCAT(c.firstname, ' ', c.lastname)) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
+			$implode[] = "LCASE(CONCAT(c.firstname, ' ', c.lastname)) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'";
 		}
 
 		if (!empty($data['filter_email'])) {
-			$implode[] = "LCASE(c.email) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_email'])) . "%'";
+			$implode[] = "LCASE(c.email) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_email'])) . "%'";
 		}
 
 		if (!empty($data['filter_customer_group_id'])) {
@@ -97,7 +97,7 @@ class ModelSaleCustomer extends Model {
 		}
 
 		if (!empty($data['filter_ip'])) {
-			$implode[] = "c.customer_id IN (SELECT customer_id FROM " . DB_PREFIX . "customer_ip WHERE ip = '" . $this->db->escape($data['filter_ip']) . "')";
+			$implode[] = "c.customer_id IN (SELECT customer_id FROM " . DB_PREFIX . "customer_ip WHERE ip LIKE '%" . $this->db->escape($data['filter_ip']) . "%')";
 		}
 
 		if (!empty($data['filter_date_added'])) {

oc1513-backend-better-filter-search.diff_.zip 10

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Более 1000 готовых шаблонов Opencart для интернет-магазинов
Комментариев: 3
  1. 2013-01-04 в 22:31:55 | Александр

    Огромное спасибо

  2. 2013-07-06 в 21:09:25 | Валерий

    Очен удобный фильтр стал - огромное спс!!!

  3. 2013-09-08 в 10:01:32 | Максим

    Спасибо, помогло.

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)