Ein paar Notizen zum Thema Suche per Typo3.

Standard Suche (nur für einsprachige Sites. auch News durchsuchbar)

Vorteile: Ist die wirklich sinnvolle Suche, denn es wird wirlich in der Datenbank gesucht. Man kann alle Tabellen und Felde angeben die man durchsuchen möchte. Funktioniert sofort ohne Probleme, und ist mit etwas Mühe vom Design her auch so anpassbar, dass auf jeder Seite das Suchfeld erscheint, mit einer Grafik für "go". Unten meiner Meinung nach die beste Zusammenstellung. Hierbei lässt man die Suchergebnisse per Forward auf einer bestimmten Seite anzeigen und lässt dabei das Suchefeld auf jener Ergebnisse-Seite per  tt_content.search.30 >  verschwinden.

Nachteile: Kann man bei mehrsprachigen Seiten in der Pfeife rauchen, denn es wird grundsätzlich der Seitentitel in der Standardsprache (bei uns deutsch) angezeigt. Immerhin wird aber der Content in der richtigen Sprache angezeigt und der L-Parameter wird auch ordentlich angehängt.

Lösungsweg: Man könnte die API erweitern, was von der Theorie nicht schwer wäre: Man liest die eingestellt Sprache  L=1 aus der URL oder config.sys_language_uid=1 aus dem Array $GLOBALS["TSFE"] , und verwendet das Ergebnis für die Auswahl des Seitentitels. Für 0 also  pages.title - und für 1 stattdessen pages_language_overlay.title . Problem aber: Die entsprechende API  tslib_cObj::SEARCHRESULT() bzw. tslib_search:register_tables_and_columns()  ist dermaßen kompliziert gehalten, dass eine Erweiterung leider doch NICHT in Frage kommt.

Beitrag von Markus Müller ( <info AT connect-the-web DOT de> )Eine weitere Lösungsmöglichkeit ist die zusätzliche Installation von der Extension "ch_simplesearchlocal". In dieser Extension muss man rein garnichts anpassen; ab sofort sind die Seitentitel in der anderen Sprache angezeigt (je nachdem was die Variable &L übergibt)

Standard Suche - Einstellungen

#-- ab hier CONSTANTS - Die Nr. der Zielseite
searchpagePID = 80


# Wraps für nicht gefunden
tt_content.search.20.noResultObj.wrap=<table width="100%" border=0 cellspacing=0 cellpadding=2><tr> | </tr></table>
tt_content.search.20.noResultObj.10.wrap = <td width="95%"><p> | </p></td>
tt_content.search.20.noResultObj.10.fontTag >

# Wraps für gefunden - aber nur für Navigation und Titel
tt_content.search.20.layout.wrap = <table border=0 width="45%" cellspacing=0 cellpadding=2><tr> | </tr></table> ###RESULT###
tt_content.search.20.layout.10.wrap = <td width="100%"><p> | </p></td>
tt_content.search.20.layout.10.fontTag = <p class="title"> | </p>
tt_content.search.20.layout.20.wrap = <td><p> | </p></td>

temp.searchbox < tt_content.search.30
temp.searchbox {
  type = {$searchpagePID}
  locationData = 1
  no_cache = 1
  layout = ###LABEL######FIELD###

  # Workaround für den FORM tag
  target = " style="margin-bottom : 0px;

  image = IMAGE
  image.file = fileadmin/images/suche-start.gif
  image.alttext = Volltext-Suche

  # mouseovereffekt: params.submit =  onmouseover="this.src='fileadmin/images/suche-start-show.gif'" onmouseout="this.src='fileadmin/images/suche-start.gif'"
  params.input = class="eingabe"
  dataArray {
      10.type = sword=input,10
      20.type = scols=hidden
      20.value = pages.title-subtitle-keywords-description:tt_content.header-bodytext-imagecaption
      30.type = stype=hidden
      30.value = L0
      40.type = submit=submit
  }
}

# Am besten links direkt unter der Navigation einbinden. z. B. Nr. 700
page.700 < temp.searchbox

Standard Suche - mögliche core-Änderung für mehrsprachigkeit

