Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Autocomplete отображает ненужные значения


Recommended Posts

Добрый день!

 

Для опции type=TEXT сделал autocomplete, при клике по полю - отображает пустые значения. В товаре сделал отдельное поле "patina", по которому и происходит поиск.

image.png.57942c258e8157b2598403c92919cf0c.pngimage.png.46d7238c8528b50ab9ce7cf2b3cd2b7a.png

 

Если ввожу нужное значение, то подбор работает нормально:

image.png.368d2214a0c8bbed9d04a2a1840da3e8.png

 

Как сделать так, чтобы выводились значения товаров, где заполнено только данное поле (patina)? 

 

category.tpl

				<?php if ($option['option_id'] == '18') { ?>
                <script type="text/javascript">
                <!--
                $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').autocomplete({
                  'source': function(request, response) {
                    $.ajax({
                      url: 'index.php?route=product/product/autocomplete_patina&filter_patina=' + encodeURIComponent(request),
                      dataType: 'json',
                      success: function(json) {
                        response($.map(json, function(item) {
                          return {
                            label: item['name'],
                            value: item['product_id']
                          }
                        }));
                      }
                    });
                  },
                  'select': function(item) {
                    $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').val(item['label']);
                  }
                });
                //-->
                </script>
                <?php } ?>
/*controller product.php */

public function autocomplete_patina() {
		$json = array();

		if (isset($this->request->get['filter_name']) || isset($this->request->get['filter_patina'])) {
			$this->load->model('catalog/product');

			if (isset($this->request->get['filter_patina'])) {
				$filter_patina = $this->request->get['filter_patina'];
			} else {
				$filter_patina = '';
			}

			if (isset($this->request->get['limit'])) {
				$limit = $this->request->get['limit'];
			} else {
				$limit = 10;
			}

			$filter_data = array(
				'filter_patina' => $filter_patina,
				'start'        => 0,
				'limit'        => $limit
			);

			$results = $this->model_catalog_product->getProducts($filter_data);

			foreach ($results as $result) {

				$json[] = array(
					'product_id' => $result['product_id'],
					'name'       => strip_tags(html_entity_decode($result['patina'], ENT_QUOTES, 'UTF-8')),
					'price'      => $result['price']
				);
			}
		}

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}

в модель product.php, в getProducts добавил следующее

		if (!empty($data['filter_model'])) {
			$sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_model']) . "%'";
		}		
		
		if (!empty($data['filter_patina'])) {
			$sql .= " AND p.patina LIKE '%" . $this->db->escape($data['filter_patina']) . "%'";
		}	

 

Змінено користувачем nash
Надіслати
Поділитися на інших сайтах


Если я правильно понял, что нужно, то сделайте в этом цикле проверку на наличие нужного значения и добавляйте в результирующий json только те записи, которые имеют нужное значение

 

foreach ($results as $result) {

	$json[] = array(
		'product_id' => $result['product_id'],
		'name'       => strip_tags(html_entity_decode($result['patina'], ENT_QUOTES, 'UTF-8')),
		'price'      => $result['price']
	);
}
		

И зачем вообще дёргать сервер, если в поисковую строку ничего не ввели? Пусть пользователь введёт хотя-бы пару символов и тогда уже можно и к серверу обращаться.

  • +1 1
Надіслати
Поділитися на інших сайтах


3 минуты назад, openprice сказал:

Думаю, это подсказка вам поможет

https://stackoverflow.com/questions/5285448/mysql-select-only-not-null-values#5285461

 

можно и так, но тогда проще свой select написать, тем более всё равно в модель изменения вносятся

Надіслати
Поділитися на інших сайтах


7 minutes ago, Timber said:

 

можно и так, но тогда проще свой select написать, тем более всё равно в модель изменения вносятся

 

Не можно, а нужно.

Надіслати
Поділитися на інших сайтах


3 часа назад, openprice сказал:

Не можно, а нужно.

 

Ну тут зависит от подхода. Лично я стараюсь имеющиеся методы моделей ядра не трогать. Потому как какое-нибудь расширение захочет запрос переписать и развалится всё нафиг. Если что-то нужно, то лучше свой метод написать.

Надіслати
Поділитися на інших сайтах


2 часа назад, nash сказал:

сделал проверку... а как вывести "Ничего не найдено"? 

 

можно проверить json, полученный от сервера и если он пустой, то вернуть что-то типа этого

return {
    label: 'Ничего не найдено',
    value: ''
}

И ещё один момент. Проверку на стороне контроллера можно использовать в том случае, если значений без патины относительно немного (единичные случаи). Если же их много, то лучше добавить к запросу AND p.patina IS NOT NULL, ну или какое там значение этого поля по-умолчанию (если пустая строка, то проверяйте на неё).

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.