Hook_node_info () içine alan ekle;


9

Hook_node_info kullanılarak bildirilen bir düğüm türüne alan eklemek mümkün müdür? Alanları ayrı ayrı eklemek zorunda mıyım? Öyleyse, bunun için hangi kancayı kullanırdım?

Yanıtlar:


8

Alanları ayrı ayrı eklemeniz gerekir, bunlar eklenemez hook_node_info(). Bunu genellikle hook_install()modülünüzün .install dosyasındaki bir işlevde yaparsınız .

Blog modülünün kurulum dosyasında Drupal çekirdeğinden güzel ve basit bir örnek:

function blog_install() {
  // Ensure the blog node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['blog']);
}

İşlev yalnızca düğüm türlerini yeniden oluşturur (böylece yeni eklenen tür kullanılabilir), ardından node_add_body_field()işlevi kullanarak bir gövde alanı ekler . Bu işlev kendi içinde bir alanın, o alanın bir örneğinin nasıl oluşturulacağına ve field_create_field()ve field_create_instance()işlevlerini kullanarak bir içerik türüne nasıl ekleneceğine dair mükemmel bir örnek verir .

Kod o kadar uzun değil bu yüzden buraya örnek olarak ekleyeceğim:

function node_add_body_field($type, $label = 'Body') {
  // Add or remove the body field, as needed.
  $field = field_info_field('body');
  $instance = field_info_instance('node', 'body', $type->type);
  if (empty($field)) {
    $field = array(
      'field_name' => 'body', 
      'type' => 'text_with_summary', 
      'entity_types' => array('node'),
    );
    $field = field_create_field($field);
  }
  if (empty($instance)) {
    $instance = array(
      'field_name' => 'body', 
      'entity_type' => 'node', 
      'bundle' => $type->type, 
      'label' => $label, 
      'widget' => array('type' => 'text_textarea_with_summary'), 
      'settings' => array('display_summary' => TRUE), 
      'display' => array(
        'default' => array(
          'label' => 'hidden', 
          'type' => 'text_default',
        ), 
        'teaser' => array(
          'label' => 'hidden', 
          'type' => 'text_summary_or_trimmed',
        ),
      ),
    );
    $instance = field_create_instance($instance);
  }
  return $instance;
}

Teşekkürler. Hook_uninstall'ımda bir şey yapmam gerekir mi?
Gaelan

Gerçekten size kalmış ... eğer oluşturduğunuz herhangi bir içeriği / içerik türünü / alanı kaldırmak istiyorsanız evet, eğer yapmazsanız, o zaman hayır :)
Clive

Yani modülüm kapatıldığında içerik türüm kaybolmuyor mu?
Gaelan

2
Devre dışı bırakılan modülü kaldırsanız bile modülünüz devre dışı bırakıldığında (Drupal 7'de) özel İçerik Türünüz kaybolmaz. Modülünüzün hook_uninstall () işlemi sırasında yükleme sırasında oluşturduğunuz İçerik Türlerini silmek için kod yazarsanız, evet, modülünüzü Kaldırdığınızda İçerik Türü kaybolur (ancak yalnızca devre dışı bıraktığınızda hala görünmez).
Kod Amca Maymun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.