Estoy tratando de crear un widget de campo que sea similar al widget de referencia de término normal con una diferencia clave. El usuario debe poder agregar varios términos nuevos de taxonomía al mismo tiempo, esto puede demostrarlo mejor:
Llegué a un punto en el que la funcionalidad es similar a la que proporcionan los módulos de taxonomía / opciones / lista (es decir, se muestran las casillas de verificación / radios, guardar, etc.)
Aquí hay un fragmento importante del código que estoy usando 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,
);
Lo que me arroja aquí es que $ element no es su matriz de formulario habitual, por lo que no estoy seguro de cómo agregar el campo de texto y el botón, especialmente porque sus valores no están destinados a ser guardados. ¿Cuál es la mejor manera de agregar estos campos a mi widget?
En cuanto a agregar el Javascript necesario, ¿estoy en lo cierto al pensar que debería usar #ajax que llama a una función que reconstruye las #opciones para las casillas de verificación?
¡Gracias por adelantado!
EDITAR: mi pregunta inicial fue bastante vaga, aquí hay algunos detalles más sobre lo que he intentado:
$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,
);
Esta es una amalgama de varios ejemplos que he visto y parece acercarme. El problema es que cuando envío el formulario de entidad obtengo el siguiente error:
Aviso: Índice indefinido: tid en taxonomy_field_is_empty () (línea 1402 de modules \ taxonomy \ taxonomy.module).
He echado un vistazo más de cerca a esta función y se espera $item
tener la estructura $item = array('tid', 2)
. Cuando se usa el código anterior, parece haber un delta que viene de algún lado y la estructura de $item
termina siendo $item = array(0, array('tid', 2)
. No puedo averiguar de dónde viene '0'.
OTRA EDICIÓN
He podido corregir el error anterior con el siguiente código alterando $ element así:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
y agregando la función:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
Cuando guardo la entidad, recibo un mensaje que me dice que se ha guardado. Cuando reviso la tabla para el campo, no se está guardando. ¿Qué estoy haciendo mal?