FITforKID Posted June 29, 2011 Report Share Posted June 29, 2011 Hallo, habe leider im Forum nichts passendes gefunden. Wie kann ich die Artikel-Suche auf folgende Abfragen beschränken: Produktname, Art. Nr., Suchbegriffe, (evtl Kurzbeschreibung). D.h. eigentlich überall außer in der Produktbeschreibung (und der kurzbeschreibung.) Ändere ich das in der class.search_query.php ?? Wie muss ich die Datei ändern das nicht mehr in der Beschreibung und der Kurzbeschreibung gesucht wird? Danke für Eure Hilfe A. Bulling Link to comment Share on other sites More sharing options...
df:bug Posted June 29, 2011 Report Share Posted June 29, 2011 Hallo, dieser Code in der Datei macht die Abfrage. Änderungen im Core sind nicht zu empfehlen, da diese für alle Mandanten gelten und bemi nächsten Update überschrieben werden, bzw. wieder angepasst werden müssen. $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")");[/CODE] Viele Grüße, df:bug Link to comment Share on other sites More sharing options...
FITforKID Posted June 29, 2011 Author Report Share Posted June 29, 2011 Vielen Dank für die schnelle Antwort. Die Abfrage für die Suchbegriffe in der Beschreibung und der Kurzbeschreibung liegt ja in $desc und $sdesc und nicht in dem Codeschnipsel von Dir. Ich verstehe nur nicht wo ich die Variable herausnehmen muss, das die normale Suchabfrage nicht mehr in der Beschreibung und der Kurzbeschreibung sucht. Hier mal mein code der oben angegebenen Datei: <?php /* ######################################################################### # xt:Commerce VEYTON 4.0 Enterprise # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Copyright 2007-2009 xt:Commerce GmbH. All Rights Reserved. # This file may not be redistributed in whole or significant part. # Content of this file is Protected By International Copyright Laws. # # ~~~~~~~~~ xt:Commerce VEYTON 4.0 Enterprise IS NOT FREE SOFTWARE ~~~~~~~~~~~~~~~~ # # http://www.xt-commerce.com # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # @version $Id: class.search_query.php 3643 2009-08-05 13:48:45Z matthias $ # @copyright xt:Commerce GmbH, www.xt-commerce.com # # @author Mario Zanier, xt:Commerce GmbH [email protected] # # @author Matthias Hinsche [email protected] # @author Matthias Benkwitz [email protected] # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # xt:Commerce GmbH, Bachweg 1, A-6091 Goetzens (AUSTRIA) # [email protected] # ######################################################################### */ defined('_VALID_CALL') or die('Direct Access is not allowed.'); class search_query extends getProductSQL_query{ function F_Keywords ($data=0) { global $xtPlugin; $sdesc=''; $desc=''; ($plugin_code = $xtPlugin->PluginCode('class.search_query.php:F_Keywords_top')) ? eval($plugin_code) : false; if(isset($plugin_return_value)) return $plugin_return_value; $keywords = $data['keywords']; $split_keywords = explode(' ',$data['keywords']); //echo count($split_keywords); //__debug($split_keywords); // define(_SYSTEM_SEARCH_SPLIT,'true'); if (_SYSTEM_SEARCH_SPLIT=='true' && count($split_keywords)>1) { if($data['sdesc']=='on') { $like = array(); foreach ($split_keywords as $key=>$val) { $like[]="pd.products_short_description LIKE '%".$val."%'"; } $sdesc ="or (".implode(' AND ',$like).")"; } if($data['desc']=='on') { $like = array(); foreach ($split_keywords as $key=>$val) { $like[]="pd.products_description LIKE '%".$val."%'"; } $desc ="or (".implode(' AND ',$like).")"; } if($data['sdesc']=='on') { $like = array(); foreach ($split_keywords as $key=>$val) { $like[]="pd.products_name LIKE '%".$val."%'"; } $sdesc ="or (".implode(' AND ',$like).")"; } $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")"); } else { if($data['sdesc']=='on') $sdesc = "or pd.products_short_description LIKE '%".$keywords."%' "; if($data['desc']=='on') $desc = "or pd.products_description LIKE '%".$keywords."%' "; if($data['desc']=='on') $desc = "or pd.products_name LIKE '%".$keywords."%' "; if(!empty($keywords)){ $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")"); } } } function F_MultiCheck ($params='') { global $xtPlugin; ($plugin_code = $xtPlugin->PluginCode(__CLASS__.':F_MultiCheck')) ? eval($plugin_code) : false; } } ?> Oder kann ich irgendwo im Backend sdesc und desc auf true oder false stellen und ich habe diese Funktion einfach übersehen? Thanx for Antworten.... Link to comment Share on other sites More sharing options...
df:bug Posted June 29, 2011 Report Share Posted June 29, 2011 Hallo, Einstellungen zur Suche gibt es leider nicht. Im Code werden "$sdesc" und "$desc" mit in die Anfrage eingebaut, diese aus der Abfrage lösen. Die Abfrage ist zweimal in der Datei zu finden. Original $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")"); Abgeändert $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' )");[/code] Viele Grüße, df:bug Link to comment Share on other sites More sharing options...
FITforKID Posted June 29, 2011 Author Report Share Posted June 29, 2011 Danke für die Antwort, mein Problem liegt doch ein bisschen noch wo anderst. Es geht um die Abfrage der Suchwörter in den Artikel Namen und den Keywords. Wenn ich die Kurzbeschreibung und die Beschreibung aus der Suche nehme findet mein shop fast nix mehr und es ist auch noch davon abhängig in welcher Reihenfolge ich die Suchbegriffe auswähle. Habe den bugfix aus Suchfunktion in Veyton schon eingesetzt, der bringt ja leider nur etwas zu den Suchbegriffen in den Beschreibungen. Gibt es eine ähnliche Lösung für die getrennten Suchbegriffe aus den Artikelnamen und den Keywords. Habe als Bsp.: Artikel: moll Schreibtisch runner Im Backend Suchanfrage trennen auf false: Suchbegriff: moll runner findet er den Artikel Suchbegriff: runner moll wird nix gefunden im Backend Suchanfrage trennen auf true: Suchbegriff moll Runner findet viel zu viele Artikel, eben alle bei denen irgendwo die Begriffe moll und runner vorkommen. Deshalb sollte die Suche auf die Artikelnamen und die Keywords eingeschränkt werden, unabhängig der Reihenfolge der Eingabe der Keywords. Wie bekomme ich das hin???? Hier noch einmal mein Code aus der aktuelle Code der class.search_query.php: <?php /* ######################################################################### # xt:Commerce VEYTON 4.0 Enterprise # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Copyright 2007-2009 xt:Commerce GmbH. All Rights Reserved. # This file may not be redistributed in whole or significant part. # Content of this file is Protected By International Copyright Laws. # # ~~~~~~~~~ xt:Commerce VEYTON 4.0 Enterprise IS NOT FREE SOFTWARE ~~~~~~~~~~~~~~~~ # # http://www.xt-commerce.com # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # @version $Id: class.search_query.php 3643 2009-08-05 13:48:45Z matthias $ # @copyright xt:Commerce GmbH, www.xt-commerce.com # # @author Mario Zanier, xt:Commerce GmbH [email protected] # # @author Matthias Hinsche [email protected] # @author Matthias Benkwitz [email protected] # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # xt:Commerce GmbH, Bachweg 1, A-6091 Goetzens (AUSTRIA) # [email protected] # ######################################################################### */ defined('_VALID_CALL') or die('Direct Access is not allowed.'); class search_query extends getProductSQL_query{ function F_Keywords ($data=0) { global $xtPlugin; $sdesc=''; $desc=''; ($plugin_code = $xtPlugin->PluginCode('class.search_query.php:F_Keywords_top')) ? eval($plugin_code) : false; if(isset($plugin_return_value)) return $plugin_return_value; $keywords = $data['keywords']; $split_keywords = explode(' ',$data['keywords']); //echo count($split_keywords); //__debug($split_keywords); // define(_SYSTEM_SEARCH_SPLIT,'true'); if (_SYSTEM_SEARCH_SPLIT=='true' && count($split_keywords)>1) { if($data['sdesc']=='on') { $like = array(); foreach ($split_keywords as $key=>$val) { $like[]="pd.products_short_description LIKE '%".$val."%'"; } $sdesc ="or (".implode(' AND ',$like).")"; } if($data['desc']=='on') { $like = array(); foreach ($split_keywords as $key=>$val) { $like[]="pd.products_description LIKE '%".$val."%'"; } $desc ="or (".implode(' AND ',$like).")"; } $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")"); } else { if($data['sdesc']=='on') $sdesc = "or pd.products_short_description LIKE '%".$keywords."%' "; if($data['desc']=='on') $desc = "or pd.products_description LIKE '%".$keywords."%' "; if(!empty($keywords)){ $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")"); } } } function F_MultiCheck ($params='') { global $xtPlugin; ($plugin_code = $xtPlugin->PluginCode(__CLASS__.':F_MultiCheck')) ? eval($plugin_code) : false; } } ?> Link to comment Share on other sites More sharing options...
df:bug Posted June 29, 2011 Report Share Posted June 29, 2011 Hallo, dazu muss die Datenbankabfrage angepasst werden. $this->setSQL_WHERE("AND (pd.products_keywords LIKE '%".$keywords."%' or pd.products_name LIKE '%".$keywords."%' or p.products_model LIKE '%".$keywords."%' or p.products_ean LIKE '%".$keywords."%' ".$sdesc.$desc.")");[/CODE] Hier werden "products_keywords", "products_name", "products_model", "products_ean", "$sdesc" und "$desc" durchsucht. Die Suche sucht aber auch nicht einzeln nach Wörtern, sondern nach der Eingabe als Wortgruppe($keywords), dies müsste geändert. [b]Edit:[/b] Die Keywords müssten gesplittet und einzeln abgefragt werden. Viele Grüße, df:bug Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.