Die indexed_search findet nur die Datensätze, die mit den gleichen Benutzergruppen indiziert worden sind, wie der aktuell suchende Seitenbesucher. Das kann etwas nervig sein, wenn man viele Benutzergruppen hat und die alle unterschiedlich miteinander kombiniert werden können.
Beispiel: Es gibt nur zwei Bentuzergruppen „Gruppe A“ und „Gruppe B“. Wenn die Seiten also für Gruppe A und Gruppe B indiziert worden sind, und der Besucher der Webseite einer von beiden Gruppen angehört, werden Seiten gefunden. Gehört der Besucher gleichzeitig zu Gruppe A und Gruppe B, gibt es ein Problem – es werden beim Suchen keine Seiten gefunden. Nach dem Prinzip „Better save than sorry“ (steht so im Quelltext) wird lieber nichts ausgegeben.
Die Funktion, die entscheidet, ob ein Ergebnis angezeigt werden soll oder nicht, heißt „checkResume“ in der Klasse tx_indexedsearch. Mit ein paar kleinen Anpassungen sollte die Suche aber in Zukunft auch Datensätze finden, selbst wenn sie nicht direkt mit der Benutzergruppen-Kombination indiziert worden sind. Dazu splittet man nach der direkten Abfrage, wenn sie kein Ergebnis geliegt hat, die Gruppen des aktuellen Besuchers und fragt alle Gruppen-Kombinationen einzeln ab.
function checkResume($row) {
[…]
if ($row[‚item_type‘]) {
// hier so ähnlich wie unten umsetzen
} else {
// Ordinary TYPO3 pages:
if (strcmp($row[‚gr_list‘],$GLOBALS[‚TSFE‘]->gr_list)) {
$res = $GLOBALS[‚TYPO3_DB‘]->exec_SELECTquery(‚phash‘, ‚index_grlist‘, ‚phash=‘.intval($row[‚phash‘])
.‘ AND gr_list=‘.$GLOBALS[‚TYPO3_DB‘]->fullQuoteStr($GLOBALS[‚TSFE‘]->gr_list, ‚index_grlist‘));
// split the groups and check each group separately
if ($GLOBALS[‚TYPO3_DB‘]->sql_num_rows($res)) {
return TRUE;
}
$groupSplit = t3lib_div::trimExplode(‚,‘, $GLOBALS[‚TSFE‘]->gr_list);
foreach ($groupSplit as $group) {
if($group > 0) {
$res = $GLOBALS[‚TYPO3_DB‘]->exec_SELECTquery(‚phash‘, ‚index_grlist‘, ‚phash=‘.intval($row[‚phash‘])
.‘ AND gr_list=‘.$GLOBALS[‚TYPO3_DB‘]->fullQuoteStr(‚0,-2,‘.$group, ‚index_grlist‘));
if ($GLOBALS[‚TYPO3_DB‘]->sql_num_rows($res)) {
return TRUE;
}
}
}
return FALSE;
} else {
# debug(‚Resume can be shown, because the document was in fact indexed by this combination of groups!‘.$GLOBALS[‚TSFE‘]->gr_list.‘ – ‚.$row[‚item_title‘].’/‘.$row[‚phash‘],1);
return TRUE;
}
}
}
Sehr hilfreicher Beitrag, danke! Ich war so frei, den Codeabschnitt als Ausgangsbasis für eine kleine Extension zu verwenden, die das Problem ohne Änderungen am Kern löst. Zu finden unter http://www.website-schmied.de/toolbox/typo3-extensions/