MD-Viewer
 

MD-Viewer

Fokus: Industrielle Rohstoffveredelung

Die industrielle Gewinnung von Zein ist ein Nebenprodukt der Maisstärkeproduktion und gewinnt zunehmend an wirtschaftlicher Bedeutung. Früher wurde es primär als minderwertiges Futtermittel betrachtet, doch heute erzielt es als Rohstoff für die Spezialchemie hohe Preise. Die Skalierung der Extraktionsprozesse erfordert jedoch präzise chemische Trennverfahren. Investoren sehen in Zein einen Schlüsselmarkt für die biobasierte Ökonomie der Zukunft. Durch die Veredelung dieses Nebenstroms wird die gesamte Wertschöpfungskette des Maisanbaus nachhaltiger.

wbce_search — Erweiterte Volltext-Suche für WBCE CMS

Version: 0.1.9-beta65
Plattform: WBCE CMS 1.7.0+
PHP: 8.1+ (getestet unter PHP 8.5.2)
Lizenz: GNU General Public License
Autor: WBCE Community


Übersicht

wbce_search ersetzt die eingebaute WBCE-Suche durch eine leistungsstarke Volltext-Suchmaschine mit eigenem Index, konfigurierbarem Modul-Support und modernem Frontend.


Architektur

wbce_search/
├── tool.php                  — Admin-Tool (Suchindex, Semi-Konfig, Layout-Editor)
├── WbceSearch.php            — Hauptklasse (search, suggest, score, excerpt, render)
├── search_admin_tool.php     — Core-Patch Dispatcher (übernimmt /search/index.php)
├── search_output.php         — PAGE_CONTENT Ausgabe
├── initialize.php            — Globale JS/CSS-Einbindung
├── ajax.php                  — AJAX-Endpoint (Live-Suche + Admin-Spaltenladung)
├── droplet.php               — Tag-Cloud Droplet
├── install.php               — Installation
├── upgrade.php               — Upgrade (alle Versionen)
├── uninstall.php             — Deinstallation
├── lib/
│   ├── indexer.php           — Indexer (module_defs, Callbacks, Generic-Fallback)
│   └── stopwords.php         — Deutsche Stoppwörter (187 Einträge)
├── module_defs/
│   ├── wysiwyg.php           — WYSIWYG-Editor
│   ├── news_img.php          — News with Images
│   ├── bakery.php            — Bakery Shop (mit Join mod_bakery_images)
│   ├── md_viewer.php         — MD Viewer (Callback-Indexer, liest MD-Dateien)
│   └── index.php             — Verzeichnisschutz
└── layouts/
    └── search_default.htt    — Standard-Suchlayout (LayoutParser-kompatibel)

Datenbank-Tabellen

{TP}mod_wbce_search_index

Hauptindex — alle indexierten Inhalte.

Spalte Typ Beschreibung
id INT AUTO_INCREMENT Primary Key
page_id INT WBCE-Seiten-ID
section_id INT WBCE-Abschnitts-ID
item_id INT Item-ID (Multi-Modus, z.B. Bakery-Produkt)
module VARCHAR(100) Modulname
title TEXT Seitentitel
item_title TEXT Modul-eigener Titel (z.B. NWI-Beitragstitel)
description TEXT Seiten-Beschreibung
keywords TEXT Seiten-Schlüsselwörter
content MEDIUMTEXT Indexierter Volltext
detail_url VARCHAR(500) Direkt-Link zum Eintrag
thumb_url VARCHAR(500) Vorschaubild-URL
visibility VARCHAR(50) Sichtbarkeit (public/registered/private)
searching TINYINT(1) Suchbar (0/1)
indexed_at INT Zeitstempel der Indexierung

{TP}mod_wbce_search_cfg

Konfiguration als Key-Value Paare.

{TP}mod_wbce_search_stats

Suchstatistik — häufig gesuchte Begriffe für Tag-Cloud.


Features

Suchindex

  • Vollständiger Rebuild — alle Seiten/Abschnitte neu indexieren
  • Geänderte aktualisieren — nur geänderte Seiten (basiert auf modified_when)
  • Lazy-Reindex — automatisch im Hintergrund bei jeder Suchanfrage