mit dieser Änderung ist die mehrsprachige Standard Suche zwar nicht perfekt, aber funktioniert jedenfalls besser. Als erstens muss die ähnliche Anpassung wie bei Indexed Search - core-Änderung gemacht werden. Jedoch VOR $search->execute_query();

Siehe Datei class.tslib_content.php (Zeile 2059):

if(intval($GLOBALS['TSFE']->sys_language_uid)!=0) {
  $search->queryParts['SELECT']=str_replace("pages.title AS pages_title","pages_language_overlay.title as pages_title",$search->queryParts['SELECT']);
  $search->queryParts['SELECT']=str_replace("pages.abstract AS pages_abstract","pages_language_overlay.abstract AS pages_abstract",$search->queryParts['SELECT']);
  $search->queryParts['SELECT']=str_replace("pages.description AS pages_description","pages_language_overlay.description AS pages_description",$search->queryParts['SELECT']);
  $search->queryParts['WHERE']=$search->queryParts['WHERE']." AND pages_language_overlay.pid=pages.uid AND pages_language_overlay.sys_language_uid = '".$GLOBALS['TSFE']->sys_language_uid."' AND tt_content.sys_language_uid = '" . $GLOBALS['TSFE']->sys_language_uid . "' AND tt_content.pid = pages.uid ";
}else { // nur in default suchen
  $search->queryParts['WHERE']=$search->queryParts['WHERE']." and tt_content.sys_language_uid = '" . $GLOBALS['TSFE']->sys_language_uid . "'";
}

anschliessend lassen wir die Suche in pages_language_overlay zu, wenn nicht default Sprache. Dazu muss die Datei class.tslib_search.php(149-158) geändert werden.

alter Code, Siehe Datei class.tslib_search.php (Zeile 149-158):

$this->fTable='';
foreach ($this->tables as $t => $v)     {
        if ($t!='pages')        {
                if (!$this->fTable)     {
                        $this->fTable = $t;
                } else {
                        unset($this->tables[$t]);
                }
        }
}

neuer Code

$pagesArray = array('pages');
if ($GLOBALS['TSFE']->sys_language_uid !=0) {
        $pagesArray[] = 'pages_language_overlay';
}
$this->fTable='';
foreach ($this->tables as $t => $v)     {
        if (!in_array($t,$pagesArray))  {
                if (!$this->fTable)     {
                        $this->fTable = $t;
                } else {
                        unset($this->tables[$t]);
                }
        }
}

Und zum Schluss müsste noch geprüft werden ob in der TS-Config die Tabelle pages_language_overlay zum suchen zugelassen ist.

allowedCols = .... : pages_language_overlay.title-subtitle : .....

Indexed Search (für Volltextsuche bei mehrsprachigen Sites)

Vorteile: Suchergebnisse werden in moderner Form google-like ausgegeben. Also mit Sprache-Flagge, Relevanz-Angabe, Styles-Einstellung per CSS, und den RICHTIGEN Seitentiteln. Und eigentlich auch leicht anpassbar. Was sofort ins Auge fällt ist die Einstellung im SETUP Feld  page.config.index_enable = 1  - Was man leicht vergisst, sind die Marker  <!--TYPO3SEARCH_begin--> ...Der Inhalt der HTML-Seite... <!--TYPO3SEARCH_end--> , die in die Seite eingefügt werden müssen. - Die Regeln unterhalb der Seite lassen sich durch  plugin.tx_indexedsearch.show.rules = 0  entfernen

Nachteile: Nach jedem Cache-Löschen müssen die Seiten wieder neu besucht werden. Durch die neue Extension "Cache-Seiten neu erstellen" ist das zum Glück etwas praktischer geworden. Man muss lange in den Mailinglisten herumsuchen, bis man diese Infos findet: Ausgangspunkt/ starting point muss sich UNTERHALB der Seite befinden, auf der sich das Suche-Feld befindet. Und es darf keine Extension auf der Seite enthalten sein, die das Caching ausschaltet  $GLOBALS["TSFE"]->set_no_cache ()  - Dies trifft zum Beispiel zu, wenn man auf jeder Seite News per tt_news eingebunden hat. - Wenn man "händisch" Seiten indexieren möchte, dann muss man das in einem EXTRA-Fenster tun. Nicht im Backend.

