KURZBESCHREIBUNG DER FUNKTIONEN
---------------------------------
	
Versionshinweise
---------------------------------

Das Tool wurde ausschlielich unter 4.10.0 und PHP7.2 getestet.

Beschreibung
---------------------------------

Das Tool, eine Kombination aus Plugin und Modul, imitiert solrSearch innerhalb einer Datenbanktabelle von Contenido. 
Hierfr wird eine neue Datenbanktabelle con_fullsearch bentigt.

Der Ansatz bisheriger Suchtools ist eher eine keywordbasierte oder content-typen-spezifische Auswertung. Dies fhrt aber schnell an die Grenzen, wenn mehr Content-Typen als gedacht auf der Seite vorhanden sind oder mit ArticleIncludes gearbeitet wird. Dann werden oft nicht alle Inhalte, die zu einem Artikel gehren, indiziert.

T2T-Fullsearch geht nun einen anderen Weg. Es greift von auen ber cUrl auf die Artikel zu, so wie der Kunde sie sieht, und rendert die Endansicht der Seite in die neue Datenbanktabelle, sowohl als HTML-Code wie auch um alle tags bereinigt (stripped content). Dieser stripped content sowie einige andere Parameter dienen als Grundlage fr die Suche. 
Es werden alle Sprachen und alle Mandanten indiziert, und jeder DB-Eintrag wei, wozu er gehrt. Ebenso wird gespeichert, welche FEU-Gruppen auf den Artikel Zugriff haben drfen, ob er online ist, suchbar ist, geschtzt ist usw. Ebenso werden - falls die Ausgabe ntig sein sollte - auch ALLe direkt im Artikel vorhandenen Container-Inhalte getrennt mitindiziert.

Das Indizieren bzw. Leeren der DB-Tabelle wird im Backend ber Extras/Vollsuche ermglicht. 

Das Einrichten eines Cronjobs ist derzeit auf das Modul "fullsearch" mglich (s.u.).

Anhaltspunkt zur Dauer einer vollen Indexierung: der Standardmandant wird in unter 1 Minute komplett neu durchgerechnet.


Installation
---------------------------------
Die ZIP-Datei mit 2 Modulen und dem Plugin entpacken.
Plugin nach /contenido/plugins hochladen (Name unverndert lassen) und im Backend aktivieren/installieren. Contenido neu laden, Plugin ist unter Extras/Vollsuche zu finden.
Beide Module hochladen und synchronisieren ("fullsearch" und "content_fullsearch_results").
Die Datenbanktabelle muss neu angelegt werden. SQL-Code fr phyMyAdmin findet sich im Modul fullsearch/doku.

Nach Installation muss ein FEU fr JEDEN Mandanten wie folgt angelegt werden angelegt werden:
user: fullsearchuser
PW: *FuLLseaRch*User*

Ebenso ist in jedem Mandanten eine Frontendgruppe namens "Fullsearch" anzulegen; den User "fullsearchuser" dieser Gruppe hinzufgen und die Frontend-Berechtigungen fr diese Gruppe ZWINGEND auf "Kategorie-Zugriff (Alle)" setzen.

Der Mandantenwert fr JEDEN Mandaten muss gesetzt sein, wenn es einen Login-Bereich gibt, und er muss auf die korrekte idart verweisen:
login | idart 
Das Modul ermittelt die mandantenspezifischen Werte hierfr und loggt cUrl entsprechend mandantenspezifisch ein zum Indizieren geschtzter Inhalte. Ist dieser Wert nicht gesetzt, wird fr cUrl eine leerer String fr die Loginseite erzeugt. Dies lsst die Indizierung zwar korrekt durchlaufen (geprft), indiziert aber keine geschtzten Seiten.

In jedem Layout, das Artikeln zugewiesen wird, die indiziert werden sollen, mssen die Erkennungsmarken eingefgt werden, wo die Indizierung beginnt und wo sie endet (in aller Regel werden nur Content-Bereiche erfasst). Diese lauten wie blich:
<!--start:content-->
<!--end:content-->

Dann einen Artikel fr die suchausgabe anlegen (mit einem Template, das content_fullsearch_results enthlt).
Ebenso einen Artikel fr cronjobs, soweit gewnscht (mit einem Template, das fullsearch enthlt).

Artikel, die nicht gesondert indiziert werden sollen bzw. nicht ausgegeben werden sollen bei der Suche (z.B. Systemseiten oder zu inkludierende Teilartikel), sind in den Artikeleigenschaften als "nicht suchbar" zu markieren. Sie werden dann weiterhin indiziert, aber nicht ausgegeben.


Weitere Informationen
---------------------------------

Der Cronjob lsst sich auf den Artikel aufrufen, der das Modul "fullsearch" enthlt. Es ist ein GET-Parameter anzuhngen:
www.xxxx.com/kategorie/artikel.html?fullsearch=reindex

Bei der Suchausgabe sollten die Ergebnisse abhngig von Mandant und Sprache erzeugt werden. Das SQL-Statement ist entsprechend aufgesetzt, konnte aber noch nicht in einem Mehrmandantensystem berprft werden.

Die Suchausgabe berprft, ob der FEU eingeloggt ist und welchen FEU-Gruppen er angehrt. Davon abhngig werden geschtzte Seiten mit angezeigt oder nicht. 

Durch einen Schalter im Modul content_fullsearch_results lsst sich sogar jedweder Content mit ins Suchergebnis rendern, selbst wenn es geschtzter Content ist (dann allowProctectedResults auf true setzen). Im Smarty muss dann in einer if-Schleife wie gezeigt festgelegt werden, was fr diesen Fall als Link oder Text angezeigt wird. Momentan ist es der Login-Link, der auch angezeigt wrde, wenn ein eingeloggter User einen Content angeteasert bekommt, der nicht zu seiner Berechtigungsgruppe gehrt. Dies lsst sich ber Smarty verfeinert ausgeben. (Es war ein Kundenwunsch, geschtzte Inhalte auch fr nicht eingeloggte User anteasern zu knnen, um die Neuregistrierungen zu befeuern.)

Der Quellcode fr das Suchfeld liegt im Smarty des Moduls content_fullsearch_results. Dort sind auch 2 Arten von Pagination drin (select aber noch ohne JS-Code) sowie alle wichtigen Schleifen und Variablen, die die oben beschriebenen Ausgaben erklren und steuern.


08.05.2019, Viktor Lehmann, TONE2TONE
