Disabled ist nicht gleich Readonly

Möchte man in einem Processwire-API-Formular den Wert einen Feldes dynamisch vorbelegen, der zudem nicht vom Benutzer änderbar sein darf, sollte man auf ein kleines Detail acht geben.

Folgendes Szenario:

Ich hole mir einige Information aus der Datenbank, die ich anschließend im Formular nutzen möchte.

$meetings = $pages->get("parent=/tools/meetings/);

Ein Wert im Array $meetings ist ein einfacher Datums-String ($meeting_date). Ein bestimmtes Feld des Formulars soll nun mit diesem Wert vorbelegt werden.

$field = $modules->get("InputfieldText");
$field->label = "Datum";
$field->attr('value', $meetings->meeting_date);
$field->attr('id+name','meeting_date');
$form->append($field);

Damit der Benutzer den Wert des Feldes nicht anpassen kann, ergänze ich es durch ein entsprechende HTML5 Attribut, dass mir spontan sinnvoll erscheint:

$field->attr('disabled', 'disabled');

Das Attribut disabled wird von Processwire sehr wörtlich genommen, bzw. korrekt angewendet. Was dann dazu führt, dass das Formularfeld beim ersten Rendern mit den dynamischen Variablenwert befüllt wird, nach Verarbeiten des Formulars (nach einem Submit) allerdings leer ist.

Was Sinn macht, habe ich das Feld ja auch mit dem Attribut disabled versehen und das Formular somit angewiesen, dieses Feld in der Verarbeitung zu ignorieren. Hm...

HTML5 bietet für nicht bearbeitbare Formularfelder zwei Attribute: disabled und readonly...

... genau, readonly repräsentiert exakt das, was ich erreichen will. So funktioniert es:

$field = $modules->get("InputfieldText");
$field->label = "Datum";
$field->attr('value', $meetings->meeting_date);
$field->attr('id+name','meeting_date');
$field->attr('readonly', 'readonly');
$form->append($field);

Damit das Feld nach Verarbeitung des Formulars (sei es durch einen erfolgreichen Submit oder das erneute Rendern im Falle eines aufgetretenen Fehlers) weiterhin dynamisch befüllt wird und trotzdem vom Benutzer nicht änderbar ist, ist das Attribut readonly die richtige (und einzige) Wahl.