Boolsches Feld an-/abhaken wenn Bild in media library hochgeladen wird
Eingetragen von pidru (53)
am 27.11.2020 - 18:57 Uhr in
am 27.11.2020 - 18:57 Uhr in
Da ich keine Lösung finde, vielleicht kann jemand einen Hinweis geben?
Ich habe ein Formular eines Inhaltstyps, in das die Nutzer Daten eingeben und Bilder hochladen können (Typ: Media Library -> image, Entitäts-Referenzierung).
Zusätzlich habe ich ein Boolesches Feld (Bilder hochgeladen: ja/nein), dass ich an andere Stelle nutzen möchte.
(Wie) ist es möglich das das Boolsche Feld (BF) automatisch angehakt wird, sobald der Nutzer ein Bild hochlädt?
Ich habe verschiedenen Dinge ausprobiert:
- states (wenn ein Bild in die media-library hochgeladen wird erscheint ein input mit dem Wert "Entfernen")
- hook_entity_presave, um vor dem Speichern das BF auszufüllen aber das scheint nicht mit Formularen zu funktionieren
- #ajax callback auf ['media_library_update_widget']['#ajax'], allerdings bin ich da zu unerfahren
- und diverse andere Varianten
$form['field_bilder_hochgeladen']['#states'] = [
'checked' => [
':input[name="field_bilder-0-media-library-remove-button"]'=> ['value' => "Entfernen"]
]
];
Das ändern des BF funktioniert zwar grundsätzlich z.B. mit:
function MODULNAME_form_node_INHALTSTYP_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
if (....) {
$form['field_bilder_hochgeladen']['widget']['value']['#default_value'] = 0;
}
else{
$form['field_bilder_hochgeladen']['widget']['value']['#default_value'] = 1;
};
}
aber es ändert sich natürlich nichts, da am Anfang kein Bild vorhanden ist und das hochladen nur per #ajax passiert....
- Anmelden oder Registrieren um Kommentare zu schreiben
node_builder callback
am 29.11.2020 - 17:51 Uhr
Moinsen,
dafür bräuchtest du eine node_builder callback() function:
1. Im Form alter hook die Funktion registrieren:
$form['#entity_builders'][] = 'image_upload_node_builder';
2. Die eigentliche callback function:
<?php
function image_upload_node_builder($entity_type, NodeInterface $node, $form, FormStateInterface $form_state) {
if( ...prüfen, ob Image upload erfolgt ist...) {
$node->set('field_bilder_hochgeladen', 1);
} else {
$node->set('field_bilder_hochgeladen', 0);
}
?>
Super, danke glycid, ich
am 29.11.2020 - 20:19 Uhr
Super, danke glycid,
ich werde es mal auf diese Weise ausprobieren,
auf jeden Fall ein guter Ansatz!
Vielen Dank und schönen Sonntag.