2011-01-15 7 views
6

Ich versuche, die Entitäten und die Feld-API von Drupal 7 zu verwenden, um ein neues Modul korrekt zu erstellen. Was ich aus der Dokumentation nicht verstehen konnte, ist die korrekte Verwendung der neuen API zum Erstellen eines "Inhaltstyps" (kein Knotentyp) mit einer Anzahl von festgelegten Feldern, z. B. "Body".Richtiger Weg zur Verwendung von Drupal 7-Entities und Field-API

Ich versuche, die Entität mit hook_entity_info einzurichten, dann glaube ich, ich muss das Feld body mit field_create_instance hinzufügen, aber ich kann nicht scheinen, um es zum Laufen zu bringen.

In mycontenttype.module:

/** 
* 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; 
} 

Dann ist diese in der .install Datei nicht gehen?

+0

Dieser Blog-Eintrag kann nützlich sein: http://www.istos.it/blog/drupal-entities/drupal-entities-part-3-programming-hello-drupal-entity – bkildow

Antwort

1

Ich denke, Ihr Problem ist, dass, wenn Knotenmodul installiert ist, gibt es bereits ein Feld namens "Körper". Sie sollten Ihr Feld entweder in "mycontenttype_body" umbenennen (comment.module verwendet comment_body), oder Sie können das Feld "body" erneut verwenden und das Hinzufügen des Feldteils überspringen und die Instanz hinzufügen. Ersteres wird gegenüber letzterem empfohlen.

+0

Ja, das ist, was ich tun möchte - wiederverwenden das Körperfeld von Knoten . Also bin ich richtig, die Instanz davon in hook_install hinzuzufügen? Es scheint nicht zu funktionieren. Sollte ich erwarten, dass das Körperfeld mit field_attach_form() automatisch zu Formularen hinzugefügt wird? –

1

Jedes Feld hat eine Array-Eigenschaft, entity_types, die die Entitäten einschränkt, an die das Feld angehängt werden kann. Die beste Drupal-Lösung, die ich finden kann, hook_field_create_field, kann Felder ändern, während sie erstellt werden, aber das ist nicht gut für das Body-Feld, das bei der Installation erstellt wird. Also meine Lösung ist einfach die Datenbank direkt in meine hook_install

 
    $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

gerade begonnen den gleichen Weg hier unten zu bearbeiten ist ein video from fago

Verwandte Themen