2011-10-10 4 views
0

J'essaie de comprendre ce qui ne va pas avec ce morceau de code Drupal 6 php je suis en train de faire fonctionner dans Drupal 7:Drupal 6 vers Drupal 7 migration forme API extrait de code php

function node_widget_get_fields(&$form) { 
    $fields = array(); 
    if (isset($form['#type'])) { 
    $content_type = content_types($form['#type']['#value']); 
    foreach ($content_type['fields'] as $field_name => $field) { 
     if ($field['type'] == 'nodereference' && $field['widget']['type'] == 
     'node_widget_node_form') { 
    $fields[$field_name] = $field; 
    } 
} 
} 
return $fields; 

C'est jusqu'où j'ai:

function node_widget_get_fields(&$form) { 
    $fields = array(); 
    if (isset($form['#type'])) { 
    $content_type = field_info_instances($form['#type']['#value']); 
    foreach ($content_type['fields'] as $field_name => $field) { 
     if ($field['type'] == 'nodereference' && $field['widget']['type'] == 
     'node_widget_node_form') { 
    $fields[$field_name] = $field; 
    } 
} 
} 
return $fields; 

erreurs retour:

Notice: Undefined index: f in field_info_instances() (line 682 of /modules/field/field.info.inc). 
Warning: Invalid argument supplied for foreach() in node_widget_get_fields() (line 164 of all/modules/node_widget/includes/node_widget.form.inc). 

et

Notice: Undefined index: how_to in field_info_instances() (line 682 of /var/www/bitbybit/modules/field/field.info.inc). 
Warning: Invalid argument supplied for foreach() in node_widget_get_fields() (line 164 of /var/www/bitbybit/sites/all/modules/node_widget/includes/node_widget.form.inc). 
Notice: Undefined index: type in node_widget_get_fields() (line 163 of /var/www/bitbybit/sites/all/modules/node_widget/includes/node_widget.form.inc). 
Notice: Undefined index: fields in node_widget_get_fields() (line 164 of /var/www/bitbybit/sites/all/modules/node_widget/includes/node_widget.form.inc). 

Répondre

0

field_info_instances prend deux arguments (mais ils ne sont pas nécessaires), le premier est le type d'entité (plus que probable node dans votre cas), et le second est le faisceau.

Dans Drupal 7, tous les nœuds sont des entités et les types de contenu sont des bundles dans cette entité. Donc, pour obtenir tous les champs attachés à un node avec votre type de contenu spécifique, vous devez faire ceci:

$content_type = field_info_instances('node', $form['#type']['#value']);