Hallo
Ich habe mal ne eigentlich simple Frage zur indexed_search Extension.
Kann ich als Startpunkt meiner Suche nur Seiten auswählen, die die folgenden Bedingung erfüllt: Der Seite muss ein TS-Template zugewiesen sein und in dem Template mussein Häckchen vor Rootlevel stehen.
Abweichende Angebe über search.rootPidList werden ignoriert, sofern die angegebene Seite nicht obige Bedingung erfüllt.
Daraus leite ich dann weiter ab, dass eine Suche auf bestimmte Bereiche innerhalb der Website ausgeschlossen ist.
Habe ich damit recht? #paralyzed#
Gruß
Christian
Ob du recht hast weiss ich nicht, aber falls du eine Antwort auf deine Frage gefunden hast, dann wäre ich sehr daran interessiert...
Hallo zusammen,
ist leider so - hier ein Auszug aus der class.tx_indexedsearch.php:
// Setting the list of root PIDs for the search. Notice, these page IDs MUST have a TypoScript template with root flag on them! Basically this list is used to select on the "rl0" field and page ids are registered as "rl0" only if a TypoScript template record with root flag is there.
Butter bei die Fische, auch wenn das Modding von globalen Extensions unschick ist.
Folgenden Code in der Funktion compileResult vor dem switch-Block ergänzen:
/* procedure to get certain page branch(es)
* desires attribute plugin.tx_indexedsearch.search.startPIDlist to be set
* to one or more (comma-separated) integers of Page IDs to search in, including subpages
* please remind to include function isInRootline as well (see below)
*/
$sPIDs = $this->conf["search."]["startPIDlist"];
if (!empty($sPIDs)) {
$newResultRows = array();
$sPIDs = explode(",",$sPIDs);
reset ($resultRows);
while (list($key,$vals) = each($resultRows)) {
$valid = false;
foreach ($sPIDs as $sPID) {
if ($this->isInRootline($vals["page_id"],$sPID)) {
$valid = true;
}
}
if ($valid)
$newResultRows[$key] = $vals;
}
$resultRows = $newResultRows;
}
/*** End of insertion ***/
Folgende Funktion noch in die Klasse aufnehmen:
function isInRootline($uid,$pid)
{
if ($uid==0)
return false;
$q = "SELECT uid,pid FROM pages WHERE uid=$uid";
$res = mysql(TYPO3_db,$q);
if ($res) {
$row = mysql_fetch_assoc($res);
if ($row["uid"]==$pid)
return true;
else
return isInRootline($row["pid"],$pid);
#end if
} else {
return false;
}
}
Nun noch im Zweig der betreffenden Suche ein Extension-Template anlegen und folgenden TS-Code ins Setup schreiben:
plugin.tx_indexedsearch.search.startPIDlist = ...(Liste von zu durchsuchenden Seiten-IDs)
Alles natürlich ohne Gewähr. Für Verbesserungen, Bugs usw. bin ich jederzeit zu haben. Hoffe, es hilft jemandem.
Gruß, njutn