Sto cercando di creare un widget di campo simile al normale widget di riferimento con una differenza chiave. L'utente deve essere in grado di aggiungere più nuovi termini di tassonomia contemporaneamente, questo può dimostrarlo meglio:
Sono arrivato a un punto in cui la funzionalità è simile a quella fornita dai moduli di tassonomia / opzioni / elenco (ovvero sono mostrate le caselle di controllo / le radio, il salvataggio ecc.)
Ecco un pezzo importante del codice che sto usando in hook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
Quello che mi sta gettando qui è che $ element non è la solita matrice di moduli, quindi non sono sicuro di come aggiungere il campo di testo e il pulsante e - soprattutto perché i loro valori non sono pensati per essere salvati. Qual è il modo migliore per aggiungere questi campi al mio widget?
Per quanto riguarda l'aggiunta del Javascript necessario, ho ragione nel pensare che dovrei usare #ajax che chiama una funzione che ricostruisce le #opzioni per le caselle di controllo?
Grazie in anticipo!
EDIT - La mia domanda iniziale era piuttosto vaga, ecco alcuni dettagli in più su quello che ho provato:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
Questa è una fusione di vari esempi che ho visto e sembra avvicinarmi di più. Il problema è quando invio il modulo entità ottengo il seguente errore:
Avviso: indice indefinito: tid in taxonomy_field_is_empty () (riga 1402 di moduli \ taxonomy \ taxonomy.module).
Ho dato un'occhiata più da vicino a questa funzione e si aspetta $item
di avere la struttura $item = array('tid', 2)
. Quando si utilizza il codice sopra sembra che ci sia un delta proveniente da qualche parte e la struttura di $item
essere $item = array(0, array('tid', 2)
. Non riesco a capire da dove provenga '0'?
UN ALTRO EDIT
Sono stato in grado di correggere l'errore sopra con il seguente codice modificando $ element in questo modo:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
e aggiungendo la funzione:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
Quando salvo l'entità ricevo un messaggio che mi dice che è stato salvato. Quando controllo la tabella per il campo, non viene salvato. Che cosa sto facendo di sbagliato?