Lupe Suche
Responsiv Devices

Fulltextsearch

Einfacher Site Search in Silverstripe 4

Um eine einfach Textsuche zu erstellen braucht es drei Schritte:

- Einträge in _config.php
- Suchfeld im Template (Bsp. Header)
- Ausgabe der Suche im Template (Bsp: Page_results.ss)

Schritt 1

In der Datei app/_config.php wird die VollTextSuche aktiviert. Dazu muss im Namespace die Klasse "FulltextSearchable" geladen und eaktiviert werden. (PasswortValidator und Member-Klassen werden ab SS4.2 in die _config_Datei eingetragen)

<?php

use SilverStripe\Security\PasswordValidator;
use SilverStripe\Security\Member;
use SilverStripe\ORM\Search\FulltextSearchable;

FulltextSearchable::enable();

// ...

Schritt 2

Das Suchfeld wird oft im Header platziert. Ein einfaches nicht formatiertes Suchfeld:

<% if $SearchForm %>
<form id="search" action="home/SearchForm" method="get" enctype="application/x-www-form-urlencoded">
<input class="text" type="text" name="Search" placeholder="Enter keyword">
</form>
<% end_if %>

Im Template "Simple" wird "$SearchForm" verwendet, dieses formatierte Suchfeld mit Button kann alternativ benutzt werden:

<% if $SearchForm %>
<span class="search-dropdown-icon">L</span>
<div class="search-bar">
$SearchForm
</div>
<% end_if %>

Schritt 3

Das Template für die Ausgabe, an Theme "simple" angepasst, zeigt das Resultat der Suche an.
app/templates/Layout/Page_results.ss

<div id="Content" class="searchResults">
  <% if $Query %>
    <p class="searchQuery"><strong>You searched for &quot;{$Query}&quot;</strong></p>
  <% end_if %>

  <% if $Results %>
    <ul id="SearchResults">
      <% loop $Results %>
        <li>
          <a class="searchResultHeader" href="$Link">
            <% if $MenuTitle %>
              $MenuTitle
            <% else %>
              $Title
            <% end_if %>
          </a>

          <p>$Content.LimitWordCountXML</p>
          <a class="readMoreLink" href="$Link"
             title="Read more about &quot;{$Title}&quot;"
          >Read more about &quot;{$Title}&quot;...</a>
        </li>
      <% end_loop %>
    </ul>
  <% else %>
    <p>Sorry, your search query did not return any results.</p>
  <% end_if %>

  <% if $Results.MoreThanOnePage %>
    <div id="PageNumbers">
      <% if $Results.NotLastPage %>
        <a class="next" href="$Results.NextLink" title="View the next page">Next</a>
      <% end_if %>
      <% if $Results.NotFirstPage %>
        <a class="prev" href="$Results.PrevLink" title="View the previous page">Prev</a>
      <% end_if %>
      <span>

        <% loop $Results.Pages %>
          <% if $CurrentBool %>
            $PageNum
          <% else %>
            <a href="$Link" title="View page number $PageNum">$PageNum</a>
          <% end_if %>
        <% end_loop %>
      </span>
      <p>Page $Results.CurrentPage of $Results.TotalPages</p>
    </div>
  <% end_if %>
</div>

Um die Installation abzuschliessen ist dev/build?flush=all nötig. Damit wird die Volltextsuche aktiviert und die erforderlichen Anpassungen in der MySql-Datenbank eingetragen.