プログラムでコンテンツタイプのフィールドを作成し、コンテンツタイプフォームに追加する方法


8

このフィールド「map_description」があるとします。私はこの関数がフィールドを定義することを知っています:

$field = array(
  'field_name' => 'map_description',
  'cardinality' => 1,
  'type' => 'text',
);
field_create_field($field);

そして、私はそれが何をするかわからないこのコードを持っていますが、私はそれが必要になると言われました:

 $instance = array(
    'field_name' => 'map_description',
    'label' => 'The map description.',
    'bundle' => 'my_content_type',
    'entity_type' => 'node',
    'widget' => array(
    'type' => 'text_textfield',
 );
 field_create_instance($instance)

これら2つのコードビットはどちらもインストールフックにあり、モジュールをインストールすると実行されます。しかし、フィールドは実際に作成されていますが、「フィールドの管理」を介して手動でコンテンツタイプに割り当てる必要があります。フィールドをコンテンツタイプに自動的に割り当てる方法はありますか?

回答:


10

あと少しです。

あなたのコードから:

'bundle' => 'my_content_type',

my_content_typeを、アタッチするコンテンツタイプの名前に置き換えます。

以下は、AliasテキストフィールドをArticleコンテンツタイプに追加する完全な例です。(monarchdigital.comから)

/**
 * Update hook to add a field to a node.
 */
function my_module_update_7000() {
  $field_name = 'field_alias';
  // Make sure the field doesn't already exist.
  if (!field_info_field($field_name)) {
    // Create the field.
    $field = array(
      'field_name' => $field_name,
      'type' => 'text',
      'settings' => array('max_length' => 64),
    );
    field_create_field($field);

    // Create the instance.
    $instance = array( 'field_name' => $field_name,
      'entity_type' => 'node',
      'bundle' => 'article',
      'label' => 'Alias',
      'description' => 'The article alias.',
      'required' => TRUE,
    );
    field_create_instance($instance);

    watchdog('my_module', t('!field_name was added successfully.', array('!field_name' => $field_name)));
  }
  else {
    watchdog('my_module', t('!field_name already exists.', array('!field_name' => $field_name)));
  }
}

0

コードに小さな変更を加えます。フィールドで

$t = get_t();
$field = array(
   'field_name' => 'map_description',
    'label' => $t('My Description'),
    'type' => 'text',

);
field_create_field($ field);

& Write this in Instance

$t = get_t();
return array(
  'map_description' => array(
    'field_name' => 'map_description',
    'type' => 'text',
    'label' => $t('Map Description'),
    'bundle' => 'your_custom_content_type',
    'entity_type' => 'node',
    'widget' => array(
      'type' => 'text_textfield'
    ),
    'display' => array(
      'example_node_list' => array(
        'label' => $t('Map Description'),
        'type' => 'text'
      )
    )
  ),
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.