これは私が実際に持っているコードです:
$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つの値のみを許可してこのフィールドをインストールするのですか?
誰かが助けてくれることを願っています。少しイライラしています。
うまくいけば、これが役立つことがわかるでしょう。複数の値を許可するフィールドを作成するには、-1
を使用するときにcardinality
をfield_create_field
に設定します。次に、すべてのインスタンスで複数の値が許可されます(ウィジェットがそれをサポートしている場合)。
例:
field_create_field([
'cardinality' => -1,
'field_name' => 'field_unlimited',
'type' => 'special_content',
'entity_types' => ['node'],
]);
Field API で報告されているように、widget
配列に使用される配列インデックスは次のとおりです。
フィールドウィジェットの動作を定義するのは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,
),
),
);
}
作成しているモジュールは、フィールドが複数の値を使用できるようにするために、そのフックを実装する必要があります。
分類ウィジェットでは、複数の値をカンマで区切って入力することができます。ウィジェットがページに複数回表示されることを期待している場合、そのウィジェットはどのように機能するかではありません。他のウィジェットはおそらく複数の値を含めるためにより多くのフォームフィールドを使用できます。