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.phpvia Sentinel-Dateiwbce_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:
- Tabelle wählen — Haupttabelle des Moduls (mit
section_id) - ID-Spalte — WBCE Seiten-Anker (meist
section_id) - Item-Schlüssel — Eindeutiger PK pro Item (für Multi-Modus)
- Titel-Spalte — Lesbarer Name des Eintrags
- Text-Spalten — Inhalt der durchsucht werden soll
- Link-Spalte — Relativer Pfad → wird automatisch zu vollständiger URL
- Bild-Spalte / Pfad-Template —
{item_id},{section_id},{page_id}als Platzhalter - Joins — bis zu 3 LEFT/INNER JOINs für Mehrfachtabellen
- Modus — Single (1 pro Sektion) oder Multi (1 pro Item)
- Filter — Nur aktive Einträge / Zeitsteuerung
Testreihe für neue Module (Checkliste)
- phpMyAdmin:
mod_{modul}*Tabellen auflisten - Haupttabelle mit
section_ididentifizieren - Spaltenstruktur prüfen: PK, Titel, Text, Link, Bild
- Join-Tabellen identifizieren (hat
item_idaber keinesection_id) - Medienordner prüfen: statisch oder dynamisch (
{item_id}Unterordner)? - 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.5 —
preg_replace_callbackmit 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_CONCATzusammengefasst (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:
$twundefined inscore()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()ersetztmb_striposund\bRegex - PHP 8.5 kompatibel, Multibyte-sicher
- "egel" findet nicht mehr "regelmäßig"
0.1.9-beta59
- Debug-Log
WS_FILTERausfilterWords()entfernt
0.1.9-beta58
install.php: alle Spalten vollständig, Droplet-Check, Engine InnoDBupgrade.php:item_titleTEXT, Droplet-Registrierung ergänztindexer.php:{TP}stattTABLE_PREFIXin dynamischen Queries
0.1.9-beta57
- Frischinstallations-kompatibel:
install.phpmit allen neuen Spalten
0.1.9-beta56
display_errorsinsearch_admin_tool.phptemporär deaktiviert
0.1.9-beta55
{if PL.CURRENT}in Pagination durch CSSdisplayersetzt (LayoutParser-Fix)
0.1.9-beta54
{if R.THUMB_URL}und{if R.EXCERPT}durch CSSdisplayersetzt
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:fieldsArray/String kompatibelRESULTS,PAGE_LINKS,TAGCLOUDnull-safe
0.1.9-beta48
- Indexer:
explode()auffieldsArray-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/*.phpim ZIP enthalten - Droplets aus Content beim Indexieren entfernt
0.1.9-beta40
mb_striposstatt\bRegex inscore()undmatchCheck()
0.1.9-beta36
GROUP_CONCATfür Join-Felder bei 1:n BeziehungenGROUP BYbei 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_keyFeld für Multi-Modus
0.1.9-beta29
- Hybrid-Dropdown: Tabellenvorfilter + Toggle "Alle anzeigen"
0.1.9-beta28
- Semi-Konfig: alle
mod_*Tabellen mitsection_idim Dropdown $ws_hardcodedund 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

