Opencart: Улучшенный поиск при вводе атрибутов к товарам (не только по началу слова)

Opencart: Улучшенный поиск при вводе атрибутов к товарам (не только по началу слова) Не очень удобное решение, добавлять атрибут к товару выбором из выпадающего списка, который выпадает при начале введения названия атрибута. Если я не помню точное название атрибута, я не смогу начать его писать и он не выпадет, надо лезть список атрибов

Можно существенно облегчить себе ввод атрибутов, внеся совсем небольшое исправление, которое даст:

  • поиск любого вхождения введённых символов, а не только с начала названий атрибутов;
  • при вводе "." в пустое поле показывается полный список атрибутов, остаётся только выбрать необходимый.

В admin/model/catalog/attribute.php:

public function getAttributes($data = array()) {
$sql = "SELECT *, (SELECT agd.name FROM " . DB_PREFIX . "attribute_group_description agd WHERE agd.attribute_group_id = a.attribute_group_id AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS attribute_group FROM " . DB_PREFIX . "attribute a LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE ad.language_id = '" . (int)$this->config->get('config_language_id') . "'";

if (isset($data['filter_name']) && !is_null($data['filter_name'])) {
//$sql .= " AND LCASE(ad.name) LIKE '" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'";
if( $data['filter_name'] == '.' )
$sql .= " AND LCASE(ad.name) LIKE '%'";
else
$sql .= " AND LCASE(ad.name) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'";
} 
...
 

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (4)     Подпишитесь на RSS комментариев к этой статье.

4 комментариев

#623
1 говорит:
August 27, 2012 at 02:32 pm
if ((!empty($data['filter_name'])) && (($data['filter_name']) == '.')) {
$sql .= " AND LCASE(ad.name) LIKE '%'";
} else {
$sql .= " AND LCASE(ad.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
}
#831
Екатерина говорит:
April 7, 2013 at 01:33 am
Извините, но не ясно, нужно какой-то код заменить на этот или дописать просто этот код в файл?спасибо
#832
almix говорит:
April 7, 2013 at 10:36 am
Екатерина, да надо в файле изменить код согласно этому - проставить LIKE и %.
#883
Алексей говорит:
May 28, 2013 at 11:08 am
Будет работать на 1.5.5.1? Кто-нибудь пробовал?