2011-04-18 34 views
3

因此,我有我的hook_field_schema定義列,並且hook_field_widget_form被設置並正確保存所有列值。Drupal:如何在hook_field_widget_form中使用字段集

但是,只要將兩個字段放入字段集中,這些值就不會保存或更新。我已經試過在所有地方設置#tree => FALSE,這也不起作用。

我錯過了什麼?它只是不受支持?我應該使用form_alter鉤子還是將它們移動到fieldset中?

回答

3

我有同樣的問題,找不到解決方案。嘗試了很多東西之後,結果變得非常不合邏輯。那麼,在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)可以在此處定義。

希望這可以幫助你!

+0

我投票這個答案,因爲它一定會幫助他人搜索字段集信息,但是這不是我問題。我在一個字段集內部有一些表單字段,並且有一些表單字段在裏面,而裏面的那些字段沒有保存。 – Karl 2011-05-13 19:53:04

3

我知道這是一個老問題,但有一個解決這個問題,解釋in this artice#process部分是用來保存字段正確。

編輯:正如@alexkb的評論解釋,文章的作者已更新他的custom field sample並已刪除#process破解。要獲得更好的解決方案,請使用GitHub代碼。

+1

您已經鏈接到關於#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

0

看看physical module。基本上做到:

$element['#type'] = 'fieldset' 

您可以定義與子領域:

$element['subfield'] = array (...); 
相關問題