[gelöst]Pflichtfeld vom User deaktivieren lassen
am 03.03.2021 - 08:06 Uhr in
Hi,
ich bin sozusagen auf der Suche nach der „Quadratur des Kreises“:
Ich habe in einer Media entity ein file field, das in bestimmten Fällen leer bleiben muss. Der User soll das bei der Einpflege selber von Fall zu Fall entscheiden können. Pflichtfeld deswegen, damit es bei der Einpflege von Inhalten grundsätzlich nicht vergessen wird (momentan ist es kein Pflichtfeld und die Praxis hat leider gezeigt, dass es immer wieder vergessen wird). Zunächst dachte ich an das Modul Conditional fields, mit dem man den "required" Status in Abhängigkeit vom value eines anderen Felds ändern könnte – wenn das denn zuverlässig funktionieren würde. Siehe diese Issue
Vielleicht hat jemand von euch schonmal so was Ähnliches gebaut und kann mir Tipps geben?
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich würde das mit
am 03.03.2021 - 09:17 Uhr
Ich würde das mit hook_form_alter machen.
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21fo...
Beispiel:
https://drupal.stackexchange.com/a/229641
Du kannst in der Form vorher ein Boolean-Feld abfragen (ob 0 oder 1) und danach setzt Du den Required-Status des File-fields.
Drupal rockt!!!
Danke, den hook kannte ich natürlich
am 03.03.2021 - 10:53 Uhr
Mit hook_form_alter kann ich m. W. nur beim Rendern der edit form eingreifen. In meinem Fall existiert das media item in den meisten Fällen noch gar nicht. Somit gibt es auch kein Boolean Feld, das mit einem Wert gefüllt ist.
Ich suche eine Lösung, die vor dem finalen Speichern des media item schaut, ob ein Boolean Feld einen bestimmten Wert hat und danach entscheidet, ob das file field ausgefüllt sein muss oder nicht. Und dem User dann ggf. wieder die edit form präsentiert mit dem Hinweis, dass das file field in dieser Konstellation ein Pflichtfeld ist. Ich hatte schon an hook_entity_presave gedacht, jedoch ist mir kein Weg bekannt, wie ich von dort wieder in die edit form gelange unter Beibehaltung der Feldwerte.
Du kannst die Eigenschaften
am 03.03.2021 - 12:24 Uhr
Du kannst die Eigenschaften eines Feldes in hook_form_alter beeinflussen. Aber wahrscheinlich hilft Dir das Ändern auf "required" wegen des Core Bugs nicht. Du solltest daher zusätzlich für das Feld eine Validation Routine anbinden. Die mußt Du aber wohl selbst erstellen.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Schau Dir mal folgenden
am 03.03.2021 - 12:28 Uhr
Schau Dir mal folgenden Artikel an.
Dort wird anhand der Option "unpublished/published" überprüft ob ein image-field ausgefüllt sein muss oder nicht.
Das wird man sicherlich auf ein Boolean-Field (o.ä.) übertragen können.
Das musst Du mal austesten.
https://jigarius.com/blog/drupal-entity-validation-api
Drupal rockt!!!
Ah, das sind wertvolle Hinweise
am 03.03.2021 - 12:40 Uhr
Danke @wla und @lonit das sind wertvolle Hinweise. Ich werde dem nachgehen und hier wieder Feedback geben, sobald es geklappt hat.
Danke das ist die Lösung
am 03.03.2021 - 15:41 Uhr
Vielen Dank @lonit für den Link zu dem hilfreichen Tutorial "Create Custom Entity Constraints"
Das darin gezeigte Beispiel enthielt bis auf eine Kleinigkeit die Lösung. Ich musste in dem Validator lediglich anstatt
$entity->isPublished()
diese Zeile einfügen:
$entity->get('field_media_file_activate')->value == '1'