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 "{$Query}"</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 "{$Title}""
>Read more about "{$Title}"...</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.