Indexed Search - core-Änderung für Korrektur der Seiten-Titel

Beitrag von Michal Jakubik ( <michal DOT jakubik AT ae-design DOT sk> ) ist ein einfacher 4-Zeiler. Siehe Datei class.tslib_content.php (Zeile 2059):

Die folgenden Zeilen hinter diese Zeile einfügen $search->execute_query();

in die Datei class.tslib_content.php

if(intval($GLOBALS['TSFE']->sys_language_uid)!=0) {
    $search->queryParts['SELECT']=str_replace("pages.title AS
        pages_title","pages_language_overlay.title as
        pages_title",$search->queryParts['SELECT']);
    $search->queryParts['FROM']=$search->queryParts['FROM'].",
        pages_language_overlay";
    $search->queryParts['WHERE']=$search->queryParts['WHERE']
        ."and pages_language_overlay.pid=pages.uid";
}

Alternative zu dieser "händischen" core-Änderung wäre eine Mini-Extension anzulegen, die per user_xx (=XCLASS Mechanismus) die core-Änderung durchführt.

Indexed Search - Wenn es Probs mit dem Cache gibt

So findet man die Extension, die den Cache ausschaltet: admin_panel aktivieren, dann die Seiten durchgehen. Wenn  no_cache = 1  angezeigt wird, enthält diese Seite eine solche Extension.

Indexed Search - Wenn die falsche Flagge angezeigt wird

Die Dänische Flagge wird statt der Englischen angezeigt?: Falls das so ist, liegt es an den Einstellungen zur Default-Sprache. Hier ein Workaround zur Lösung des Problems: http://typo3.org/1422+M5d1b742a8a0.0.html?tx_maillisttofaq_pi1[sword]=flag

Indexed Search - Wenn es Seitentitel mit Überbreite gibt

Manche Seitentitel sind so lang, dass die Breite der Suchergebnisse zu lang ist?: Falls das so ist, dann im Extensioncode (Datei "pi/class.tx_indexedsearch.php") die Zeile 1162 ändern: das "nowrap" herausnehmen. That' s all. Falls der Pfad der Suche zu lang ist und dadurch Fehler auftreten muss in Zeile 1336 das "nowrap" rausnehmen und das funktioniert auch. http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=16&tx_extrepmgm_pi1[tocEl]=43&cHash=f356fa37fd

Indexed Search - Einstellungen

#-- ab hier SETUP
config.index_enable = 1
plugin.tx_indexedsearchresult_link_target =

plugin.tx_indexedsearch {
  # Styles nicht auf jeder Seite einbinden (-> externe CSS-Datei)
  _CSS_DEFAULT_STYLE >

  # default-mäßig ein Teilwort suchen
  _DEFAULT_PI_VARS.type = 1

  # target soll nicht auf page zeigen
  result_link_target = _self

  # Kein komplizierten Erklärungen
  show.rules = 0

  # nur die nötigen Einstellungen
  blind.sections=1
  blind.order=1
  blind.lang=1

}

Extension "Cache all" (für automatische Index-Erstellung)

Durch diese Extension wird der Index für die indexed_search bzw. die macina_searchbox automatisch erstellt - für alle aktuellen Domains und indizierbaren Seiten. Die Seiten werden entweder mit PHP-Mitteln (per fopen/fgets) gelesen und dadurch gecached - oder per shell-Mitteln (wahlweise wget oder curl). Es wird also nicht "nur" der Cache erstellt.

Der extension-key ist cwt_cacheall.

Die Erweiterung (mehrsprachigkeit) ist hier beschrieben:

Datensatz Suche

Die Extension select_pro ist enorm flexibel - allerdings auch schwierig in der Handhabung. Es können beliebige Datenbank-Tabellen verknüpft werden - inner join - und es kann ausgewählt werden, welche Attribute (title, date, andere) im Ergebnis auftauchen sollen. Besonders praktisch ist das Verwenden eines Templates um das Ergebnis anzeigen zu können.

Beim Verwenden sollte man enable-fields und Sprache anfangs freilassen.

--DanielBrüßler

Typo3Suche (zuletzt geändert am 2010-07-29 15:33:49 durch 013-133-088-212)