Android Posted March 19, 2012 Report Share Posted March 19, 2012 Необходимо вывести в клиентскую часть артикулы товаров и включить в поиск возможность искать по артикулу. Как реализовать?Есть ли готовые решения данной задачи? Вознаграждение обсуждается.Simpla 2.0.2 Quote Link to post Share on other sites
andrewftl Posted March 19, 2012 Report Share Posted March 19, 2012 Очень нужно тоже! версия 2.1 Quote Link to post Share on other sites
alinamolchanova Posted March 19, 2012 Report Share Posted March 19, 2012 постучитесь 314235331 помогу) Quote Link to post Share on other sites
beagler Posted March 19, 2012 Report Share Posted March 19, 2012 Поиск - в 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); проверял, работает. Quote Link to post Share on other sites
filth Posted March 19, 2012 Report Share Posted March 19, 2012 beagler мегаспасибо, работает!!! Ещё бы что б на сайте отображало))только одно НО: выдаёт Notice: Undefined variable: keywords_table in...api/Products.php on line 127что это может быть? Quote Link to post Share on other sites
filth Posted March 19, 2012 Report Share Posted March 19, 2012 Вот нашёл решение для клиентской части (версия 2.1)в product.tpl после например (а вообще можно в любом месте){* Заголовок *}?<\h1 data-product="{$product->id}"uct->name|escape}></h1\>добавляем, например<\h3data-product="{$product->id}">Арт.{$product->variant->sku}></h2\> Quote Link to post Share on other sites
igoryk Posted March 19, 2012 Report Share Posted March 19, 2012 Встречал ранее другое решение меняем запрос на - 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) Quote Link to post Share on other sites
beagler Posted March 19, 2012 Report Share Posted March 19, 2012 Что то не увидел в последнем решении артикула. А чтобы не было нотис - нужно в начале новым переменным присвоить '' Quote Link to post Share on other sites
filth Posted March 19, 2012 Report Share Posted March 19, 2012 "нужно в начале новым переменным присвоить '' - можно пожалуйста поподробнее)) Quote Link to post Share on other sites
beagler Posted March 20, 2012 Report Share Posted March 20, 2012 в начале функции $keywords_table=''; Quote Link to post Share on other sites
filth Posted March 20, 2012 Report Share Posted March 20, 2012 после этого вообще засыпает ошибками Quote Link to post Share on other sites
beagler Posted March 20, 2012 Report Share Posted March 20, 2012 после$order = 'p.position DESC';добавил$keywords_table = '';$keywords_field = '';Ошибок не наблюдаю Quote Link to post Share on other sites
filth Posted March 20, 2012 Report Share Posted March 20, 2012 Спасибо ОГРОМНОЕ!!! всё нормуль. Quote Link to post Share on other sites
filth Posted March 20, 2012 Report Share Posted March 20, 2012 Ещё раз огромное спасибо!!! Quote Link to post Share on other sites
Android Posted March 20, 2012 Author Report Share Posted March 20, 2012 вместо$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 Quote Link to post Share on other sites
Android Posted March 20, 2012 Author Report Share Posted March 20, 2012 да, у меня это происходит если из кода убрать \ Если все заменить как описано выше, live поиск не работает вообще. Quote Link to post Share on other sites
filth Posted March 20, 2012 Report Share Posted March 20, 2012 Android дай свою почту или аську, скину Тебе файлик готовый (api/Products.php )может с него у Тебя получиться списать. У меня всё работает. Quote Link to post Share on other sites
andrewftl Posted March 21, 2012 Report Share Posted March 21, 2012 А можно както поподробнее расписать весь путь модификации? Заранее большое спасибо!И если можно номера строк какие нужно менять, потому что некоторые строки которые нужно заменить встречаются дважды. Quote Link to post Share on other sites
filth Posted March 21, 2012 Report Share Posted March 21, 2012 andrewftl делай всё по инструкции beagler строки 40, 78, 96, 99, 125. Quote Link to post Share on other sites
fluor Posted March 30, 2012 Report Share Posted March 30, 2012 а куда вставить код, чтобы отображался артикул в админке, когда просматриваешь разом все товары Quote Link to post Share on other sites
filth Posted March 30, 2012 Report Share Posted March 30, 2012 в 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} Quote Link to post Share on other sites
fluor Posted March 30, 2012 Report Share Posted March 30, 2012 спасибо, работает! Quote Link to post Share on other sites
filth Posted March 30, 2012 Report Share Posted March 30, 2012 Недавно заметил, что обычный поиск по ключевым словам криво стал работать (после вышеизложеных изменений) - а именно при поиске должен найти не менее 150 товаров, на странице результата показывает всего 3!!! товара, и немеряно страниц для листания, и когда листаешь, то показывает всегда по три товара. Проверял всю последовательность изменений - данный баг появляется сразу после:" дальше в запросе послеLEFT JOIN __brands b ON p.brand_id = b.idпишем$keywords_table"Это только у Меня? Плиз хелп!!! Quote Link to post Share on other sites
filth Posted April 2, 2012 Report Share Posted April 2, 2012 Неужели только у меня??? Quote Link to post Share on other sites
scvorec Posted April 6, 2012 Report Share Posted April 6, 2012 А как дополнить поиск по названию категории?В 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 Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.