Sie befinden sich hier: Typo3 / Extensions / crawler (3.0.5)
Deutsch
English
Sonntag, 24.06.2018

crawler (3.2.0) und realurl

Mit dem derzeit aktuellen crawler (3.2.0) gibt es ein Problem im Zusammenspiel mit realurl. Dort wurden einige Methoden auf protected gesetzt, auf die der crawler zugreift. Beschrieben wird die Problematik auch hier. Durch den Patch wird dies gelöst.

Bei einer Installation auf diesem Server taucht trotz des Patches ein Problem auf. Nach dem Aufruf von

/srv/www/vhosts/[DOMAIN]/httpdocs/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf all -o queue

kommt die folgende Fehlermeldung:

PHP Fatal error:  Call to a member function setTSlogMessage() on a non-object in /srv/www/vhosts/[DOMAIN]/httpdocs/typo3conf/ext/realurl/class.tx_realurl.php on line 2452

Das Problem kann auf zweierlei Art gelöst werden:

  1. in der crawler Konfiguration deaktiviert man das Häckchen bei Use realurl urls. Anscheinend gibt es keine Nachteile bei dieser Lösung. Weshalb überhaupt der Schalter Use realurl urls vorhanden ist, leuchtet mir zur Zeit nicht wirklich ein.
  2. man geht auf die realurl Version 1.7.0 zurück. Diese muss komplett neu installiert werden, d.h. vorhandene Fassung erst mal löschen, dann die Version 1.7.0 neu installieren und Updates durchführen.
    Der installierte crawler darf nicht gepatcht sein!

