web-dev-qa-db-ja.com

新しいフィールドインスタンスの作成における複数の値

これは私が実際に持っているコードです:

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

これの何が問題になっていますか?なぜポートフォリオモジュールは常に1つの値のみを許可してこのフィールドをインストールするのですか?

誰かが助けてくれることを願っています。少しイライラしています。

4
Johnny

うまくいけば、これが役立つことがわかるでしょう。複数の値を許可するフィールドを作成するには、-1を使用するときにcardinalityfield_create_fieldに設定します。次に、すべてのインスタンスで複数の値が許可されます(ウィジェットがそれをサポートしている場合)。

例:

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

Field API で報告されているように、widget配列に使用される配列インデックスは次のとおりです。

  • type(文字列)ウィジェットのタイプ(text_textfieldなど)。ウィジェットのタイプは hook_field_widget_info() を実装するモジュールによって定義されます。
  • 設定(配列)ウィジェットタイプ固有の設定のキー/値ペアのサブ配列。各フィールドウィジェットタイプモジュールは、独自のウィジェット設定を定義および文書化します。
  • weight(float)エンティティ編集フォームの他の要素に対するウィジェットの重み。
  • module(文字列、読み取り専用)ウィジェットタイプを実装するモジュールの名前。

フィールドウィジェットの動作を定義するのはhook_field_widget_info()です。

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

作成しているモジュールは、フィールドが複数の値を使用できるようにするために、そのフックを実装する必要があります。

分類ウィジェットでは、複数の値をカンマで区切って入力することができます。ウィジェットがページに複数回表示されることを期待している場合、そのウィジェットはどのように機能するかではありません。他のウィジェットはおそらく複数の値を含めるためにより多くのフォームフィールドを使用できます。

1
kiamlaluno