[英]Drupal, hook_form_alter add field in node edit / create
我有一個節點,我需要以編程方式填充字段,所以這是我的工作:
$campaigns = $client->get_campaigns();
$tab_campaign = array(""=>"Dernière newsletter");
foreach ($campaigns->response as $camp){
$tab_campaign[$camp->CampaignID] = $camp->Name;
}
$form['field_last_newsletter'] = array(
'#type' => 'select',
'#required' => true,
'#options' => $tab_campaign,
'#title' => 'Choisir la dernière newsletter',
);
}
這項工作,我的選擇字段已填充,但是當我選擇一個並單擊“保存”時,不保存任何內容,如果返回編輯頁面,則選擇具有默認值,我在做什么錯了?
謝謝。
我認為您正在尋找選項字段的allowed_values_function
設置。 對於具有動態選項的字段,這是一個完美的解決方案。
首先,您需要更改當前字段設置以使用該功能設置允許的值。 為此,請修改功能中的字段設置(如果使用):
// Exported field_base: 'field_last_newsletter'
// my_module.features.field_base.inc
$field_bases['field_last_newsletter'] = array(
// ....
'settings' => array(
'allowed_values' => array(),
'allowed_values_function' => 'my_module_field_last_newsletter_allowed_values',
),
// ....
);
如果您不使用功能,則可以通過執行PHP代碼或使用hook_update_N
進行hook_update_N
/**
* Implements hook_update_N().
* Update the field_last_newsletter field settings to use callback for allowed_values.
*/
function my_module_update_N(&$sandbox) {
// get default status for field using machine name of field
$default_stats_field = field_info_field('field_last_newsletter');
// unset the allowed values
$default_stats_field['settings']['allowed_values'] = '';
// function name that provides array of values
$default_stats_field['settings']['allowed_values_function'] = 'my_module_field_last_newsletter_allowed_values';
// update value with new value.
field_update_field($default_stats_field);
}
保存新設置后,您需要為動態允許值實現回調函數。
/**
* Allowed values callback for field_last_newsletter.
*/
function my_module_field_last_newsletter_allowed_values() {
// ...
$campaigns = $client->get_campaigns();
$tab_campaign = array(""=>"Dernière newsletter");
foreach ($campaigns->response as $camp){
$tab_campaign[$camp->CampaignID] = $camp->Name;
}
return $tab_campaign;
}
這里的問題是,您正在代碼中定義一個字段,並且由於未通過UI創建該字段,因此未創建用於存儲其值的數據庫表。 我建議您通過UI(/ admin / structure / types / manage / xxxxx / fields)創建此字段,然后在hook_form_alter中,只需更改#options數組即可填充它。 這樣,將為您的數據創建一個數據庫表,Drupal將處理保存數據,填充保存的值等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.