Zum Inhalt springen

th_specialelements: Inhalte werden nicht indexiert

Erstellt am 3. Februar 2008 · 2 Antworten · letzte Antwort am 20. August 2008

Tags: Inhaltselemente, Suche, Frage

la_sabian ·

Hallo zusammen,

ich benutze überall auf meiner Seite Inhaltselemente vom Typ "Special Element". Jetzt habe ich die Indexed-Search installiert und es werden leider keine Wörter indexiert, die in diesen Spezial-Inhaltselementen enthalten sind. In meinem Index stehen momentan also nur Seitenüberschriften.

Weiß jemand, wie man die Spezial-Inhalte auch indexieren kann?

Vielen Dank im Voraus,
Sabian

tb238 ·

Ich habe genau dasselbe Problem mit th_specialelements.

@all: Hat jemand dazu einen Lösungsvorschlag?

Was ich rausgefunden habe:
Wenn ein Inhalt für ein specialelement angelegt wird, erzeugt es einen Eintrag in der Tabelle tt_content. Dabei wird in die Spalte Ctype der Wert "specialelements" geschrieben. Wenn man dies dann nachträglich ändert, z.B. in "text", dann haut zwar die Ausgabe im Front- und Backend nicht mehr hin, aber der Inhalt wird dann von Indexed Search indiziert.

@la_sabian: Vielleicht bist da ja schon ein bisschen weiter gekommen als ich und könntest mir mal deine Erkentnisse posten.

Für Antworten wäre ich sehr dankbar!

MfG Thomas

tb238 ·

Für alle die noch Interesse an diesem Thema haben. Ich habe eine Lösung dafür gefunden. Das ganze liegt am Seitencache den indexed_search beim indizieren der Seiten generiert. Da steht dann an den Stellen wo eigentlich der Inhalt des Specialelemnts auftauchen soll nur ein Verweis nach der Art "<!--INT_SCRIPT.e1cd250c5ff6490322888ba5171d174c-->", das heißt das zu dieser Zeit der Inhalt von th_specialelments noch gar nicht bereitgestellt ist und somit auch nicht referenziert werden kann.

Mein Lösungsvorschlag setzt genau da an! Ich ersetzte also die Zeile "<!--INT_SCRIPT.e1cd250c5ff6490322888ba5171d174c-->" mit dem eigentlichen Specialelement, welches in Form einer .tmp Datei im Ordner typo3temp abgelegt ist. Das ganze sieht dann bei mir so aus:

Ich habe in die Datei "class.indexer.php" im Ordner "typo3\sysext\indexed_search" ab der Zeile 546 folgenden Code eingefügt.

                                                                                         //////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// indexed_search cache richtig setzen für specialelements
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////            

            $pattern = '/uid:(.*)\/specialelements \[begin\] -->/';
            preg_match_all($pattern,$this->conf['content'],$matches);                       
            foreach($matches[1] as $content_id){
	    $handle = opendir(PATH_site.'typo3temp');
            $cacheFile = false;
            while ($file = readdir ($handle)) {
	                if($file != "." && $file != "..") {
	                  $pattern_file = '/thspecialele.*'.$content_id.'_.tmp/';
	                  preg_match($pattern_file,$file,$matches_file);	                  
	                  if(!empty($matches_file)){
	                     $cacheFile = $file;
	                    }                                            
	                }	                
	            }
	            closedir($handle);
	            if($cacheFile){
                    $file_content = file(PATH_site.'typo3temp/'.$cacheFile);
		            $pattern = '/<!--  CONTENT ELEMENT, uid:'.$content_id.'.*\n.*(<!--.*-->)/';
		            preg_match($pattern,$this->conf['content'],$matches);
		            $file_content[0] = preg_replace('/.*\|/','',$file_content[0]);
		            $file_content = implode('',$file_content);
		            $this->conf['content'] = str_replace($matches[1],$file_content,$this->conf['content']);
	            }
            }
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// indexed_search cache richtig setzen für specialelements
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////