Перейти к содержанию
Официальный форум поддержки Simpla

Поиск по ID товара (нне варианта) в админке


Рекомендуемые сообщения

Подскажите как это можно сделать?

 

Просто ID — число, а артикулы не что иное как шифр немецкой разведки... клиент язык сломает, у меня уши завянут ;)

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

в файле /api/Products.php нужно заменить запрос к базе по введенному ключевому слову:

$keyword_filter .= $this->db->placehold("AND (p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");

добавив проверку на айди (если нужно, убрать оттуда проверку на артикул) p.id=$kw:

$keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");

также это можно сделать для поиска ajax в /simpla/ajax/search_products.php

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Обратите внимание что в этом случае будет искать и в фронтенде. для того чтобы не искало в фронтенде, нужно сделать другой фильтр например $filter['keyword_admin'], и прописать его так-же как и $filter['keyword'] в api/Products.php, добавив запрос написанный выше. и из админки в /simpla/ProductsAdmin.php передавать не $filter['keyword'] а $filter['keyword_admin']

Ссылка на сообщение
Поделиться на другие сайты

я имею в виду ID не варианта, а именно товара, который в Яндекс xml выводится так: group_id='$p->product_id'

а вшаблоне так: {$product->id}

Ссылка на сообщение
Поделиться на другие сайты

вы заменили в функции get_products() ?

 

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{
				$kw = $this->db->escape(trim($keyword));
				if($kw!=='')
					$keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
			}
		}
Ссылка на сообщение
Поделиться на другие сайты

я имею в виду ID не варианта, а именно товара, который в Яндекс xml выводится так: group_id='$p->product_id'

а вшаблоне так: {$product->id}

 

ну так p.id=$kw и есть айди товара. у себя попробовал, выводит все. еще нужно добавить этот исправленный запрос в count_products(). для правильного вывода количества найденного товара

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

ну так p.id=$kw и есть айди товара. у себя попробовал, выводит все. еще нужно добавить этот исправленный запрос в count_products(). для правильного вывода количества найденного товара

не в той функции заменил, все работает, спасибо! )) Круто все

Ссылка на сообщение
Поделиться на другие сайты

какие

 

сегодня кстати тоже были проблемки.... в админке при поиске выводит "Найдено n товаров" при этом нет товаров... хотя должны бвыть, именно столько сколько и написал ;)

 

вводил часть названия, при том по ID ищет отлично

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

сегодня кстати тоже были проблемки.... в админке при поиске выводит "Найдено n товаров" при этом нет товаров... хотя должны бвыть, именно столько сколько и написал ;)

 

вводил часть названия, при том по ID ищет отлично

 

значит количество товара( get_count_products() ) ищет правильно. а сами товары выбирает не так. посмотрите, может вы где-то в get_products() что-то не так вписали, или скиньте файл Products.php я посмотрю

Ссылка на сообщение
Поделиться на другие сайты

значит количество товара( get_count_products() ) ищет правильно. а сами товары выбирает не так. посмотрите, может вы где-то в get_products() что-то не так вписали, или скиньте файл Products.php я посмотрю

https://yadi.sk/d/17nwZNBNhajWq

Ссылка на сообщение
Поделиться на другие сайты

в функции count_products должен быть такой же фильтр по кейфордам как и в get_products()

 

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{
				$kw = $this->db->escape(trim($keyword));
				$keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
			}
		}
Ссылка на сообщение
Поделиться на другие сайты

 

в функции count_products должен быть такой же фильтр по кейфордам как и в get_products()

 

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{
				$kw = $this->db->escape(trim($keyword));
				$keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
			}
		}

 

сейчас не находит вообще, пишет нет товаров! По ID ищет

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

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

"Комплект постельного белья Фамилье OMP-06",

 

в поиске забиваю "OMP-06"

Ссылка на сообщение
Поделиться на другие сайты

"Комплект постельного белья Фамилье OMP-06",

 

в поиске забиваю "OMP-06"

ну все тогда логично... в get_products уже не искало товары... добавил исправления в count и тут перестало....

получается в запросе дело

Ссылка на сообщение
Поделиться на другие сайты

да. но в count_products() тоже не правильный был. не учитывал артикул и тд.

 

вот:

 

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{	
				$kw = $this->db->escape(trim($keyword));
				if($kw!=='') {
					$fid = '';
					if( is_numeric($kw) )
						$fid = 'p.id='.$kw.' OR';
					$keyword_filter .= $this->db->placehold("AND ($fid p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
				}
			}
		

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

Ссылка на сообщение
Поделиться на другие сайты

да. но в count_products() тоже не правильный был. не учитывал артикул и тд.

 

вот:

 

		

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

 

все круто!

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

вот мой базовый products.php делал манипуляции с запросами но ничего не выходит.

 

https://yadi.sk/d/p6lzWWi2hbXZu

 

нужно в функции get_products и в count_products производить изменения

 

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

у вас это строки: 96-101, 170-175,  заменить на

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{	
				$kw = $this->db->escape(trim($keyword));
				if($kw!=='') {
					$fid = '';
					if( is_numeric($kw) )
						$fid = 'p.id='.$kw.' OR';
					$keyword_filter .= $this->db->placehold("AND ($fid p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
				}
			}
                 }
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...