it-swarm-es.com

Múltiples valores al crear una nueva instancia de campo

Este es el código que realmente tengo:

$instance = array(
    'field_name' => FIELD_PROJECT_TAGS,
    'entity_type' => 'node',
    'label' => $vocabulary->name,
    'bundle' => 'portfolio_project',
    'required' => true,
    'widget' => array(
        'type' => 'taxonomy_autocomplete',
        'behaviors' => array(
            'multiple values' => FIELD_CARDINALITY_UNLIMITED,
        ),
    ),
    'display' => array(
        'default' => array(
            'type' => 'taxonomy_term_reference_link',
            'weight' => 10,
        ),
        'teaser' => array(
            'type' => 'taxonomy_term_reference_link',
            'weight' => 10,
        ),
    )
);
field_create_instance($instance);

¿Qué tiene de malo esto? ¿Por qué el módulo de cartera siempre instala este campo permitiendo solo un valor?

Espero que alguien pueda ayudar. Estoy un poco frustrado.

4
Johnny

Esperemos que esto sea útil: para crear un campo que permita múltiples valores, establezca cardinality en -1 cuando usas field_create_field. Entonces, todas las instancias permitirán múltiples valores (siempre que el widget lo admita).

Ejemplo:

field_create_field([
  'cardinality' => -1,
  'field_name' => 'field_unlimited',
  'type' => 'special_content',
  'entity_types' => ['node'],
]);
2
james_alvarez

Como se informa en API de campo , los índices de matriz utilizados para la matriz widget son los siguientes:

  • type (string) El tipo del widget, como text_textfield. Los tipos de widgets se definen mediante módulos que implementan hook_field_widget_info () .
  • settings (array) Un subconjunto de pares clave/valor de configuraciones específicas de tipo de widget. Cada módulo de tipo de widget de campo define y documenta su propia configuración de widget.
  • peso (flotante) El peso del widget en relación con los otros elementos en los formularios de edición de entidad.
  • módulo (cadena, solo lectura) El nombre del módulo que implementa el tipo de widget.

Es hook_field_widget_info() que define los comportamientos de los widgets de campo.

function hook_field_widget_info() {
  return array(
    'text_textfield' => array(
      'label' => t('Text field'), 
      'field types' => array('text'), 
      'settings' => array('size' => 60), 
      'behaviors' => array(
        'multiple values' => FIELD_BEHAVIOR_DEFAULT, 
        'default value' => FIELD_BEHAVIOR_DEFAULT,
      ),
    ), 
    'text_textarea' => array(
      'label' => t('Text area (multiple rows)'), 
      'field types' => array('text_long'), 
      'settings' => array('rows' => 5), 
      'behaviors' => array(
        'multiple values' => FIELD_BEHAVIOR_DEFAULT, 
        'default value' => FIELD_BEHAVIOR_DEFAULT,
      ),
    ), 
    'text_textarea_with_summary' => array(
      'label' => t('Text area with a summary'), 
      'field types' => array('text_with_summary'), 
      'settings' => array(
        'rows' => 20,
        'summary_rows' => 5,
      ), 
      'behaviors' => array(
        'multiple values' => FIELD_BEHAVIOR_DEFAULT, 
        'default value' => FIELD_BEHAVIOR_DEFAULT,
      ),
    ),
  );
}

El módulo que está escribiendo debe implementar ese enlace, para permitir que el campo use múltiples valores.

El widget de taxonomía permite ingresar múltiples valores al ingresarlos separados por una coma; si espera que el widget aparezca más de una vez en la página, entonces no es así como funciona ese widget. Otros widgets probablemente pueden usar más campos de formulario para contener múltiples valores.

1
kiamlaluno