Installation und Konfiguration des crawler (3.0.5)

  • Zunächst wird die Extension crawler installiert (hier: 3.0.5).
    • Wenn die Installation der Site in einem Unterverzeichnis erfolgt ist, so muss bei der Installation der Wert für frontendBasePath auf das Unterverzeichnis (z.B. /cms/) gesetzt werden. Sollte die Installation später in ein Hauptverzeichnis umziehen, so muss dieser Wert natürlich geändert werden.
  • indexed_search muss auch installiert sein (hier: 2.12.0).
  • Hier verwende ich TTV (Template for TemplaVoilà). Im Konstanten-Editor müssen unter dem Abschnitt PLUGIN-TX_DBTTV-EXPERT-SETTINGS folgende Schalter auf on gesetzt sein:
    • Enable indexing at all? [userIndexingOn]
    • Index metatags? [userIndexMetaTagsOn]
    • Index external documents? [userIndexExternalsOn]
    Dies setzt im Setup die folgenden Werte auf 1:

    config {
      index_enable = {$userIndexingOn}
      index_externals = {$userIndexExternalsOn}
      index_metatags = {$userIndexMetaTagsOn}
    }

    Sofern man nicht TTV verwendet, muss man den folgenden Eintrag in sein Setup schreiben:

    config {
      index_enable = 1
      index_externals = 1
      index_metatags = 1
    }

  • Die Konfiguration der Extension indexed_search im Setup (siehe auch setup.txt von TTV) kann folgendermassen aussehen:

    plugin.tx_indexedsearch {
      _CSS_DEFAULT_STYLE >
      _DEFAULT_PI_VARS.results = 10
      forwardSearchWordsInResultLink = 1
      blind {
        type=-1
        defOp=0
        sections=0
        media=1
        order=-1
        group=-1
        extResume=-1
        lang=-1
        desc=-1
        results=0
      }
      show {
        rules=0
        parsetimes=1
        L2sections=1
        L1sections=1
        LxALLtypes=0
        clearSearchBox = 0
        clearSearchBox.enableSubSearchCheckBox=0
      }
      search {
        rootPidList =
      }
      templateFile = [Verzeichnis]/template_css.tmpl

  • Bevor sich an die crawler-Konfiguration und die zugehörigen Skript macht, muss man noch im Typo3 Backend einen Benutzer mit dem Namen _cli_crawler anlegen, der keine Gruppenzugehörigkeit etc. benötigt.
Crawler Konfiguration "all"
  • Die Konfiguration erfolgt durch eigene Konfigurationsdatensätze. Diese erstellt man durch Links-Klick auf der Root-Seite im Seitenbaum und Wahl von Neu. Im Abschnitt Site Crawler klickt man dann auf Crawler Configuration.
    Im nebenstehenden Bild sind die notwendigen Angaben für die Konfiguration aller nicht im Frontend angemeldeter Benutzer der Internet-Site zu entnehmen.
    • Die Konfiguration hat den Namen all, dem man bei der Benutzung des crawlers noch wiederbegegnet.
    • Unter Processing Instruction Filter wird die Option Re-indexing (tx_indexedsearch_reindex) angecheckt.
    • Unabdingbar ist die Angabe der Base-url, wobei nicht das "http://" vergessen werden darf.
    • Da ich realurl verwende, ist auch die Option Use realurl urls angecheckt.
Crawler Konfiguration "admin"
  • Um die Indexierung auch für eine bestimmte Benutzer-Gruppe einzurichten, ist für diese eine eigene zusätzliche Konfiguration zu erstellen.
    Man benötigt das nur, wenn man Frontend-Benutzern die Anmeldung auf der Seite bietet und nur Ihnen zugängliche Informationen indexieren möchte, ein Beispiel:
    Auf meiner Site sind bestimmte Informationen nur von Benutzern in der Benutzergruppe admin einsehbar. Diese Informationen werden bei der Suche eines beliebigen nicht angemeldeten Benutzers nicht durchsucht bzw. aufzufinden. Für einen angemeldeten Benutzer der Gruppe admin werden die Inhalte nur dann durchsuchbar, wenn eine entsprechende Konfiguration und Indexierung vorgenommen wird.
    • Dieser Konfiguration geben wir den Namen admin.
    • Unter Processing Instruction Filter wird die Option Re-indexing (tx_indexedsearch_reindex) angecheckt.
    • Unabdingbar ist wieder die Angabe der Base-url, wobei nicht das "http://" vergessen werden darf.
    • Unter Crawl with FE usergroups wählen wir nun die Benutzergruppe admin aus. Dies ist die einzige Änderung im Vergleich zur Konfiguration all.
    • Da ich realurl verwende, ist auch die Option Use realurl urls angecheckt.
  • In klassischer Weise würde die analoge Konfiguration für all und admin in der TSconfig der Root-Seite in etwa so aussehen:

    # set up a crawl for users that arent logged in
    tx_crawler.crawlerCfg.paramSets.all =
    tx_crawler.crawlerCfg.paramSets.all {
        cHash = 1
        procInstrFilter = tx_indexedsearch_reindex, tx_indexedsearch_crawler
        baseUrl = www.domain.tld
    }
    # set up a crawl for users who have group id of 2 (=admin)
    tx_crawler.crawlerCfg.paramSets.admin < tx_crawler.crawlerCfg.paramSets.all
    tx_crawler.crawlerCfg.paramSets.admin {
        userGroups = 2
    }

    Laut Manual von crawler ist diese Art und Weise der Konfiguration nicht mehr aktuell, wird aber weiterhin unterstützt.

Indexierung mit Hilfe des crawler starten

Es gibt zwei unterschiedliche Möglichkeiten, die Indexierung mit Hilfe des

  • Automatische Aktualisierung der Indexierung durch Starten des Crawlers über cron-Jobs
  • Starten des Crawlers im Backend von Hand und nach Bedarf

Auf jeden Fall bietet es sich an, zum Testen der Einstellungen, sich über ssh als root am Server anzumelden und dort auf der Kommandozeile das Funktionieren der CLI-Funktionen zu überprüfen. Das auf dem Server installierte PHP5 sollte das CLI-Paket installiert haben. Bei meiner opensuse-Installation ist das bereits von Haus aus der Fall.

Erste Tests

Als erster Test eignet sich der folgende Aufruf:

[Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf all

Man beachte den hervorgehobenen Namen der Konfiguration! Die Ausgabe des Befehls sollte in etwa so aussehen:

[16.03.10 16:56] home/
[16.03.10 16:56] home/login-and-logout/
[16.03.10 16:56] home/login-fehler/
[16.03.10 16:56] home/erfolgreicher-logout/
[16.03.10 16:56] examples/headlines/
[16.03.10 16:56] examples/graphical-headlines/
[16.03.10 16:56] examples/content-elements/
[16.03.10 16:56] examples/content-elements/mailform/
[16.03.10 16:56] examples/content-elements/form-sent/
[16.03.10 16:56] examples/content-elements/tables/
[16.03.10 16:56] examples/content-elements/text-with-image/
[16.03.10 16:56] examples/content-elements/content-in-tabs/
[16.03.10 16:56] examples/content-elements/content-in-tabs/elements/
[16.03.10 16:56] examples/markups/
[16.03.10 16:56] examples/markups/more-examples/
[16.03.10 16:56] examples/flexible-content-elements/
[16.03.10 16:56] news/newsdetails/
...

Hat man die realurl Option in der Konfiguration nicht angecheckt, dann sieht das Ergebnis in etwa so aus:

[16.03.10 10:48] index.php?id=23
[16.03.10 10:48] index.php?id=25
[16.03.10 10:48] index.php?id=31
[16.03.10 10:48] index.php?id=33
[16.03.10 10:48] index.php?id=83
[16.03.10 10:48] index.php?id=71
[16.03.10 10:48] index.php?id=86
[16.03.10 10:48] index.php?id=84
[16.03.10 10:48] index.php?id=87
...

Bei ersten Starten des crawler-Skripts auf der Kommandozeile wurde hier der folgende Fehler ausgegeben:

localconf.php not found

Um das zu beheben, mussten Benutzer und Gruppe für typo3conf/localconf.php, typo3conf/realurl_conf.php und für die Extension typo3conf/ext/dropdown_sitemap auf wwwrun:www gesetzt werden. Gleiches gilt auch für die typo3conf/realurl_conf.php, sofern realurl verwendet wird.

Funktioniert der obige Befehl, können mit dem Parameter crawler_im in Abhängigkeit von zusätzlichen Parametern unterschiedliche Aktionen angestossen werden:

  • -o queue
    Mit diesem Parameter werden die gelisteten URLs an die Warteschlange weitergegeben. Dabei wird in der Regel davon ausgegangen, dass ein cron-Skript die spätere Weiterverarbeitung erledigt, also z.B.:

    [Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf all -o queue

  • -o url
    Entspricht dem Download URLs button im Backend-Modul des Crawlers
  • -o exec
    Hiermit wird die Warteschlange umgehend abgearbeitet, z.B.:

    [Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf all -o exec

Automatische Aktualisierung

Mit Hilfe von cron-Jobs lässt sich die Aktualisierung der Indexierung automatisieren.

[Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf all -o queue

Mit diesem Befehl werden von der Seite mit der id 1 ausgehend in einer Tiefe von 99 Unterseiten für die crawler-Konfiguration all alle gefundenen Seiten in die Warteschlange aufgenommen.

[Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler 1 -d 99 -conf all

Mit dem obigen Befehl wird die Indexierung für die crawler-Konfiguration all dann ausgeführt.

Analog geht man dann noch für die Gruppen-Konfiguration admin vor:

[Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf admin -o queue
[Pfad zum Site-Verzeichnis]/typo3/cli_dispatch.phpsh crawler 1 -d 99 -conf admin

Zu beachten sind die fett-kursiv hervorgehobenen "Konfigurationen".

Crawler im Backend starten

Den crawler erreicht man im Backend über Web:Info. Dort findet man den Menüpunkt Site Crawler im oberen Dropdown-Menü.

Zunächst wählt man den Menüpunkt Start Crawling im Dropdown-Menü darunter. Man muss in der Auswahl unter Configurations eine Konfiguration auswählen. Wir haben all und admin zur Verfügung stehen.

Danach klicken wir auf Update und erhalten dann etwa eine Liste wie abgebildet.

Als nächstes klicken wir auf Crawl URLs, um den Crawler zu starten.

Wir erhalten nun eine Meldung darüber, wie viele URLs gefunden und auf der Warteschlange eingetragen wurden. Wir klicken an dieser Stelle auf Continue and show Log.

In der Crawler Log erkennen wir nun die neu in der Warteliste eingetragenen Seiten daran, dass diese noch keinen Eintrag OK in der Spalte Status haben.

Bei den Einträgen mit OK in der Spalte Status handelt es sich um bereits früher erfolgreich durchgeführte Indexierungsdurchgänge.

Jetzt wollen wir die Indexierung anschieben. Hierfür wählen wir aus der Dropdown-Liste den Menüpunkt Crawling Processes und klicken auf das Plus-Symbol im grünen Kreis .

Damit starten wir einen Indexierungs-Prozess. Die Anzeige wechselt automatisch und weist uns darauf hin, dass wir den Status nach Klicken auf den Button verfolgen können.

Nach dem Aktualisieren sieht man den aktuellen Fortschritt der Indexierung am Prozentbalken.