So setzen Sie Filter in den Suchergebnissen ein

08. Mai 2010

Dieser Artikel beschreibt, wie Sie Suchergebnisse über bestimmte Filter laufen lassen, damit aus dem erstellten Suchindex nur die gewünschten Bereiche angezeigt werden.

DIe BASE nutzt zum Modul Volltextsuche hinsichtlich der Suchergebnisse die Ausgabe über die Weblication® Listenfunktion. Somit sind Sie sehr flexibel, was die Manipulation der Suchergebnisse angeht. Ein Suchindex lässt sich auf diese Weise in unterschiedlicher Form über die Suchergebnisliste ausgeben. So können Sie von den indizierten Dateien z.B. nur die aus einem bestimmten Bereich (Sprachbereich, Dokumente, etc.) oder nur Binärdokumente ausgeben.

Das Strukturelement für die Volltextsuche ("Volltextsuche Ergebnis mit Suchfeld") liefert Ihnen bereits im Standard die Möglichkeit, nur Ergebnisse aus dem festgelegten Bereich anzuzeigen ("Nur Ergebnisse aus folgendem Bereich anzeigen").

Volltextsuche - Strukturelement Suchergebnis mit Einstellungsmöglichkeiten
Volltextsuche - Strukturelement Suchergebnis mit Einstellungsmöglichkeiten

Nachfolgend ein Beispiel, um vom Suchindex nur diverse Binärdokumente (z.B. doc, pdf, xls) über die Suchergebnisse auszugeben. Setzen Sie hierzu über das Suche-Item einen Filter, der auf die Dateiendung der gefundenen Dateien prüft. Wenn Sie dies noch zusätzlich mit einer Abfrage versehen, welche den Filter nur anwendet, wenn ein bestimmter GET-Parameter im Aufruf gesetzt ist (z.B. searchoptions=onlyoffice), können Sie über ein Element verschiedene Suchausgaben ermöglichen.

Das Beispiel zeigt z.B. weiterhin an, wie Sie die Suchergebnisse sprachabhängig filtern.

Der Filter wird auch bei der Anzeige der  "Anzahl der Treffer" berücksichtigt, indem Sie dies im Zeilentemplate der Suche über data[@name='numberFiles'] auslesen (siehe unten).

Beispiel: Auszug aus der search.standard.wItem.php

...
<wsl:php>
...
  $listParameters['filterset'] = array('type' =&gt; 'and');
...
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'onlyoffice'">
    $filterFiletypes = array('type' =&gt; 'or');
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "pdf");
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "doc");
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "xls");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'de'">
    $filterFiletypes = array('type' =&gt; 'or'); 
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@path", "operator" =&gt; "containsi", "condition" =&gt; "/de/");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
  
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'en'">
    $filterFiletypes = array('type' =&gt; 'or'); 
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@path", "operator" =&gt; "containsi", "condition" =&gt; "/en/");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
...
  
  print wList::createList($template, $listParameters);
...
</wsl:php>

Beispiel: Auszug aus der search.wFilelist.php (Suche Zeilentemplate)

...
<!-- Suchmaske -->
<form name="frmSearchInner" method="get" action="">
  <div>
    <label for="searchTerm" class="invisible"><xsl:value-of select="php:functionString('wTexts::getText', 'search_term')"/></label>
    <input type="text" name="searchTerm" value="{//data[@name='term']/text()}" style="margin-right:5px"/>
    <select name="searchoptions">
      <option value="all">Alle Ergebnisse</option>
      <option value="onlyoffice">Nur DOC/PDF/XLS</option>
      <option value="de">Deutschsprachige Ergebnisse</option>
      <option value="en">Englischsprachige Ergebnisse</option>
    </select>
    <button type="submit" style="margin-right:5px;"><xsl:value-of select="php:functionString('wTexts::getText', 'search_execute_search')"/></button>
  </div>
</form>
...
        
      
      <xsl:choose>
        <!-- Falls Ergebnisse gefunden wurden -->
        <xsl:when test="number(//data[@name='numberResultsSearch']/text()) &gt; 0">
          <p>
            <xsl:value-of select="php:functionString('wTexts::getText', 'search_number_results')"/>: <xsl:value-of select="//data[@name='numberFiles']/text()"/>
          </p>
        </xsl:when>                                                                                                                    
        <!--Falls keine Ergebnisse gefunden wurden-->
        <xsl:otherwise>
        ...

Nach Abschicken des Suchbegriffes über das Sucheformular kann eine aufgerufene URL dann z.B. wie folgt aussehen (Übergabe der GET-Parameter):
http://domain.dd/IhrProjekt/suche/index.php?searchTerm=weblication&searchoptions=en

Ähnliche Seiten

Entwicklerbereich Weblication® CMS - © Scholl Communications AG