web-gelistirme-sc.com

İçerik türleri için programlı olarak alanları nasıl oluşturur ve içerik türü formuna nasıl eklersiniz?

Diyelim ki bu alanım var, "map_description". Alan tanımlamak için bu işlevi olacağını biliyorum:

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

Ve ne emin değilim bu kod var ama ben ihtiyacım olacak söylendi:

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

Bu iki kod biti hem kurulum kancamda hem de modülü kurduğumda çalışıyor. Ancak alanlar aslında oluşturulurken, "alanları yönet" yoluyla bunları içerik türüne el ile atamam gerekiyor, alanların içerik türüne otomatik olarak atanmasının bir yolu var mı?

8
rugbert

Neredeyse bitti.

Kodunuzdan:

'bundle' => 'my_content_type',

my_content_type öğesini, eklenmesini istediğiniz içerik türünün adıyla değiştirin.

İşte Makale içeriğine Takma ad metin alanı eklemenin tam bir örneği yazın. ( 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)));
  }
}
10
Merrick

Kodunuzda küçük değişiklikler yapın.

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

);
Field_create_field ($ alan);

& 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'
      )
    )
  ),