default value per entity reference in form_alter
In form alter assegno dei valori di default a vari campi, nessun problema., tranne che per i campi entity reference
Utilizzo questo codice
$form['field_localita_partenza']['widget'][0]['target_id']['#default_value'] = $ComuUff;
Pur avendo controllato con kint che nell'array il default_value viene dopo il target_id, utilizzandolo mi riporta questo errore
InvalidArgumentException: The #default_value property has to be an entity object or an array of entity objects. in Drupal\Core\Entity\Element\EntityAutocomplete::valueCallback() (line 68 of core\lib\Drupal\Core\Entity\Element\EntityAutocomplete.php).
call_user_func_array(Array, Array) (Line: 1275)
Drupal\Core\Form\FormBuilder->handleInputElement('node_missioni_cp_ins_da_dipe_form', Array, Object) (Line: 992)
Drupal\Core\Form\FormBuilder->doBuildForm('node_missioni_cp_ins_da_dipe_form', Array, Object) (Line: 1062)
Drupal\Core\Form\FormBuilder->doBuildForm('node_missioni_cp_ins_da_dipe_form', Array, Object) (Line: 1062)
Utilizzando #value al posto di default_value, nessun problema
$form['field_localita_partenza']['widget'][0]['target_id']['#default_value'] = $ComuUff;
L'inconveniente è che quando inserisco il movimento pur cambiando la località, in fase di salvataggio mi rimette il valore di default
Risposte
Assicurati che $ComuUff sia
Assicurati che $ComuUff sia l'entità da referenziare caricata ad esempio con il metodo ::load(), vedi se questo risolve.
La variabile la riempio
La variabile la riempio attraverso una function
Il valore lo prende da un altro campo entity reference di un altro nodo di un altro Content Type. La scritta visualizzata è giusta è solo quando cambio e salvo che rimette il valore. Ho provato con default_value (ho visto con kint ed è presente) ma non funziona. Mi lascia il campo in bianco.
Non ho capito se il load che mi hai consigliato è riferito al nodo che ricerco oppure al campo da cui poi devo prendere il title
Ho pensato di poter risolvere con il controllo di una if
ma nulla da fare
Prendendo a riferimento il
Prendendo a riferimento il primo post:
<?php
$form['field_localita_partenza']['widget'][0]['target_id']['#default_value'] = $ComuUff;
?>
l'importante è che $ComuUff sia un'entità caricata tramite il metodo load. Se fosse un nodo:
<?php
$ComuUff = Node::load(100);
?>
prova così.
Nulla da Fare, ci avevo
Nulla da Fare, ci avevo pensato e provato ma sbagliavo a scrivere un dato.
Ti allego il codice della func, non vorrei aver capito male
function DatiUtente( $cosa ) {
$PageID = 20859; // Nodo contenente i dati dell'Utente
$DaUt = \Drupal::entityTypeManager()->getStorage('node')->load($PageID);
$ret = $DaUt->get('field_comune')->entity->label(); // Restituisce il Comune del'Ufficio
$nid = $DaUt->get('field_comune')->getValue()[0]['target_id']; // Restituisce l'ID del Comune del'Ufficio
$b = Node::load($nid);
$ret= $b->get('title')->value;
['target_id']);
return $ret;
}
Il dato nell'entity reference è visulizzato nella stessa maniera di e aggiornando la città va bene ma dopo il salvataggio rimette il valore di default.
In modifica invece funziona bene
Dal codice sembrerebbe che
Dal codice sembrerebbe che possa andare qualcosa del genere, ovviamente andrebbe aggiunta un pò di gestione degli errori ...
<?php
$form['field_localita_partenza']['widget'][0]['target_id']['#default_value'] = \Drupal::entityTypeManager()->getStorage('node')->load(20859)->field_comune->entity;
?>
La gestione degli errori
La gestione degli errori ancora non so come si faccia.
Ho copiato il codice
$form['field_localita_partenza']['widget'][0]['target_id']['#value'] =
\Drupal::entityTypeManager()->getStorage('node')->load(182)->field_comune->entity;
Ma mi ritorna un errore ed il campo è vuoto
Notice: Trying to get property 'entity' of non-object in udf_form_alter() (line 61 of modules\custom\udf\udf.module).
Non riesco a capire perchè riprenda il dato del form_alter.
Ho provato anche con if (empty($form['field_localita_partenza']['widget'][0]['target_id']['#value']))
per non far caricare il dato quando si salva
Fatte altre prove cambiato il
Fatte altre prove cambiato il codice in
$form['field_localita_partenza']['widget'][0]['target_id']['#default_value'] = 'ROMA';
A questo punto non è un problema di valore che prende dalla funtion
Non cambia nulla. Le opzioni a questo punto sono 2 o è un bug di Drupal oppure i valori di default vanno inseriti da un'altra parte.
Stai comunque passando una
Stai comunque passando una stringa invece di un'entità.
Provo a farti un esempio funzionante.
Ho un contenuto Articolo (article) con un campo Riferimento a contenuto (field_altro_autocomplete).
Ho un contenuto Contenuto esempio (contenuto_esempio) con un campo Riferimento a contenuto (field_autocomplete).
Ho un articolo con ID 1 (node/1) con field_altro_autocomplete legato a un nodo con ID 7 (node/7).
Ho creato un form alter così:
<?php
function mgi_page_form_alter(array &$form, \Drupal\Core\Form\FormStateInterface $form_state, string $form_id) {
if ($form_id === 'node_contenuto_esempio_form') {
$form['field_autocomplete']['widget'][0]['target_id']['#default_value'] = Drupal\node\Entity\Node::load(1)->field_altro_autocomplete->entity;
}
}
?>
Quando vado ad aggiungere un nuovo Contenuto esempio il campo Autocomplete (field_autocomplete) risulta pre-riempito così:
E' un dubbio che avevo, in
E' un dubbio che avevo, in quanto visualizzando il dato visualizza la descrizione della località ma non l'ID. Avevo pensato di passare direttamente l'ID ma visualizzava campo vuoto. Lavorerò su questo. Grazie
Ciao Maurizio, dopo averci
Ciao Maurizio, dopo averci lavorato un po' e letto altri documenti mi inizia ad essere più chiaro come funziona Drupal.
Ho però un dubbio in quanto, il codice che ho usato e che corrisponde al tuo, l'avevo già inserito ma non funzionava. Effettuata anche la cancellazione della cache ma sempre con lo stesso risultato. Poi alla fine ha funzionato.
L'importante è che abbia capito e che sia funzionante.
In relazione a quello che mi hai detto e cioè che non posso usare una stringa per valorizzare un entityReference con widget autocompletamento, non so se quello che mi serve possa essere realizzato.
Sicuramente nella domanda iniziale non sono stato chiaro
Ho un contenuto Comuni e un contenuto Località
Nel contenuto DatiUtente, ho un campo entityReference (field_comune) collegato al contenuto Comune.
Nel contenuto movimenti ho un entityReference collegato al contenuto localita (field_localita_partenza).
Questo entityReference devo collegarlo al contenuto localita attraverso il title.
Quindi carico il nodo DatiUtente, prendo la label di field_comune (entityReference), cerco la descrizione in località, prendo il title lo metto in field_localita_partenza. Ma essendo una stringa non lo collega
Col codice che mi hai indicato funziona ma l'ID del nodo è quello del comune e non della localita.
C'è la possibilità di collegarlo?
Scusa la prolissità e spero di essere stato chiaro
Per stringere, carico il nodo del contenuto località, attraverso un campo o prorpietà posso valorizzare il campo EntityReference field_localita_partenza?
Non riesco a trovare il tempo
Non riesco a trovare il tempo per analizzare approfonditamente la tua struttura, più dell'esempio che ti ho scritto non riesco a fare, ma tenendo conto degli esempi precedenti, l'attributo #default_value di field_localita_partenza puoi valorizzarlo con la relativa entità Località: se riesci a prendere il title della località puoi prendere anche l'id e caricare la relativa entità, usando poi lo snippet sopra per passarlo come valore di default.
Grazie del tempo Maurizio,
Grazie del tempo Maurizio, vedrò di trovare qualcosa in rete
Quindi carico il nodo
Dopo aver cercato la descrizione in località, invece di prenderne il title (immagino tu abbia caricato l'entità ed estratto il titolo con label()) passi l'intera entità al #default_value di field_localita_partenza. Dovresti così avere il default settato come ti serve.
Si funziona Tante grazie
Si funziona
Tante grazie