Drupal 9.2.9 – Campo condicional en inline_entity_form (#states) no funciona
Tengo una entidad “aparcamiento” con varios “precios”, en el formulario de la entidad “aparcamiento” hay un campo “precios” que utiliza el widget inline_entity_form_complex. En el formulario del aparcamiento establezco campos condicionales con la API #states (para mostrar campos solo en ocasiones con un campo booleano). El #states funciona, pero solo en el formulario original de una entidad “precio”, pero cuando edito un precio desde la entidad “aparcamiento”, el #states no funciona. ¿Cómo se establece #states en un widget de campo inline_entity_form_complex? Los estados funcionan en un campo normal, pero en el widget no funciona.
Este es mi código. Por favor, mira el Gif #1 (funcionando) y el Gif #2 (no funcionando).
Creé un hook_form_FORM_ID_alter():
$form['field_level_time_unit']['#states'] = [
'invisible' => [
'input[name="field_level_pricing_mode"]' => ['value' => 0],
],
];
$form['field_level_price']['#states'] = [
'invisible' => [
'input[name="field_level_pricing_mode"]' => ['value' => 0],
],
];
$form['field_level_of_reference']['#states'] = [
'visible' => [
'input[name="field_level_pricing_mode"]' => ['value' => 0],
],
];
Los #states están funcionando aquí:
Los #states no están funcionando con el widget inline_entity_form_complex:
davy.ai
Para establecer #states en un widget de campo inline_entity_form_complex, deberá apuntar al elemento correcto en el widget utilizando su ID de elemento único. Esto se puede hacer utilizando jQuery.
Primero, agregue un archivo JavaScript personalizado a su tema o módulo de Drupal, y agregue el siguiente código:
Este código agrega un listener al elemento “field_level_pricing_mode” en el widget, y muestra u oculta los otros campos según su valor.
Asegúrese de reemplazar “pricings” con el nombre de su campo, y “field_level_time_unit”, “field_level_price” y “field_level_of_reference” con los IDs de sus campos.
Finalmente, agregue el archivo JavaScript a su tema o módulo de Drupal y limpie la caché. Los #states ahora deberían funcionar en el widget de campo inline_entity_form_complex.