Bludit-Plugins mit Einstellungen: dbFields, form(), post() und Flat-File-Speicher
So bekommt ein Plugin konfigurierbare Felder, persistente Werte und einen eigenen Workspace.
Sobald ein Plugin konfigurierbar werden soll, kommt Bludits Plugin-Datenbank ins Spiel. Die Basisklasse legt pro Plugin eine kleine Flat-File-Datenbank unter bl-content/databases/plugins/ an. Dafür definierst du Felder in init(), renderst Einstellungen in form() und speicherst sie in post().
dbFields definieren
public function init()
{
$this->dbFields = array(
'headline' => 'Hallo',
'enabled' => true,
'limit' => 5
);
}
Formular ausgeben
public function form()
{
$headline = htmlspecialchars($this->getValue('headline'), ENT_QUOTES, 'UTF-8');
$checked = $this->getValue('enabled') ? 'checked' : '';
return '<label>Überschrift</label>'
.'<input name="headline" value="'.$headline.'">'
.'<label><input type="checkbox" name="enabled" value="1" '.$checked.'> Aktiv</label>';
}
Die Konfigurationsseite selbst, inklusive CSRF-Token und Speichern/Abbrechen-Buttons, stellt Bludit bereit. Dein form() liefert nur die Felder im Formularinneren.
Werte speichern
public function post()
{
$this->db['headline'] = isset($_POST['headline']) ? trim($_POST['headline']) : '';
$this->db['enabled'] = isset($_POST['enabled']);
return $this->save();
}
Typen bewusst behandeln
Checkboxen fehlen im POST vollständig, wenn sie nicht markiert sind. Zahlen solltest du explizit in Integer umwandeln und begrenzen. Text, der später in HTML ausgegeben wird, muss beim Rendern kontextgerecht escaped werden. Verlasse dich nicht darauf, dass ein Wert „aus dem Admin kommt“ und deshalb automatisch sicher ist.
Workspace statt Datenbankfeld
Für größere Dateien, Cache oder importierte Datensätze ist der Plugin-Workspace besser geeignet als ein riesiges JSON-Feld. $this->workspace() zeigt in einen eigenen Ordner unter bl-content/workspaces/. Beim Deinstallieren kann Bludit diesen Bereich aufräumen.