Zum Inhalt springen

Caching bei Indexed Search und eigener Extension

Erstellt am 22. August 2008 · 4 Antworten · letzte Antwort am 26. August 2008

Tags: Cache & Performance, Suche, Frage

dannyKay ·

Hallöchen,

ich wühle mich schon seit einigen Tagen durch das Forum und habe jetzt das Problem, dass mich die Fülle an Informationen mehr verwirrt als alles andere...

Ich habe folgendes Szenario:
Ich habe mir in Typo3 v2.1.6 per Kickstarter eine Extension geschrieben, die Personenbeschreibungen verwaltet.
Dazu werden in einem Sys-Ordner Datensätze gepflegt, die über ein Frontend-Modul angezeigt werden.

Die Klasse dahinter weiss, dass der list_view gewünscht ist, wenn kein Parameter in der URL steht, und dass detail_view angesagt ist, wenn eine Personen-ID übergeben wird.
Die Extension lässt natürlich nicht zu, dass die Seiten gecacht werden, weil man sonst nicht an die detail_views kommt.

Soviel habe ich jetzt nach Lektüre einschlägiger Threads schon mal verstanden:
Dass die Indexed Search meine detail_views nicht findet, liegt in der Natur der Dinge.
Da meine Extension nich cachen lässt, kann die Indexed Search damit nichts anfangen.

Nun meine Fragen:

1. Gibt es überhaupt eine Lösung für dieses Problem?
2. Wenn ja, kann mir dann bitte jemand ein entsprechendes Schlagwort an den Kopf werfen?

Vielen Dank für Eure Hilfe
Daniela

marlan ·

Hallo,

ich habe derzeit das gleiche Problem - wie indiziere ich nicht gecachte Seiten bei Extensions.
Alle meine Links in den Extensions haben den Parameter no_cache=1
angehängt.

Laut folgendem Wikieintrag:
http://wiki.typo3.org/index.php/Ext_crawler

Pages that are not cached, such as pages with non-cached plugins (tt_products, etc.) or set to NO-CACHE are not indexed. If you want to add these types of pages to indexed search, you must use crawler (and here we are!)

Ist das wohl über die Crawler Extension möglich - funktioniert bei mir leider nur nicht🙁

Alternativ kann man wohl auch bei Extensions für ein entsprechendes caching sorgen, wenn man bei den Link Funktionen den Parameter cache auf 1 setzt.
So erzeugt dann wohl jeder Parameterwert ein eigenen cache Eintrag.

marlan ·

Bin jetzt etwas weitergekommen.
Wenn man die Seite über die crawler Extension indizieren lässt,
kann man einen chash für die Seite generieren lassen.
Beispiel:

tx_crawler.crawlerCfg.paramSets {
mitarbeiter = &tx_people_pi1[uid]=[|_TABLE:tx_people;_FIELD:uid]
mitarbeiter.cHash=1
mitarbeiter.pidsOnly = 11
mitarbeiter.baseUrl = http://my.domain.tld/
mitarbeiter.procInstrFilter = tx_indexedsearch_reindex, tx_indexedsearch_crawler
}

Dieser Hash bewirkt dann, dass die Seite im cache und Index landet:
http://typo3.org/development/articles/the-mysteries-of-chash/page/3/

Am besten auf der Detailseite noch den Titel ändern:

$GLOBALS['TSFE']->page['title'] = $data['name'];
$GLOBALS['TSFE']->indexedDocTitle = $data['name'];

Damit die Detailseiten im Suchergebnis nicht alle den gleichen Titel haben.

Das funktioniert natürlich nur solange das Plugin nicht über ein USER_INT/COA_INT
eingebunden ist und

var $pi_checkCHash = true;

gesetzt ist.
Die Seite also grundsätzlich cachbar ist.

Bzw. ist es vermutlich besser die Seite von vornherein aufs caching auszulegen - also bei den Linkfunktionen die entsprechen Parameter richtig setzen:
http://www.sk-typo3.de/Richtiges-Cachen-mit-pi_base.188.0.html

dannyKay ·

Okay, nachdem marlan mir so geschickt den Steigbügel gehalten hat, tut meine Suche jetzt genau das, was sie soll.

Schlussendlich war es nur eine "1", die den Unterschied gemacht hat.

In meiner Extension erzeuge ich im Listview einen Link auf den Detailview, und genau an der Stelle muss das Caching enabled werden.

$singleViewLink=$this->pi_linkTP($moreString,array($this->prefixId.'[person]'=> $row['uid']), 1);

Laut tslib_pibase Class Reference, Abschnitt über pi_linkTP, setzt der dritte Parameter das Cachingverhalten.
Nachdem ich dort eine "1" angegeben hatte, und somit nicht mehr per Default "0" für "kein Caching" angenommen wurde, funktionierte alles wunderbar.

--------------------------------------------------------

Ausserdem möchte ich bei der Gelegenheit noch ein paar andere Learnings unters Volk bringen.

1. Index resetten
Ich habe die Crawler-Extension nicht zum Laufen gekriegt, und bin daher auf wget umgestiegen.
Im Extension Manager unter Indexed Search Engine disableFrontendIndexing und useCrawlerForExternalFiles abschalten.
Im Infoview unter "Indexed Search" "Overview - Infinite" auswählen und per Klick auf das rote Delete-Icon alles löschen.
Dann in der Kommandozeile in einen leeren Ordner wechseln, und per wget die Site crawlen:
wget --mirror -o log MEINE_URL
Die Site wird dann in den aktuellen Ordner gespiegelt. Es gibt bestimmt auch eine Möglichkeit, nichts runterzuladen oder nach /dev/null umzuleiten, aber für meine Bedürfnisse ging's auch so.

2. Printversion nicht indizieren

Ich hatte

config.index_enable = 1
config.index_externals = 1

global gesetzt. Dadurch wurde ich die Printversion indiziert.
Jetzt hat die normale Version und die Printversion jeweils ein eigenes Stück config:

seite = PAGE
seite {
	typeNum = 0
	config.index_enable = 1
	config.index_externals = 1
	...
}
print = PAGE
print {
	typeNum = 98
	config.no_cache = 1
	config.index_enable = 0
	config.index_externals = 0
	...
}

So, das wär's.

Hoffe, das hilft jemandem...