Suche

  • Alle Wörter / Einzelne Wörter / Genaue Wortfolge
  • Word-Boundary-Suche — "egel" findet nicht "regelmäßig" (mb-sicher, PHP 8.5 kompatibel)
  • Score-basiertes Ranking — Titel-Treffer werden höher gewichtet
  • Highlighting — Suchbegriffe werden im Excerpt farblich markiert
  • Pagination — konfigurierbare Ergebnisse pro Seite
  • Sprachfilter — optional nach WBCE-Seitensprache filtern

AJAX Live-Suche

  • Echtzeit-Vorschläge während der Eingabe
  • Konfigurierbar: Mindestzeichen, Limit, Modus (Titel / Volltext)

Tag-Cloud

  • Häufig gesuchte Begriffe als Droplet
  • Konfigurierbar: max. Einträge, Mindestanzahl, Tracking ein/aus

Core-Patch

  • Übernimmt /search/index.php via Sentinel-Datei wbce_search.active
  • Ein/Ausschalten im Admin-Tool möglich

Modul-Support

Status-Hierarchie im Admin-Tool

Status Bedeutung
✅ Konfiguriert module_defs/*.php vorhanden
⚙️ Semi-Konfig Manuell konfiguriert (DB)
🔍 Auto-erkannt Modul hat eigene search.php
❓ Unbekannt Installiert, keine Konfiguration

Integrierte Module

Modul Methode Besonderheit
wysiwyg Generic Seiteninhalt direkt
news_img / nwi_anywhere module_def Multi-Modus, Bild aus .news_img/
bakery module_def Join mod_bakery_images, Pfad-Template {item_id}
md_viewer Callback Liest MD-Dateien direkt vom Server

Semi-Konfig — Neue Module konfigurieren

Für unbekannte Module im Admin-Tool:

  1. Tabelle wählen — Haupttabelle des Moduls (mit section_id)
  2. ID-Spalte — WBCE Seiten-Anker (meist section_id)
  3. Item-Schlüssel — Eindeutiger PK pro Item (für Multi-Modus)
  4. Titel-Spalte — Lesbarer Name des Eintrags
  5. Text-Spalten — Inhalt der durchsucht werden soll
  6. Link-Spalte — Relativer Pfad → wird automatisch zu vollständiger URL
  7. Bild-Spalte / Pfad-Template{item_id}, {section_id}, {page_id} als Platzhalter
  8. Joins — bis zu 3 LEFT/INNER JOINs für Mehrfachtabellen
  9. Modus — Single (1 pro Sektion) oder Multi (1 pro Item)
  10. Filter — Nur aktive Einträge / Zeitsteuerung

Testreihe für neue Module (Checkliste)

  1. phpMyAdmin: mod_{modul}* Tabellen auflisten
  2. Haupttabelle mit section_id identifizieren
  3. Spaltenstruktur prüfen: PK, Titel, Text, Link, Bild
  4. Join-Tabellen identifizieren (hat item_id aber keine section_id)
  5. Medienordner prüfen: statisch oder dynamisch ({item_id} Unterordner)?
  6. Semi-Konfig einstellen → generieren → Rebuild → testen

Admin-Tool Bereiche

Bereich Funktion
Suchindex Rebuild, Update, Core-Patch, Index löschen
System-Status WBCE-Einstellungen, Seiten, Abschnitte, Sprachen, Gruppen
Unterstützte Module Semi-Konfig, Status, Tabellen, Joins
Layout-Editor search_default.htt anzeigen / search_custom.htt speichern
Debug-Modus Erweiterte Debug-Infos in Suchergebnissen
AJAX Live-Suche Template-Integration Snippet
Suchstatistik Tag-Cloud Begriffe, Statistik löschen
Einstellungen Alle Suchparameter konfigurieren

Konfigurationsparameter

Parameter Standard Beschreibung
min_length 3 Mindestlänge Suchbegriff
title_weight 3 Gewichtung Titel-Treffer
max_excerpt 200 Maximale Excerpt-Länge
highlight 1 Highlighting ein/aus
highlight_tag mark HTML-Tag für Highlighting
results_per_page 10 Ergebnisse pro Seite
language_filter 0 Sprachfilter ein/aus
ajax_suggest 1 AJAX Live-Suche ein/aus
ajax_suggest_limit 5 Max. Vorschläge
ajax_suggest_mode title Suche in: title / fulltext
tagcloud_max 20 Max. Tag-Cloud Einträge
tagcloud_min_count 1 Mindestanzahl Suchen
tagcloud_track 1 Tracking ein/aus
debug_results 0 Debug-Modus (nur Admins)

Bekannte Einschränkungen

  • LayoutParser PHP 8.5preg_replace_callback mit null subject deprecated (Core-Bug, wartet auf stefanek Fix)
  • MD-Viewer — nur md_source_type = 'internal' wird indexiert (externe Quellen nicht unterstützt)
  • Join-Limit — max. 3 Joins pro Modul
  • Mehrfachtabellen-Felder — Join-Tabellen Felder werden per GROUP_CONCAT zusammengefasst (1:n)

Changelog

0.1.9-beta65 (2026-05-01)

  • MD Viewer: Callback-Indexer liest MD-Dateien direkt (Volltext-Indexierung)
  • Callback-System im Indexer für module-spezifische Indexer

0.1.9-beta64

  • Titel-Darstellung: html_entity_decode() verhindert " in Suchergebnissen

0.1.9-beta63

  • Bugfix: $tw undefined in score() nach Aufräumarbeiten

0.1.9-beta62

  • html_entity_decode() auf Seitentitel angewendet

0.1.9-beta61

  • Bugfix: score() Funktionskopf nach sed-Fehler wiederhergestellt
  • Leeren wbProfiles Debug-Block entfernt

0.1.9-beta60

  • Word-Boundary-Suche: containsWord() ersetzt mb_stripos und \b Regex
  • PHP 8.5 kompatibel, Multibyte-sicher
  • "egel" findet nicht mehr "regelmäßig"

0.1.9-beta59

  • Debug-Log WS_FILTER aus filterWords() entfernt

0.1.9-beta58

  • install.php: alle Spalten vollständig, Droplet-Check, Engine InnoDB
  • upgrade.php: item_title TEXT, Droplet-Registrierung ergänzt
  • indexer.php: {TP} statt TABLE_PREFIX in dynamischen Queries

0.1.9-beta57

  • Frischinstallations-kompatibel: install.php mit allen neuen Spalten

0.1.9-beta56

  • display_errors in search_admin_tool.php temporär deaktiviert

0.1.9-beta55

  • {if PL.CURRENT} in Pagination durch CSS display ersetzt (LayoutParser-Fix)

0.1.9-beta54

  • {if R.THUMB_URL} und {if R.EXCERPT} durch CSS display ersetzt

0.1.9-beta52

  • Debug-Block Conditionals vereinfacht

0.1.9-beta51

  • renderFallback() entfernt — sauberes Rendering

0.1.9-beta50

  • render() gibt $parser->parse() ?? '' zurück

0.1.9-beta49

  • explode() Bug: fields Array/String kompatibel
  • RESULTS, PAGE_LINKS, TAGCLOUD null-safe

0.1.9-beta48

  • Indexer: explode() auf fields Array-kompatibel

0.1.9-beta46/47

  • error_reporting() temporär gesenkt während LayoutParser läuft

0.1.9-beta45

  • Deduplizierung: Key enthält Modulname ({module}_item_{item_id})

0.1.9-beta41

  • Alle module_defs/*.php im ZIP enthalten
  • Droplets aus Content beim Indexieren entfernt

0.1.9-beta40

  • mb_stripos statt \b Regex in score() und matchCheck()

0.1.9-beta36

  • GROUP_CONCAT für Join-Felder bei 1:n Beziehungen
  • GROUP BY bei Joins

0.1.9-beta33

  • AJAX Spaltenladung für Join-Konfiguration
  • Join auto-aufklappen wenn kein Bild/Link in Haupttabelle
  • Pfad-Template mit {item_id}, {section_id}, {page_id}

0.1.9-beta31

  • Join-System: bis zu 3 LEFT/INNER JOINs pro Modul
  • item_key Feld für Multi-Modus

0.1.9-beta29

  • Hybrid-Dropdown: Tabellenvorfilter + Toggle "Alle anzeigen"

0.1.9-beta28

  • Semi-Konfig: alle mod_* Tabellen mit section_id im Dropdown
  • $ws_hardcoded und Pattern-Matching entfernt

0.1.9-beta26

  • Alle installierten Module in der Übersicht angezeigt

0.1.9-beta25

  • Semi-Konfig System: Tabelle, Felder, Link, Bild, Modus, Filter
  • module_defs/ Generator

Frühere Versionen (0.1.x)

  • Basis-Suche, Core-Patch, Tag-Cloud, AJAX, Berechtigungen
  • Metadaten, Sprachfilter, Session-Deduplizierung
  • Thumbnails + Detailseiten, Layout-Editor, Debug-Modus