2012-06-27 54 views
0

我需要幫助編程設置一個節點引用字段。Drupal 7編程式字段定義

我的模塊成功創建並將一對'CCK'字段關聯到我的節點。其中一個字段是node_reference字段。我的代碼是如下:

$field_ref_name = 'field_custom_reference'; 
$field = field_info_field($field_ref_name); 

if (empty($field)) { 
    $field = array(
     "field_name"=>$field_ref_name, 
     "label"=>"Custom Reference", 
     "type"=>"node_reference", 
     "cardinality"=>"1", 
     'locked' => TRUE, 
    ); 
    field_create_field($field); 
} 

$instance = array(
    "field_name"=>$field_ref_name, 
    "label"=>"Sequence Reference", 
    "type"=>"node_reference", 
    "widget"=>array(
     "type"=>"node_reference_autocomplete" 
    ), 
    "description" => "text describing purpose of this field", 
); 

$instance["entity_type"] = "node"; 
$instance["bundle"] = $type; 

if(!in_array($type, $field['bundles']['node'])) 
    field_create_instance($instance); 

現在,代碼工作,但是當我編輯節點輸入一個有效的值到節點參考字段並試圖保存,我得到以下錯誤:

...: this post can't be referenced.

我意識到錯誤的原因是因爲節點參考字段設置沒有任何選定的節點爲「內容類型,可以引用」。

有誰知道我可以如何調整我的代碼來設置可引用的內容類型?

回答

1

引用類型是一個字段設置。所以它應該放在字段定義中的「settings」數組下。類似於 -

$field = array(
     "field_name"=>$field_ref_name, 
     "label"=>"Custom Reference", 
     "type"=>"node_reference", 
     "cardinality"=>"1", 
     'locked' => TRUE, 
     'settings' => array(
      'referenceable_types' => array('article'), 
     ), 
    ); 
相關問題