„indexed_search“ richtig konfigurieren und nutzen: Indexierte Suche mit TYPO3
Seit der TYPO3-Version 3.8 ist „indexed_search“ eine so genannte System-Extension. Sie müssen die Extension also nicht erst aus dem TYPO3 Extension Repository (TER) herunterladen, sondern wählen sie aus der Liste der installierbaren Extensions aus. Gehen Sie hierzu links im Modulbereich auf „Tools > Ext Manager“ und wählen oben im Pull-Down-Menü den Eintrag „Install Extensions“.
Anschließend scrollen Sie zum Bereich „Frontend Plugins“ hinunter und klicken auf die Kugel mit dem „+“, um die Extension zu installieren. Im nächsten Fenster erscheint nun eine sehr lange Liste. Der erste Abschnitt legt die unbedingt benötigten Datenbanken an. Die weiteren Einträge beziehen sich grundsätzlich auf die Programme, mit deren Hilfe es möglich ist, mit „indexed_search“ auch Dokumente selbst zu durchsuchen. So können Sie beispielsweise in PDF-, Word- oder Excel-Dokumenten suchen. Die folgende Tabelle listet mögliche externe Programme für die Suche in Dokumenten.
Dokumenten- typ | Name des externen Programms | URL |
Xpdf | http://www.foolabs.com/xpdf/download.html | |
ZIP | unzip | http://www.info-zip.org/UnZip.html |
Word | catdoc | http://www.45.free.net/~vitus/software/catdoc/ (Linux) http://www.webaugur.com/wares/files/ (Win) |
Excel | xlhtml | http://chicago.sourceforge.net/xlhtml/ |
Powerpoint | xlhtml | http://chicago.sourceforge.net/xlhtml/ |
RTF | UnRTF | http://www.gnu.org/software/unrtf/unrtf.html |
Geben Sie nach der Installation der Programme alle nötigen Pfade in den entsprechenden Feldern an. Wenn Sie eine fertig eingerichtete TYPO3-Umgebung benutzen, die bereits von Ihrem Hoster konfiguriert wurde, lassen Sie diesen Schritt komplett aus und gehen direkt nach unten. Klicken Sie auf „Update“, um die Extension zu installieren.
Legen Sie an einer beliebigen Stelle in Ihrem Seitenbaum eine neue Seite an und nennen Sie diese beispielsweise „Suche“. Der Seitentyp sollte auf „Nicht im Menü“ stehen, da Sie die Seite nicht direkt aufrufen können – es wird ja kein Suchwort übergeben. Auf der Seite legen Sie einen neuen Seiteninhalt vom Typ „Plugin“ an.
Als Erweiterung wählen Sie schließlich „Indexsuche“. Nun muss zunächst die Suchmaschine beziehungsweise der Indexer (der Mechanismus, der die Seiten in den Index einträgt) eingeschaltet werden. Dafür tragen Sie den folgenden TypoScript-Code in das Setup des Root-Template ein:
page.config.index_enable = 1
Listing 1
Zum Schluss müssen Sie die Suche sinnvoll konfigurieren. Legen Sie dazu entweder ein Erweiterungs-Template an oder schreiben Sie zunächst den TypoScript-Code, den Sie über den Softlink am Ende dieses Artikels auf der T3N-Website oder auf der beiliegenden Heft-CD finden, ebenfalls in das Setup des Root-Template.
„indexed_search“ per TypoScript einbinden
Wenn Sie das Suchfeld flexibel auf den Seiten einbinden wollen, statt es per Content-Element zu positionieren und zudem beim Layout einen möglichst großen Gestaltungsfreiraum wünschen, ist die Extension „macina_searchbox“ [1] die richtige Wahl. Installieren Sie diese zunächst über den Extension Manager.
Sobald dies geschehen ist, können Sie die Suchbox entweder über ein Content-Element auf einer Seite einbinden (das muss aber auf jeder Seite geschehen) oder eben per TypoScript. Legen Sie dazu in Ihrem Template einen Marker namens „###SEARCHBOX###“ oder den Objektpfad (bei TemplaVoilà) „lib.searchbox“ an. Nun fügen Sie folgenden TypoScript-Code in den Setup-Bereich Ihres Root-Template ein:
# Bei Verwendung von Markern page.10.marks.SEARCHBOX < plugin.tx_macinasearchbox_pi1 # Bei Verwendung von Templavoilá # lib.searchbox < plugin.tx_macinasearchbox_pi1 # Konfiguration der Searchbox plugin.tx_macinasearchbox_pi1 { # ID der Seite, die das indexed-search plugin enthält pidSearchpage = 77 # Pfad zum Searchbox-Templatefile templateFile = fileadmin/searchbox.htm }
Listing 2
Kopieren Sie das Template-File der Extension, das Sie unter dem Pfad „/typo3conf/ext/macina_searchbox/pi1/template.htm“ finden, als „searchbox.htm“ in Ihr „fileadmin-Verzeichnis“. Diese Template-Datei können Sie jetzt nach Ihren Wünschen anpassen. Welchen Marker Sie dabei verwenden dürfen, wird in der Datei ausführlich ganz am Anfang erklärt. Somit ist es auch möglich, eine völlig barrierefreie Suche zu realisieren.
Fehler in der Seitenindizierung beheben
Mitunter kommt es vor, dass Sie die Suche scheinbar fehlerfrei nach Anleitung eingebunden haben und trotzdem feststellen, dass sie nicht funktioniert, also keine Seiten indiziert werden.
In diesem Fall sollten Sie zunächst überprüfen, wie die Suchmaschine wirklich arbeitet. Gehen Sie hierzu im Modulbereich auf „Web > Info“ und wählen Sie aus dem Pull-Down-Menü ganz oben rechts den Eintrag „Indexsuche“ aus.
Nun klicken Sie im Seitenbaum auf Ihre Rootseite und erhalten eine Liste, ähnlich der in der folgenden Abbildung. Dabei gibt die Spalte die indizierte Seite an, daneben steht deren Titel, wiederum daneben die Version, die in der Suche enthalten ist. Wie Sie sehen, existiert die Seite „Home“ in dieser Suche sogar dreimal. Dies hängt damit zusammen, dass die Seite im Laufe der Zeit verändert und jedes Mal eine neue Version in der Datenbank gespeichert wurde. Unter „Indexed“ sehen Sie beispielsweise, welche Version (also an welchem Datum) indiziert wurde.
Mit dem kleinen Papierkorb-Symbol können Sie diejenigen Versionen löschen, die Sie überhaupt nicht mehr in Ihrem Index haben wollen. Mit dem Pull-Down-Menü unter „Indizierte Suche“ lassen sich die Ansicht und die Tiefe der Darstellungen (wieviele Ebenen angezeigt werden) einstellen.
Wenn Sie an dieser Stelle gar keine Anzeigen bekommen oder zwar generell eine Anzeige vorhanden ist, nur aber nicht von einer spezifischen Seite, dann liegt ein Problem bei der Indizierung vor. Generell geht „indexed_search“ so vor, dass eine Seite genau dann im Index landet, wenn diese in den Cache geschrieben wird. Dies wiederum bedeutet im Umkehrschluss, dass einerseits Seiten, die nicht gecached sind, auch nicht im Index landen.
Andererseits gelangt die Seite erst beim Caching in den Index. Um dies auszuschließen, loggen Sie sich am besten aus dem Backend aus und besuchen Sie die Seite als Besucher. Nachdem Sie eine Zeit lang hin und her geklickt haben, sollten Sie erneut überprüfen, ob die besuchten Seiten mittlerweile aufgenommen wurden. Ist dies nicht der Fall, hat offensichtlich das Caching nicht vernünftig funktioniert. Häufig sind Extensions der Übeltäter, da sich in diesen das Caching zentral ausschalten lässt.
Daher benötigen Sie eine Möglichkeit, um zu überprüfen, welche Extension dafür verantwortlich sein könnte. Durchsuchen Sie Ihr Extension-Verzeichnis „/typo3conf/ext/“ nach Dateien, die die Zeichenkette „$GLOBALS[‚TSFE‘]->set_no_cache();“ enthalten und kommentieren Sie diese mittels „//“ aus. Nun sollte Ihr Caching wieder funktionieren und damit auch die Indizierung. Falls Sie unter Linux arbeiten, können Sie auch wie folgt vorgehen:
- Installieren Sie zunächst die Extension „mw_shell“ über den Extension-Manager.
- Nach dem Neuladen des Backends finden Sie links im Modulbereich bei „Tools“ den Eintrag „Kommandozeile“.
- Wählen Sie nun als Arbeitsverzeichnis „typo3conf“ aus.
- Als Befehl geben Sie ein: „grep -r -n "set_no_cache()" *“
- Anschließend erhalten Sie eine Liste all jener Dateien und Fundstellen, die „set_no_cache()“ enthalten.
Nun können Sie direkt in diese Datei gehen, beispielsweise über die Extension „Quixplorer“ (Extension Key: „quixplorer“) oder über Ihren FTP-Zugang. Kommentieren Sie die angegebenen Zeilen mittels „//“ aus.
Achtung: Nicht immer bedeutet eine Fundstelle automatisch, dass diese nicht genau so vom Autor der Extension vorgesehen war. Das heißt, ein Auskommentieren könnte durchaus die Funktion der Extension beeinträchtigen. Daher sollten Sie vorsichtig vorgehen. Probieren Sie eine Fundstelle aus und überprüfen Sie anschließend, ob die Indizierung wieder funktioniert. Wenn nicht, kommentieren Sie die Stelle wieder ein und fahren fort zur nächsten. |
Suche auf bestimmte Inhalte begrenzen
In der Grundeinstellung indiziert „indexed_search“ alles, was auf einer Seite zu finden ist. Tatsächlich ist die Suche sehr gierig und nimmt beinahe den gesamten Quelltext in den Index auf. So kann es passieren, dass Sie praktisch jede Seite als Suchergebnis erhalten, wenn Sie nach einem Begriff suchen, der im Menü auftaucht – schließlich ist das Menü ja auf jeder Seite eingebunden.
Um hier der Indizierungswut Einhalt zu gebieten, müssen Sie lediglich den für Sie wichtigen Inhalt (beispielsweise den Marker, der den Inhalt trägt) mit den folgenden zwei Kommentaren im Template einschließen und schon beschränkt die Suche ihren Bereich auf eben diesen:
<!--TYPO3SEARCH_begin--> ... Inhalt ... <!--TYPO3SEARCH_end-->
Listing 3
Beachten Sie aber, dass der Mechanismus nur funktioniert, wenn die Seiten neu in den Index kommen. Für alle Seiten, die dort bereits enthalten sind, klappt dies erst, wenn der Index-Eintrag (siehe Abschnitt „Fehler in der Seitenindizierung beheben“) vorher gelöscht wird.
Suche auf Teilbereiche der Website beschränken
Nicht immer sollen alle Unterseiten einer Website indiziert werden, beispielsweise bei der Suche in einem Intranet. Dies zu realisieren ist an sich recht einfach. Die große Anzahl an Fragen in den TYPO3-Mailinglisten zeigt allerdings, dass hier Aufklärungsbedarf besteht:
- Legen Sie innerhalb des Teilbaums, den Sie alleine durchsuchbar halten wollen, eine eigene Suchseite an, die das Such-Plugin enthält (siehe folgende Abbildung).
- Erstellen Sie ein Extension-Template auf dieser Seite.
- Schreiben Sie folgenden TypoScript-Code in den „Setup“-Bereich des Template:
plugin.tx_indexedsearch._DEFAULT_PI_VARS.sections = rl1_36
Listing 4
Dies spezifiziert die so genannte Sektion. Beachten Sie, dass der String mit „rl“ (in Kleinbuchstaben) anfängt. Anschließend folgt die Ebene, auf der die Suche beginnt. Im obigen Fall ist dies die Ebene 1, also eine Ebene unter der Root-Ebene. Die Root-Ebene selbst hätte die Nummerierung 0. Die Seite „Login/Logout“ beispielsweise hätte die Ebenennummer 3. Es folgt ein Unterstrich und dann die ID der Seite, ab welcher gesucht werden soll. In diesem Fall also die ID 36. Somit lautet der komplette String: „rl1_36“.
Meta-Tags nicht in die Suchergebnisse übernehmen
Leider gibt es keine einfache Lösung, um zu verhindern, dass Ihre Meta-Tags in den Suchergebnissen auftauchen. Das liegt daran, dass der Mechanismus für das Durchsuchen von Meta-Tags in der Crawler-Datei hart-kodiert ist. Die verantwortliche Datei finden Sie unter „/typo3/sysext/indexed_search/class.indexer.php“.
Fertigen Sie zunächst eine Sicherheitskopie der obigen Datei an. Suchen Sie nun die beiden folgenden Code-Zeilen in der Datei und kommentieren Sie diese aus, indem Sie ein „//“-Zeichen vor jede Zeile schreiben, anschließend speichern Sie die Datei.
if(stristr($meta[$i]['name'],'keywords')) ... if(stristr($meta[$i]['name'],'description')) ...
Listing 5
Sie können auch nur eine der beiden Zeilen auskommentieren. Die erste Zeile ist dafür zuständig, dass die Keywords indiziert werden, die zweite ist für die Description verantwortlich. Vergessen Sie nicht, dass die Einstellungen nur bei neuem Indizieren wirksam werden. Löschen Sie also zuerst alle Einträge aus dem Index und lassen Sie diese neu indizieren.
Suchergebnisse anpassen
Für die Darstellung der Suche ist ein HTML-Template mit dem Namen „indexed_search.tmpl“ zuständig, das Sie im Ordner „typo3/sysext/indexed_search/pi“ finden. Kopieren Sie zunächst diese Datei in einen eigenen Ordner unterhalb von „fileadmin/“ und fügen Sie folgenden TypoScript-Code in den Setup-Bereich Ihres Root-Template ein:
plugin.tx_indexedsearch.templateFile = fileadmin/ indexed_search.tmpl
Listing 6
Das Template ist in fünf Abschnitte unterteilt: „TEMPLATE_SEARCH_FORM“ regelt, wie das Suchformular dargestellt wird. Der Abschnitt „TEMPLATE_RULES“ steuert die Darstellung der Suchregeln, sofern diese angezeigt werden. Die Links der Ergebnis-Abschnitte sind im Template in dem Bereich „TEMPLATE_RESULT_SECTION_LINKS“, die Überschriften dieser Abschnitte in TEMPLATE_SECTION_HEADER“ definiert. Die Suchergebnisse selbst befinden sich im letzten Abschnitt „TEMPLATE_RESULT_OUTPUT“. Die im Template verwendeten Marker sind meist selbsterklärend. Ansonsten kann die Funktion durch etwas experimentieren leicht herausgefunden werden.
Dieser Artikel ist ein Auszug aus folgendem Buch: | |
Titel: | TYPO3 und TYPOScript – Kochbuch |
Autoren: | Alexander Ebner, Patrick Schuster |
Verlag/ISBN: | Hanser/978-3446410466 |
Preis/Umfang: | 49,90 EUR/848 Seiten, Flexcover |
Die Autoren
Alexander Ebner arbeitet als System-Spezialist in einem bundesweiten Systemhaus sowie als freier Berater. Als Entwickler setzt er seit Jahren auf PHP/MySQL und lernte dadurch auch TYPO3 als CMS kennen und schätzen. Patrick Lobacher (geb. Schuster) ist freier Entwickler, Autor, Mitglied in der TYPO3 Association und berät seit 1996 Unternehmen beim Einsatz von Webtechnologien, seit 2002 zunehmend im TYPO3-Umfeld.
Gutes Tutorial – aber bitte verkleinert das Foto der Autoren auf der letzten Seite (1.535px × 1.152px).
Sehr gelungen, nur das Foto auf der letzen Seite fällt ein wenig aus dem Rahmen^^