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

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

Необходимо вывести в клиентскую часть артикулы товаров и включить в поиск возможность искать по артикулу. Как реализовать?
Есть ли готовые решения данной задачи? Вознаграждение обсуждается.
Simpla 2.0.2

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 69
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Поиск - в api/Products.php

после

$keywords = explode(' ', $filter['keyword']);

 

пишем

$keywords_table = ', s_variants v ';$keywords_field = ', v.sku ';

 

вместо

$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)).'%") ');

 

пишем

$keyword_filter .= $this->db->placehold(' AND p.id=v.product_id AND (v.sku LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR p.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR p.meta_keywords LIKE "%'.mysql_real_escape_string(trim($keyword)).'%") ');

 

дальше в запросе после

LEFT JOIN __brands b ON p.brand_id = b.id

 

пишем

$keywords_table

 

теперь live поиск - открываем ajax/search_products.php

и меняем запрос на

$simpla->db->query('SELECT p.id, p.name, i.filename as image FROM __products pLEFT JOIN __images i ON i.product_id=p.id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1), __variantsWHERE p.id=__variants.product_id AND (p.name LIKE "%'.mysql_real_escape_string($keyword).'%" OR __variants.sku LIKE "%'.mysql_real_escape_string($keyword).'%") AND visible=1 ORDER BY p.name LIMIT ?', $limit);

 

проверял, работает.

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

beagler мегаспасибо, работает!!! Ещё бы что б на сайте отображало))

только одно НО: выдаёт Notice: Undefined variable: keywords_table in...api/Products.php on line 127
что это может быть?

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

Вот нашёл решение для клиентской части (версия 2.1)
в product.tpl
после например (а вообще можно в любом месте)
{* Заголовок *}

?<\h1 data-product="{$product->id}"uct->name|escape}></h1\>

добавляем, например

<\h3data-product="{$product->id}">Арт.{$product->variant->sku}></h2\>

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

Встречал ранее другое решение меняем запрос на -

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)).'%") ');		}


Больше ничего нигде не трогаем.

Работает и админке, и по сайту (проверял на 2.1)
Ссылка на сообщение
Поделиться на другие сайты

Что то не увидел в последнем решении артикула. А чтобы не было нотис - нужно в начале новым переменным присвоить ''

Ссылка на сообщение
Поделиться на другие сайты
вместо
$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)).'%\") ');


У меня эта строка выглядит так:
$keyword_filter .= $this->db->placehold('AND p.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');


Делаю все как описано, в итоге при вводе артикула выпадает нужный товар, а при выборе, либо поиске выдает гору ошибок следующего вида:

Warning: Unknown column 'v.product_id' in 'where clause' [sELECT count(distinct p.id) as count FROM s_products AS p WHERE 1 AND p.id=v.product_id AND (v.sku LIKE "%Nokia%" OR p.name LIKE "%Nokia%" OR p.meta_keywords LIKE "%Nokia%") AND p.id=v.product_id AND (v.sku LIKE "%C2-03%" OR p.name LIKE "%C2-03%" OR p.meta_keywords LIKE "%C2-03%") AND p.visible=1 ] in /home/....../docs/api/Database.php on line 116Warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' s_variants v AND p.id=v.product_id AND (v.sku LIKE "%N' at line 22 [sELECT p.id, p.url, p.brand_id, p.name, p.annotation, p.body, p.position, p.created as created, p.visible, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM s_products p LEFT JOIN s_brands b ON p.brand_id = b.id WHERE 1 , s_variants v AND p.id=v.product_id AND (v.sku LIKE "%Nokia%" OR p.name LIKE "%Nokia%" OR p.meta_keywords LIKE "%Nokia%") AND p.id=v.product_id AND (v.sku LIKE "%C2-03%" OR p.name LIKE "%C2-03%" OR p.meta_keywords LIKE "%C2-03%") AND p.visible=1 ORDER BY p.position DESC LIMIT 0, 24 ] in /home/....../docs/api/Database.php on line 116Warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' s_variants v AND p.id=v.product_id AND (v.sku LIKE "%N' at line 22 in /home/....../docs/api/Database.php on line 161Warning: Invalid argument supplied for foreach() in /home/....../docs/view/ProductsView.php on line 131Warning: Cannot modify header information - headers already sent by (output started at /home/....../docs/api/Database.php:116) in /home/....../docs/index.php on line 26
Ссылка на сообщение
Поделиться на другие сайты

Android дай свою почту или аську, скину Тебе файлик готовый (api/Products.php )
может с него у Тебя получиться списать. У меня всё работает.

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

А можно както поподробнее расписать весь путь модификации? Заранее большое спасибо!

И если можно номера строк какие нужно менять, потому что некоторые строки которые нужно заменить встречаются дважды.

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

в simpla/design/html/products.tpl
Примерно на 79йстроке после

{foreach $product->variants as $variant}
			<li {if !$variant@first}class="variant" style="display:none;"{/if}>
				<i title="{$variant->name|escape}">


вствить

{$variant->sku|escape}
Ссылка на сообщение
Поделиться на другие сайты

Недавно заметил, что обычный поиск по ключевым словам криво стал работать (после вышеизложеных изменений) - а именно при поиске должен найти не менее 150 товаров, на странице результата показывает всего 3!!! товара, и немеряно страниц для листания, и когда листаешь, то показывает всегда по три товара.
Проверял всю последовательность изменений - данный баг появляется сразу после:
"

дальше в запросе после
LEFT JOIN __brands b ON p.brand_id = b.id



пишем

$keywords_table
"
Это только у Меня?
Плиз хелп!!!
Ссылка на сообщение
Поделиться на другие сайты

А как дополнить поиск по названию категории?
В myAdmin данный код все отображает, но в api/Products.php никак не удается модифицировать запрос.

SELECT p . * FROM s_products p, s_categories c, s_products_categories pcWHERE p.id = pc.product_idAND c.id = pc.category_idAND c.name =  '%keyword%'LIMIT 0 , 30
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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