Crawler erweitern um Rekursion und Where-Bedingung

Der Crawlwer ist eine Extension, die für die Suche (indexed_search) Seiten indizieren kann. Wichtig ist dabei die richtige Konfiguration des Crawlers, die besonders interessant ist, wenn man Datesätze als Detailseiten indizieren möchte. Die Crawler-Konfiguration habe ich bereits hier beschrieben:
Crawler Extension Konfiguration

Die Konfiguration des Crawlers ermöglicht es, Datensätze von einer bestimmten Seite zu holen. Es ist jedoch nicht möglich, wenn die Datensätze auf mehrere Ordner verteilt sind. Natürlich kann man dann pro Ordner eine neue Konfigurationsderektive angeben. Aber wenn die Datensätze auf Jahres- oder sogar Monatsordner verteilt sind, müsste in jedem neuen Monat/Jahr die Konfiguration angepasst werden. Eine weitere Einschränkung des Crawlers ist die fehlende Möglichkeit, eine zusätzliche Where-Bedingung anzugeben. Das könnte eine Einschränkung nach Zeit oder einem weitere Kriterium sein.

Daher habe ich eine Extension geschrieben, die den Crawler erweitert und diese zwei Probleme löst. Im ersten Fall habe ich eine Rekursion hinzugefügt. Es werden also alle Kindseiten zu der angegebenen Seite selektiert und in die endgültige Abfrage hinzugefügt. Außerdem ist es möglich, eine Where-Bedingung anzugeben.

Folgende Änderungen in der Funktion expandParameters vornehmen (ansonsten bleibt die Funktion gleich):

$lookUpPid = isset($subpartParams['_PID']) ? intval($subpartParams['_PID']) : $pid;
// recursion added by natalia
// child pages
$pages = array();
$pages[] = $lookUpPid;
// Level 1
$childPages = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', 'pages', 'pid = '.(int)$lookUpPid.t3lib_BEfunc::deleteClause('pages'));
if(count($childPages)) {
	foreach($childPages as $page) {
		$pages[] = $page['uid'];	
	}
	$pages = array_unique($pages);
	// Level 2
	$childPages2 = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', 'pages', 'pid IN ('.implode(',', $pages).')');
	if(count($childPages2)) {
		foreach($childPages2 as $page) {
			$pages[] = $page['uid'];	
		}
		$pages = array_unique($pages);
		// Level 3
		$childPages3 = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', 'pages', 'pid IN ('.implode(',', $pages).')');
		if(count($childPages3)) {
			foreach($childPages3 as $page) {
				$pages[] = $page['uid'];	
			}
			$pages = array_unique($pages);
		}
	}
}
$fieldName = $subpartParams['_FIELD'] ? $subpartParams['_FIELD'] : 'uid';
if ($fieldName==='uid' || $TCA[$subpartParams['_TABLE']]['columns'][$fieldName])	{
 
	$whereClause = 'pid IN ('.implode(',', $pages).')';
	if($subpartParams['_WHERE']) {
		$whereClause.= ' '.$subpartParams['_WHERE'];
	}
	$whereClause.= t3lib_BEfunc::deleteClause($subpartParams['_TABLE']);
 
	$rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
		$fieldName,
		$subpartParams['_TABLE'],
		$whereClause,
		'',
		'',
		'',
		$fieldName
	);
 
	if (is_array($rows))	{
		$paramArray[$p] = array_merge($paramArray[$p],array_keys($rows));
	}
}

Kommentare sind geschlossen.