Jump to content

Recommended Posts

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

Link to post
Share on other sites
  • Replies 69
  • Created
  • Last Reply

Top Posters In This Topic

Поиск - в 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);

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

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

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)
Link to post
Share on other sites
вместо
$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
Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • 2 weeks later...

в 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}
Link to post
Share on other sites

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

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



пишем

$keywords_table
"
Это только у Меня?
Плиз хелп!!!
Link to post
Share on other sites

А как дополнить поиск по названию категории?
В 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
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...