Ich versuche, einige der Drupal-Profilformularfelder im Bearbeitungsmodus schreibgeschützt zu machen. Ich verwende den folgenden Code in hook_alter
$form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly';
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
return $element;
}
In der UI-Datei wird angezeigt, dass sie schreibgeschützt ist, aber ich kann den Wert mithilfe von Firebug ändern und speichern. Gibt es eine Möglichkeit, dieses Verhalten zu verhindern?
field_permissions
dies einfacher, als die Arbeit auf schmutzige Weise auszuführen.Wenn Sie ein Feld als festlegen
readonly
, sperrt der Browser das Feld und sendet die Daten bei der Übermittlung an den Server zurück. Ein weiteres Attribut ist,disabled
dass das Feld gesperrt wird und keine Daten an den Server zurückgesendet werden.In beiden Fällen können Sie den Wert nach dem Absenden zwangsweise auf den gleichen Wert einstellen. Auch wenn das Feld auf
readonly
oder gesetztdisabled
ist und der Benutzer den HTML-Code geändert und andere Daten gesendet hat,$form_state['values']
bleiben diese unverändert.Beachten Sie, dass wir
#value
#default_value setzen. #default_value ist die übliche Methode zum Festlegen des Standardwerts, der$form_state['values']
beim Erstellen des Formulars geladen wird und den Standardwert oder Benutzereingaben enthält. Wenn Sie#value
explizit festlegen , wird die Benutzereingabe ignoriert und#value
verwendet.Jedenfalls würde ich empfehlen,
'#access' => FALSE,
beim Ausblenden von Formularelementen zu verwenden. Das Element wird vollständig entfernt, und Sie können seine Werte verwenden.quelle
Sie können Firebug nicht daran hindern, schreibgeschützte Felder zu ändern. Wenn das Textfeld jedoch schreibgeschützt ist, besteht der einzige Zweck darin, Daten anzuzeigen. Warum also nicht das Eingabeelement gegen ein Textelement austauschen?
Sie können stattdessen das Attribut "disabled" verwenden, da deaktivierte Eingabefelder nicht an den Server gesendet werden.
Sie können das Attribut "disabled" auch mit firebug entfernen, der Drupal-Core reagiert jedoch nicht auf Änderungen deaktivierter Eingabefelder!
quelle
Der sicherste Weg, dies zu tun, besteht darin, den Feldtyp so zu ändern, dass er ein "Element" ist. http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#item
quelle
Sie können Feldberechtigungen + Feld Readonly verwenden .
Mit den Feldberechtigungen können Sie einige Ihrer Felder für bestimmte Benutzer unzugänglich machen.
Mit Readonly -Feldern können Sie die nicht zugänglichen Felder als schreibgeschützte Elemente in Bearbeitungsformularen anzeigen (anstatt sie auszublenden ).
quelle
Ich denke, dies
#disabled = true;
ist der einfachste Weg, anstatt ein schweres Modul zu Ihrem Kern hinzuzufügen. Als Beispiel deaktiviere ich die Bearbeitung des benutzerdefinierten Bildfelds in user_profile_form, wenn es zuvor vom Benutzer ausgefüllt wurde.Sie können auch die Rolle des Benutzers überprüfen und nur für Benutzer ohne Administratorrechte deaktivieren (schreibgeschütztes Feld).
quelle