Web-Seiten-Such-Script


Ein PHP-Script zur lokalen Web-Seiten-Suche

Ich möchte hier meine PHP-Script vorstellen, dass ich auf meiner Webseite als Such-Script verwende. Der Hauptgrund für die Verwendeung dieses Scriptes liegt in der Tatsache, dass keine externen Suchmaschinen zur Suche bemüht werden. Außerdem ist es für meine Begriffe relativ flexibel.

Es bietet folgende Funktionen:
  1. Die Suche kann auf die HEAD-Elemente beschränkt oder auf die ganze Seite ausgeweitet werden.
  2. Es können einzelene Bereiche des Quell-Codes (HTML oder PHP) ausgeklammert werden.
  3. Es können komplette Dateien ausgeklammert werden. Selbst wenn sie sonst dem Suchmuster entsprechen würden.
  4. Es können Unterverzeichnisse ausgeklammert werden.
  5. Es kann ein Startverzeichnis für die Suche festgelegt werden.
  6. Es funktioniert lokal (auf meinem Test-Server) und auch im Internet.
  7. Es können einzelen Datei-Typen (php, html etc.) festgelgt werden.
  8. ES kann ein Logbuch mit einer Liste der verwendeten Suchbegriffe und deren Häufigkeit geführt werden.
  9. Es funktioniert auch wenn der Quell-Code zu 100% aus HTML- oder PHP-Code besteht.
  10. Es gibt Vorlagen für die erfolgreiche und die nicht erfolgreiche Suche sowie für den Fehlerfall.
  11. Die Mindestlänge des Suchbegriffs kann festgelegt werden.
  12. HTML-Tags, SCRIPT-Tags sowie JavaScript und PHP-Code werden für die Suche ignoriert.

Voraussetzungen damit das Script einwandfrei funtioniert:
  1. PHP ab Version 5.6
  2. jQuery ab Version 3.x *
  3. Bootstrap ab Version 4.1 *
  4. FontAwesome ab Version 5.x
*) Ab Bootstrap Version 5 wird jQuery nicht mehr benötigt

Anleitung zum Einbau:

Um die Such-Funktion zu benutzen muss in die jeweilige WebSeite ein kleines Formular eingebaut werden. In meinem Fall habe ich es in die Menüleiste eingebaut. Das erscheint mir der ideale Platz zu sein. Einige Beispiele dafür findet man auf den Bootstrap-Seiten.

In meiner Menüleiste verwende ich folgenden Code:

<form class="form-inline my-2 my-md-0" method="post" name="searchform" role="search" action="/search.php">
  <div class="input-group">
    <input class="form-control" style="background-color: #ccc; color: #2c2c2e; width: 8rem" placeholder="Suche nach..." aria-label="Suche nach..." id="search_exp" name="search_exp" type="text">
    <div class="input-group-btn input-group-append">
      <button class="btn btn-secondary" type="submit"><span class="fa fa-search"></span></button>
    </div>
  </div>
</form>

Das Script "search.php" wird über das "action" Attribut im <form>-tag aufgrufen. Dabei findet ein automatischer Wechsel auf die Such-Seite statt und das Ergebnis wird ausgegeben.

Das Aussehen der Such-Seite wird durch das Template (Vorlage) am Ende des Such-Scripts bestimmt.

Hier ist ein Beispiel für eine minimale Webseite:
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 
    <title>WebSeiten-Suche</title>
  </head>
  <body>
 
    <?php echo $tmpl;?> <!-- Suchergebnisse hier einfügen -->
 
    <!-- Optional JavaScript -->
    <!-- jQuery first, then Bootstrap JS, then FontAwesome JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.bundle.min.js" integrity="sha384-pjaaA8dDz/5BgdFUPX6M/9SUZv4d12SUPF0axWc+VRZkx5xU3daN+lYb49+Ax+Tl" crossorigin="anonymous"></script>
    <script src="https://use.fontawesome.com/releases/v5.4.1/js/all.js" integrity="sha384-L469/ELG4Bg9sDQbl0hvjMq8pOcqFgkSpwhwnslzvVVGpDjYJ6wJJyYjvG3u8XW7" crossorigin="anonymous"></script>
  </body>
</html>


Und so sieht mein eigenes PHP-Template aus:
$pageTitle   = 'DeltaOS.de | Suchergebnisse';
$description = 'Suchergebnisse auf DeltaOs.de';
$keywords    = 'Suche';
 
require($_SERVER['DOCUMENT_ROOT'] . '/assets/php/functions.php');
$pageFile = __FILE__;
$page     = pathinfo(__FILE__, PATHINFO_FILENAME);
 
echo "<!DOCTYPE html>\n";
echo '<html lang="en">'."
";
headPHP($pageTitle, $keywords, $description);
echo "  <body>
";
navbarPHP($page);
echo '    <div class="container-fluid px-md-5">'."\n";
echo '      <a id="top-content"></a>'."\n";
echo '      <div id="pageContent">'."\n";
echo "        <h1 class=\"text-warning\">Webseiten-Suche auf DeltaOS.de</h1>\n";
echo "        <hr>\n";
echo "        <br>\n";
 
echo $tmpl; # Suchergebnisse hier einfügen
 
echo "      </div>\n";
echo "    </div>\n";
footerPHP('DE', $pageFile);
jsPHP();
echo "  </body>\n";
echo "</html>\n\n";

Man kann hier auch gut erkennen wie die drei Variablen für den <head>-Bereich der Webseite definiert werden. Im Such-Script werden eben diese Variablen bei der Suche mit ausgewertet, falls so eingestellt. Die Variablen können aber auch andere Namen haben als hier dargestellt, denn sie können in den Einstellungen des Such-Scripts angepasst swerden.

Falls der PHP-Modus ($search_area = 2;) verwendet wird, muss zwischen der Variable und dem Gleichheitszeichen mindestens EIN Leerzeichen sein! Sonst wird die Variable nicht erkannt!
Zum Beispiel: $phpTitle = 'pageTitle'; // Seiten Titel

Suchbereiche innerhalb der Webseite festlegen:

Um gewisse Bereiche einer Webseite bei der Suche auszuklammern, können folgende Begrenzer eingesetzt werden:
<!-- no_search_start -->
<!-- no_search_stop -->
Aller Text im Quell-Code der Seite, der zwischen diesen beiden Begrenzern steht, wird ignoriert und von der Suche ausgenommen.

Um den Inhalt einer ganzen Datei auszunehmen kann man
<!-- no_search -->
an den Anfang der Datei, am Besten am Anfang des <HEAD>-Bereichs einfügen.

Im PHP Code funktioniert das genauso gut indem das übliche Kommentarzeichen an den Anfang bzw. das Ende gestellt wird.
//<!-- no_search_start --> oder
/*<!-- no_search_stop -->*/ oder
#<!-- no_search -->


Alle weiteren Einstellungen sind, denke ich, sind selbsterklärend. Einfach mal den Konfigurationsbereich ansehen und dann der Reihe nach alle Einstellungen durchgehen. Sollten dennoch Fragen aufkommen, so kannst du per eMail nachfragen oder mein Kontaktformular benutzen. Das Such-Script findest du bei den Downloads.