因此,我有我的hook_field_schema定義列,並且hook_field_widget_form被設置並正確保存所有列值。Drupal:如何在hook_field_widget_form中使用字段集
但是,只要將兩個字段放入字段集中,這些值就不會保存或更新。我已經試過在所有地方設置#tree => FALSE,這也不起作用。
我錯過了什麼?它只是不受支持?我應該使用form_alter鉤子還是將它們移動到fieldset中?
因此,我有我的hook_field_schema定義列,並且hook_field_widget_form被設置並正確保存所有列值。Drupal:如何在hook_field_widget_form中使用字段集
但是,只要將兩個字段放入字段集中,這些值就不會保存或更新。我已經試過在所有地方設置#tree => FALSE,這也不起作用。
我錯過了什麼?它只是不受支持?我應該使用form_alter鉤子還是將它們移動到fieldset中?
我有同樣的問題,找不到解決方案。嘗試了很多東西之後,結果變得非常不合邏輯。那麼,在Drupal新手的眼中。
起初,我有這樣的事情(精簡版):
$element['mymodulefieldset'] = array(
'#title' => 'Fieldset title',
'#type' => 'fieldset',
);
,並添加字段的字段集:
$element['mymodulefieldset']['fieldname'] = array(
'#title' => "Field title",
'#type' => 'textfield',
'#default_value' => '',
);
嘗試很多不同的場景後,我發現了下一行的代碼確實(有點)工作。代替插入字段集,我把元件插入到這樣一個字段:
$element += array(
'#type' => 'fieldset',
'#tree' => true
);
然後我添加的字段的元素:
$element['fieldname'] = array(
'#title' => "Field title",
'#type' => 'textfield',
'#default_value' => '',
);
NB:像#title一些變量和#weight被控制通過「首頁»管理»結構»內容類型»[您的內容類型]」,其他人(如#collapsible和#collapsed)可以在此處定義。
希望這可以幫助你!
我知道這是一個老問題,但有一個解決這個問題,解釋in this artice,#process
部分是用來保存字段正確。
編輯:正如@alexkb的評論解釋,文章的作者已更新他的custom field sample並已刪除#process破解。要獲得更好的解決方案,請使用GitHub代碼。
您已經鏈接到關於#process的討論的文章,但您會注意到作者已將其[在github上的示例代碼](https://github.com/tarmstrong/poutine_maker/blob/master/poutine_maker.module)更新爲使用hook_field_presave() - 這是一個比#process hack更好的方法。儘管如此,我仍在投票答覆,因爲它使我找到了一個我認爲我無法解決的解決方案,謝謝! – alexkb 2015-02-06 03:33:40
看看physical module。基本上做到:
$element['#type'] = 'fieldset'
您可以定義與子領域:
$element['subfield'] = array (...);
我投票這個答案,因爲它一定會幫助他人搜索字段集信息,但是這不是我問題。我在一個字段集內部有一些表單字段,並且有一些表單字段在裏面,而裏面的那些字段沒有保存。 – Karl 2011-05-13 19:53:04