Pregunta

Tengo un formulario de nodo en Drupal 7, para simplificarlo para el usuario, quiero dividirlo en secciones utilizando la función de pestañas verticales.

Usando Hook_Form_Formid_alter () Puedo mover los campos sin dificultad. Cuando se guarda el nodo, escribe los valores correctamente y aparecen en la vista del nodo.

Pero cuando reedito el nodo, cualquier valor para un campo movido no está establecido, por lo que pierdo efectivamente los datos. He probado varias opciones, incluido el cambio de valor de array_parents en form_state ['campos'] [campo] [langcode].

(Me preguntaba si sería mejor mover los campos durante pre_render).

¿Algunas ideas?

¿Fue útil?

Solución

Los campos API de campo de forma predeterminada se colocan en un tipo de campo de contenedor. Si desea convertirlos en un campos en las pestañas verticales, puede hacer lo siguiente:

$form['field_tags']['#type'] = 'fieldset';
$form['field_tags']['#title'] = 'Tags';
$form['field_tags']['#group'] = 'additional_settings';

Una mejor solución sería usar el nuevo Módulo de grupo de campo Entonces puede hacer estas modificaciones a través de la interfaz de usuario, en lugar de en el código.

Otros consejos

A veces funciona mejor mover elementos de campo en el paso #After_Build del proceso de creación de formulario.

En Hook_Form_alter, establece su función de compilación posterior como así:

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    $form['#after_build'][] = 'mymodule_myform_after_build';
}

Luego define su función After_Build como así:

function mymodule_myform_after_build($form)
{
   //do stuff to the form array
   return $form;
}

Creo que incluso puedes definir después de_build en elementos individuales.

De todos modos, es una buena manera de alterar la forma después de que todos los módulos hayan hecho lo suyo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top