web-dev-qa-db-fra.com

Plusieurs valeurs dans la création d'une nouvelle instance de champ

C'est le code que j'ai réellement:

$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);

Quel est le problème avec ça? Pourquoi le module de portefeuille installe-t-il toujours ce champ avec une seule valeur?

J'espère que quelqu'un peut aider. Je suis un peu frustré.

4
Johnny

Comme indiqué dans API sur le terrain , les index de tableau utilisés pour le tableau widget sont les suivants:

  • type (String) Le type du widget, tel que text_textfield. Les types de widget sont définis par des modules qui implémentent Hook_field_widget_info () .
  • paramètres (tableau) Un sous-réseau de paires de touches/de valeur de paramètres spécifiques au widget. Chaque module de type widget de champ définit et documente ses propres paramètres de widget.
  • poids (flotteur) Le poids du widget par rapport aux autres éléments des formulaires d'édition d'entités.
  • module (chaîne, lecture seule) Le nom du module implémente le type de widget.

C'est hook_field_widget_info() qui définit les comportements des widgets de terrain.

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,
      ),
    ),
  );
}

Le module que vous écrivez doit mettre en œuvre ce crochet afin de permettre au champ d'utiliser plusieurs valeurs.

Le widget de taxonomie permet de saisir plusieurs valeurs en les entrant séparées par une virgule; Si vous attendez que le widget apparaisse plus d'une fois sur la page, ce n'est pas comment fonctionne ce widget. D'autres widgets peuvent probablement utiliser plus de champs de formulaire pour contenir plusieurs valeurs.

1
kiamlaluno