Franz Holzinger

autor  
30-09-16 16:16:10 Such-Ergebnisse
Mischa Sell-Becker
Hallo,

gibt es irgendwo die Möglichkeit einzustellen, dass nur nach ganzen Wörtern gesucht wird und nicht auch nach enthaltenen Teil-Strings?

Außerdem soll verhindert werden, dass wenn man nach Wörtern mit Umlauten sucht, dass auch nur die Ergebnisse mit Umlaut ausgegeben werden. Zurzeit erhält man bei Suchen mit Ä auch alle Ergebnisse mit A.

Sofern man es nicht einfach so einstellen kann, an welcher Stelle in der Erweiterung erfolgt die Suche, so dass man diese anpassen könnte?

Zur Info, ich habe tt_products Version 2.8.8 im Einsatz.
30-09-16 20:08:59 MYSQL
Franz Holzinger
Was die Suche schließlich findet, das wird von MYSQL über die Kollation festgelegt. tt_products baut die SQL Abfrage zusammen.

class.tx_ttproducts_list_view.php tt_products 2.12.0:

if ($htmlSwords && (in_array($theCode, array('LIST', 'SEARCH')))) {
//extend standard search fields with user setup
$searchFieldList =
trim($conf['stdSearchFieldExt']) ?
implode(',', array_unique(t3lib_div::trimExplode(',', $conf['stdSearchFieldExt']))) :
'title,note,' . $tablesObj->get('tt_products')->fieldArray['itemnumber'];

$where .= $tablesObj->get('tt_products')->searchWhere($searchFieldList, trim($htmlSwords), $theCode);
}
4-10-16 12:50:54 Kollation
Mischa Sell-Becker
...das ist richtig, aber eine Anpassung der Datenbank-Tabelle ist leider nicht möglich. Grundsätzlich funktioniert ja auch bei der MySQL-Abfrage der Datenbank der Zusatz "COLLATE utf8_bin".

Nur an welcher Stelle muss bzw. kann ich diesen ergänzen?
4-10-16 19:13:02 Erweiterung
Franz Holzinger
Für eine solche Funktion müssten tt_products und table erweitert werden.

select * from tt_products where title = _utf8 'Something' collate utf8_bin

Der Zusatz _utf8 wird nur dann benötigt, wenn es sich nicht um UTF-8 Daten handelt und diese vorher noch umgewandelt werden müssen.

siehe:

http://stackoverflow.com/questions/901066/mysql-case-sensitive-search-for-utf8-bin-field
10-10-16 14:33:37 neues Feature
Franz Holzinger
Ich habe nun die Extensions table und tt_products um dieses Feature erweitert:

https://github.com/franzholz/table/commit/142131d7a33e7354690839915930c8b942c5a34b
https://github.com/franzholz/tt_products/commit/3cfdfb7e2c2e1154b1c1f453a3e4b88b50b61eb3

Die Änderung liegt vorerst nur auf Github.

SELECT DISTINCT product.uid uid,product.pid pid,product.category category,product.price price,product.price2 price2,product.directcost directcost,product.graduated_price_uid graduated_price_uid,product.tax tax,product.inStock inStock,product.unit_factor unit_factor,product.weight weight,product.offer offer,product.highlight highlight,product.title COLLATE utf8_bin title,product.image image,product.note note,product.color color,product.color2 color2,product.color3 color3,product.size size,product.size2 size2,product.size3 size3,product.gradings gradings,product.description description,product.material material,product.quality quality,product.bulkily bulkily,product.special_preparation special_preparation,product.additional additional,product.datasheet datasheet,product.uid uid,product.pid pid,product.category category,product.price price,product.price2 price2,product.directcost directcost,product.graduated_price_uid graduated_price_uid,product.tax tax,product.inStock inStock,product.unit_factor unit_factor,product.weight weight,product.offer offer,product.highlight highlight,product.bulkily bulkily,product.special_preparation special_preparation,product.additional additional,product.datasheet datasheet FROM tt_products product LEFT OUTER JOIN tt_products_cat tt_products_cat ON tt_products_cat.uid=product.category WHERE product.pid IN(34,35,36,37,38,39,95,96,100,140,141,142,144,146,172,230,306,307,309,310,311,312,313,314,315,316,317,318,319,321,324,325,331,332,333,334,335,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,363,364,365,366,367)AND 1=1 AND(product.inStock > 0)AND(product.title LIKE '%Kön%' OR product.subtitle LIKE '%Kön%' OR product.note LIKE '%Kön%' OR product.itemnumber LIKE '%Kön%')AND product.deleted=0 AND product.hidden=0 AND(product.starttime<=1476100081)AND(product.endtime=0 OR product.endtime>1476100081)AND product.fe_group IN(' ',0,-1) ORDER BY tt_products_cat.title,product.title LIMIT 6

--------------------------------------------
TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->callUserFunction#55 // call_user_func_array#6479 // tx_ttproducts_pi1->main# // tx_ttproducts_pi1_base->main#64 // tx_ttproducts_main->run#73 // tx_ttproducts_main->products_display#518 // tx_ttproducts_list_view->printView#1071 // tx_table_db->exec_SELECT_queryArray#1151 // tx_table_db->exec_SELECTquery#1609

Im Setup muss dieses eingestellt werden:


plugin.tt_products {
conf.tt_products.ALL {
collate {
title = utf8_bin
}
}
}

Für jedes weitere Suchfeld von tt_products müsste eine Zeile für dieses Feld hinzugefügt werden.
19-04-19 21:59:50 Suche
Björn Hahnefeld
Mich wundert, dass tt_products leider nicht in der indexedsearch berücksichtigt wird und dies bisher noch niemanden gestört hat. Leider ist mein Wunsch bisher noch nicht berücksichtigt worden. Aber an und für sich kann es doch nicht so aufwändig sein, die Datenbanktabellen von tt_products bei indexed_search mit in die Suche einzubeziehen?
< BACK TO FORUM