2011-01-15 12 views
6

Yeni bir modül oluşturmak için Drupal 7'nin varlıklarını ve alan API'sini kullanmaya çalışıyorum. Belgelerden anlayamadığım şey, yeni API'yi, Body gibi bir dizi ayarlı alanla bir 'içerik türü' (düğüm türü değil) oluşturmak için kullanmanın doğru yoludur.Drupal 7 Varlıkları ve Alan API'sini kullanmanın doğru yolu

Hook_entity_info kullanarak varlığı kurmaya çalışıyorum, o zaman ben de alan alanını field_create_instance kullanarak eklemem gerektiğine inanıyorum, ama işe yaramış görünmüyorum. mycontenttype.module olarak

:

/** 
* Implements hook_entity_info(). 
*/ 
function mycontenttype_entity_info() { 
    $return = array(
    'mycontenttype' => array(
     'label' => t('My Content Type'), 
     'controller class' => 'MyContentTypeEntityController', 
     'base table' => 'content_type', 
     'uri callback' => 'content_type_uri', 
     'entity keys' => array(
     'id' => 'cid', 
     'label' => 'title', 
    ), 
     'bundles' => array(
     'mycontenttype' => array(
      'label' => 'My Content Type', 
      'admin' => array(
      'path' => 'admin/contenttype', 
      'access arguments' => array('administer contenttype'), 
     ), 
     ), 
    ), 
     'fieldable' => true, 
    ), 
); 
    return $return; 
} 

/** 
* Implements hook_field_extra_fields(). 
*/ 
function mycontenttype_field_extra_fields() { 
    $return['mycontenttype']['mycontenttype'] = array(
    'form' => array(
     'body' => array(
     'label' => 'Body', 
     'description' => t('Body content'), 
     'weight' => 0, 
    ), 
    ), 
); 
    return $return; 
} 

O zaman bu .install dosyasında gider

?

+0

Bu blog yazısı may faydalı olun: http://www.istos.it/blog/drupal-entities/drupal-entities-part-3-programming-hello-drupal-entity – bkildow

cevap

1

Sorununuz, düğüm modülü kuruluysa, zaten 'body' adlı bir alanın olduğunu düşünüyorum. Alanınızı yeniden adlandırıp "mycontenttype_body" (comment.module, comment_body) gibi bir şeye yeniden adlandırmanız veya 'body' alanını yeniden kullanmanız ve alan bölümünü ekleyip atlamanız ve örneğini eklemek için atlamanız gerekir. Birincisi ikincisi üzerinden tavsiye edilir.

+0

Evet, yapmak istediğim şey - vücut alanını düğümlerden tekrar kullanma . Bu yüzden, onun örneğini hook_install'a eklemeyi haklıyorum? Çalışmıyor gibi gözüküyor. Vücut alanının field_attach_form() kullanarak formlara otomatik olarak eklendiğini görmeyi beklemeli miyim? –

1

Her alanın, alanın eklenebileceği varlıkları sınırlayan entity_types dizisi vardır. Bulabildiğim en iyi Drupal çözümü, hook_field_create_field, alanları oluşturulduğu gibi değiştirebilir, ancak bu, kurulumda oluşturulan gövde alanı için iyi bir şey değildir. Yani benim çözüm sadece

 
    $data_col = db_query("SELECT data from field_config where field_name = 'body'")->fetchAssoc(); 
    $data = unserialize($data_col['data']); 
    $data['entity_types'][] = 'MY_ENTITY_TYPE'; 
    db_update('field_config') 
    ->fields(array('data' => array('data' => serialize($data)))) 
    ->condition('field_name', 'body') 
    ->execute();
1

sadece burada aynı yol güzel repo başlatmaya oluyor İşte video from fago

İlgili konular