{"id":1061,"date":"2021-10-22T15:18:50","date_gmt":"2021-10-22T12:18:50","guid":{"rendered":"https:\/\/presta.site\/blog\/korzystanie-z-wyszukiwarki-sphinx-w-prestashop\/"},"modified":"2026-06-30T09:12:24","modified_gmt":"2026-06-30T06:12:24","slug":"korzystanie-z-wyszukiwarki-sphinx-w-prestashop","status":"publish","type":"post","link":"https:\/\/presta.site\/blog\/pl\/korzystanie-z-wyszukiwarki-sphinx-w-prestashop\/","title":{"rendered":"Korzystanie z wyszukiwarki Sphinx w PrestaShop"},"content":{"rendered":"<p>PrestaShop posiada ca\u0142kiem dobre narz\u0119dzie wyszukiwania, ale czasami nie spe\u0142nia ono wszystkich Twoich potrzeb. Nie jest te\u017c zbyt szybkie, a w du\u017cych sklepach wyszukiwanie i indeksacja mog\u0105 by\u0107 bardzo powolne.<\/p>\n<p>Je\u015bli potrzebujesz czego\u015b lepszego, mo\u017cesz u\u017cy\u0107 \u015bwietnego zamiennika &#8211; Sphinx.<\/p>\n<p><!--more--><br \/>\nZ Wikipedii:<\/p>\n<blockquote><p>Sphinx to darmowy silnik wyszukiwania pe\u0142notekstowego o otwartym kodzie \u017ar\u00f3d\u0142owym, zaprojektowany w celu zapewnienia funkcjonalno\u015bci wyszukiwania pe\u0142notekstowego dla aplikacji klienckich.<\/p><\/blockquote>\n<p>Strona internetowa Sphinx &#8211; <a href=\"http:\/\/sphinxsearch.com\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/sphinxsearch.com\/<\/a><\/p>\n<h2>Instalacja Sphinx<\/h2>\n<p>U\u017cy\u0142em Debiana 8.1. W innych dystrybucjach Linuksa (a zw\u0142aszcza w Windowsie) instalacja mo\u017ce si\u0119 nieznacznie r\u00f3\u017cni\u0107.<br \/>\nJe\u015bli Sphinx jest dost\u0119pny w repozytoriach, po prostu go zainstaluj:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">su<\/span><br \/>\n<span class=\"kw2\">apt-get update<\/span><br \/>\n<span class=\"kw2\">apt-get install<\/span> sphinxsearch<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Je\u015bli Sphinx nie jest dost\u0119pny w repozytoriach, mo\u017cesz pobra\u0107 instalator z oficjalnej strony i zainstalowa\u0107 zale\u017cno\u015bci:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">apt-get install<\/span> mysql-client unixodbc libpq5<br \/>\n<span class=\"kw2\">wget<\/span> http:<span class=\"sy0\">\/\/<\/span>sphinxsearch.com<span class=\"sy0\">\/<\/span>files<span class=\"sy0\">\/<\/span>sphinxsearch_2.2.9-release-<span class=\"nu0\">1<\/span>~wheezy_i386.deb<br \/>\n<span class=\"kw2\">dpkg<\/span> <span class=\"re5\">-i<\/span> sphinxsearch_2.2.9-release-<span class=\"nu0\">1<\/span>~wheezy_i386.deb<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Musisz zast\u0105pi\u0107 nazw\u0119 i adres URL instalatora aktualnymi wersjami. Wszystkie s\u0105 dost\u0119pne na oficjalnej stronie internetowej.<\/p>\n<h2>Konfiguracja Sphinx<\/h2>\n<p>Otw\u00f3rz konfiguracj\u0119 Sphinx i edytuj j\u0105:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">nano<\/span> <span class=\"sy0\">\/<\/span>etc<span class=\"sy0\">\/<\/span>sphinxsearch<span class=\"sy0\">\/<\/span>sphinx.conf<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Musisz edytowa\u0107 istniej\u0105cy domy\u015blny blok &#8220;source src1&#8221; (lub doda\u0107 nowy blok). Wynik powinien wygl\u0105da\u0107 tak:<\/p>\n<div class=\"codecolorer-container ini blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/><\/div><\/td><td><div class=\"ini codecolorer\">source PrestaSite<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re1\">type<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> mysql<\/span><br \/>\n<span class=\"re1\">sql_host<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> localhost<\/span><br \/>\n# Nazwa u\u017cytkownika bazy danych PrestaShop<br \/>\n<span class=\"re1\">sql_user<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBUSER<\/span><br \/>\n# Has\u0142o bazy danych PrestaShop<br \/>\n<span class=\"re1\">sql_pass<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBPASSWORD<\/span><br \/>\n# Nazwa bazy danych PrestaShop<br \/>\n<span class=\"re1\">sql_db<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> DBNAME<\/span><br \/>\n<span class=\"re1\">sql_port<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> 3306 # opcjonalnie, domy\u015blnie 3306<\/span><br \/>\n<span class=\"re1\">sql_query_pre<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> SET NAMES utf8<\/span><br \/>\n<br \/>\n# Zapytanie MySQL z list\u0105 p\u00f3l do indeksacji<br \/>\n<span class=\"re1\">sql_query<\/span> <span class=\"sy0\">=<\/span> <br \/>\nSELECT id_product, name, description, description_short<br \/>\nFROM ps_product_lang<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Najpierw widzisz ustawienia po\u0142\u0105czenia z baz\u0105 danych (<span class=\"bold\">nie zapomnij zmieni\u0107 ich na w\u0142a\u015bciwe<\/span>). Parametr <span class=\"bold\">sql_query<\/span> zawiera zapytanie z polami do indeksacji.<\/p>\n<p>To s\u0105 wszystkie ustawienia z mojej konfiguracji. Zasadniczo plik konfiguracyjny jest dobrze udokumentowany i wszystkie opcje s\u0105 w nim opisane, wi\u0119c mo\u017cesz \u0142atwo dostosowa\u0107 swoj\u0105 konfiguracj\u0119.<\/p>\n<p>Nast\u0119pnie, w bloku &#8220;index definition&#8221; musisz skonfigurowa\u0107 indeks:<\/p>\n<div class=\"codecolorer-container ini blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/><\/div><\/td><td><div class=\"ini codecolorer\">index PrestaSite<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n# \u017ar\u00f3d\u0142o danych do indeksacji<br \/>\n<span class=\"re1\">source<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> PrestaSite<\/span><br \/>\n<br \/>\n# lokalizacja danych indeksu<br \/>\n<span class=\"re1\">path<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> \/var\/lib\/sphinxsearch\/data\/prestasite<\/span><br \/>\n<br \/>\n# preprocesory morfologiczne<br \/>\n<span class=\"re1\">morphology<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> stem_en<\/span><br \/>\n<br \/>\n# minimalna d\u0142ugo\u015b\u0107 s\u0142owa do indeksacji<br \/>\n<span class=\"re1\">min_word_len<\/span> <span class=\"sy0\">=<\/span><span class=\"re2\"> 1<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Nast\u0119pnie widzisz bloki &#8220;indexer settings&#8221; i &#8220;searchd settings&#8221;. Zazwyczaj s\u0105 one w porz\u0105dku, mo\u017cesz je po prostu pomin\u0105\u0107.<\/p>\n<p><span class=\"bold\">Wi\u0119c skonfigurowali\u015bmy \u017ar\u00f3d\u0142o danych (source PrestaSite) i indeks (index PrestaSite).<\/span><\/p>\n<h2>Indeksacja<\/h2>\n<p>Uruchom indeksator, aby zaindeksowa\u0107 swoj\u0105 baz\u0119 danych:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">indexer <span class=\"re5\">--all<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h2>Uruchomienie Sphinx<\/h2>\n<p>Nie zapomnij uruchomi\u0107\/zrestartowa\u0107 searchd:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">searchd<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I dodaj indeksator do crontab:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"nu0\">15<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> <span class=\"sy0\">*<\/span> root indexer <span class=\"re5\">--all<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Indeksacja b\u0119dzie uruchamiana co godzin\u0119.<\/p>\n<h2>Konfiguracja PrestaShop<\/h2>\n<p>Poni\u017cej znajduje si\u0119 kod dla PrestaShop 1.6. W innych wersjach PrestaShop mo\u017ce si\u0119 on nieznacznie r\u00f3\u017cni\u0107.<\/p>\n<p>Utw\u00f3rz (lub edytuj) nadpisanie klasy Search:<br \/>\n\/override\/classes\/Search.php<\/p>\n<div class=\"codecolorer-container php blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">&lt;?php<\/span><br \/>\n<span class=\"kw2\">class<\/span> Search <span class=\"kw2\">extends<\/span> SearchCore <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">public<\/span> static <span class=\"kw2\">function<\/span> find<span class=\"br0\">&#40;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$expr<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_number<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$order_by<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'position'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$order_way<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'desc'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$ajax<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$use_cookie<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> Context <span class=\"re0\">$context<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">null<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$context<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$context<\/span> <span class=\"sy0\">=<\/span> Context<span class=\"sy0\">::<\/span><span class=\"me2\">getContext<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$db<\/span> <span class=\"sy0\">=<\/span> Db<span class=\"sy0\">::<\/span><span class=\"me2\">getInstance<\/span><span class=\"br0\">&#40;<\/span>_PS_USE_SQL_SLAVE_<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ TODO : smart page management<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_number<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"re0\">$page_number<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_size<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"re0\">$page_size<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderBy<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_by<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderWay<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_way<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderBy<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_by<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"sy0\">!<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isOrderWay<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$order_way<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$start<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$page_number<\/span> <span class=\"sy0\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> <span class=\"re0\">$page_size<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Sphinx search, get ids of found products<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sphinx_results<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">self<\/span><span class=\"sy0\">::<\/span><span class=\"me2\">getSphinxResults<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$expr<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$start<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get products by id if something found<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/is_array\"><span class=\"kw3\">is_array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#41;<\/span> AND <a href=\"http:\/\/www.php.net\/sizeof\"><span class=\"kw3\">sizeof<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#41;<\/span> AND <a href=\"http:\/\/www.php.net\/isset\"><span class=\"kw3\">isset<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> AND <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$sql<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` manufacturer_name, MAX(product_attribute_shop.`id_product_attribute`) id_product_attribute,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DATEDIFF(<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.`date_add`,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DATE_SUB(<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOW(),<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTERVAL '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>Validate<span class=\"sy0\">::<\/span><span class=\"me2\">isUnsignedInt<\/span><span class=\"br0\">&#40;<\/span>Configuration<span class=\"sy0\">::<\/span><span class=\"me2\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'PS_NB_DAYS_NEW_PRODUCT'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> ? Configuration<span class=\"sy0\">::<\/span><span class=\"me2\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'PS_NB_DAYS_NEW_PRODUCT'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">:<\/span> <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">' DAY<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) &gt; 0 new<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM '<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product p<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'product'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'p'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INNER JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product_lang` pl ON (<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.`id_product` = pl.`id_product`<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND pl.`id_lang` = '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlRestrictionOnLang<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'pl'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'product_attribute` pa ON (p.`id_product` = pa.`id_product`)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'product_attribute'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'pa'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'product_attribute_shop.`default_on` = 1'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '<\/span><span class=\"sy0\">.<\/span>Product<span class=\"sy0\">::<\/span><span class=\"me2\">sqlStock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'p'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'product_attribute_shop'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$context<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">shop<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'image` i ON (i.`id_product` = p.`id_product`)'<\/span><span class=\"sy0\">.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Shop<span class=\"sy0\">::<\/span><span class=\"me2\">addSqlAssociation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'image'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'i'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'image_shop.cover=1'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT JOIN `'<\/span><span class=\"sy0\">.<\/span>_DB_PREFIX_<span class=\"sy0\">.<\/span><span class=\"st_h\">'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">')<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE p.`id_product` IN('<\/span><span class=\"sy0\">.<\/span><a href=\"http:\/\/www.php.net\/implode\"><span class=\"kw3\">implode<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">','<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'results'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">')<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GROUP BY product_shop.id_product'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$db<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">executeS<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sql<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ results count<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$sphinx_results<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'total'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$result<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result_properties<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result_properties<\/span> <span class=\"sy0\">=<\/span> Product<span class=\"sy0\">::<\/span><span class=\"me2\">getProductsProperties<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$id_lang<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$result<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'total'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$total<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'result'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$result_properties<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">protected<\/span> static <span class=\"kw2\">function<\/span> getSphinxResults<span class=\"br0\">&#40;<\/span><span class=\"re0\">$search_query<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_number<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$page_size<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$results<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$search_query<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ connect to Sphinx database<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$link<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/mysqli_connect\"><span class=\"kw3\">mysqli_connect<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'127.0.0.1'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'9306'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$link<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$query<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT * FROM `PrestaSite` WHERE MATCH('<\/span><span class=\"st_h\">'.pSQL($search_query).'<\/span><span class=\"st_h\">') limit '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$page_number<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">', '<\/span><span class=\"sy0\">.<\/span><span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$page_size<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">';'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$link<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">query<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">while<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query_results<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fetch_array<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$results<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/array_merge\"><span class=\"kw3\">array_merge<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$results<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$query_results<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">\/* clear result *\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">close<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get count of results<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$query_total<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'SELECT count(*) FROM `PrestaSite` WHERE MATCH('<\/span><span class=\"st_h\">'.pSQL($search_query).'<\/span><span class=\"st_h\">');'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$result<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$link<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">query<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$query_total<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>int<span class=\"br0\">&#41;<\/span><span class=\"re0\">$result<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fetch_array<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$total<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">1000<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$total<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1000<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/mysqli_close\"><span class=\"kw3\">mysqli_close<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$link<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'results'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$results<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'total'<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$total<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Zasadniczo kod jest do\u015b\u0107 prosty. Nadpisujemy funkcj\u0119 &#8220;find&#8221;, w kt\u00f3rej zast\u0119pujemy wyszukiwanie PrestaShop wyszukiwaniem Sphinx. Sphinx zwraca identyfikatory produkt\u00f3w, a za pomoc\u0105 tych identyfikator\u00f3w pobieramy dane produkt\u00f3w. Druga funkcja (getSphinxResults) bezpo\u015brednio wykonuje wyszukiwanie.<\/p>\n<p>Na koniec musisz wyczy\u015bci\u0107 pami\u0119\u0107 podr\u0119czn\u0105 i usun\u0105\u0107 pami\u0119\u0107 podr\u0119czn\u0105 klas (\/cache\/class_index.php). Gotowe!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PrestaShop posiada ca\u0142kiem dobre narz\u0119dzie wyszukiwania, ale czasami nie spe\u0142nia ono wszystkich Twoich potrzeb. Nie jest te\u017c zbyt szybkie, a w du\u017cych sklepach wyszukiwanie i indeksacja mog\u0105 by\u0107 bardzo powolne. Je\u015bli potrzebujesz czego\u015b lepszego, mo\u017cesz u\u017cy\u0107 \u015bwietnego zamiennika &#8211; Sphinx.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[149],"tags":[],"class_list":["post-1061","post","type-post","status-publish","format-standard","hentry","category-rozwoj"],"_links":{"self":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/1061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/comments?post=1061"}],"version-history":[{"count":0,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/1061\/revisions"}],"wp:attachment":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/media?parent=1061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/categories?post=1061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/tags?post=1061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}