2011-02-04 134 views

回答

-1

如果你想要做的是從視圖中隱藏字段,然後簡單的CSS類設置它們到display:none;將做的伎倆。

如果您想要實際更改表單中顯示的字段(而不是簡單地隱藏它們),則可以使用form_alter鉤子覆蓋表單中的字段。

form_alter hook允許您覆蓋任何表單的內容。舉例來說,如果你想要一個字段添加到「USER_LOGIN」的形式,你可以寫這樣的功能:

function mymodule_form_user_login_alter(&$form, &$form_state, $form_id) { 
    $form['myfield'] = array(
      '#type' => 'textfield', 
      '#title' => t('My new field') 
); 
} 

然後會顯示用戶登錄表單時,它現在將有它的新領域。您可以在此$form數組中設置任意數量的字段。

同樣地,可以從形式通過取消它如下刪除字段:

unset($form['fieldname']); 

你將面臨的問題,但是,是在Drupal 6中,form_alter鉤僅適用於模塊,不是主題。所以你可能需要創建一個小模塊來做你需要的。我相信這個限制已經在Drupal 7中被刪除。

查看Drupal Hook_Form_Alter documentation瞭解更多詳情。

您可能還想看到this link這是Drupal bug票據,他們討論了在主題上添加功能以允許form_alter。你會注意到它被標記爲固定的,並且Drupal版本號爲7.

你對錶單的另外一個選擇是在你的主題中編寫你自己的模板。使用這種方法,您可以使用drupal_render單獨輸出表單中的每個字段/字段集。如果你想要額外的HTML代碼等,這也可以讓你做更復雜的主題。但是,這種方法充滿了危險,就像後面任何其他字段被添加到表單一樣,你的主題將無法應付它。通常不建議以這種方式手動呈現表單。

希望有所幫助。

+0

嗨Spudley,感謝您提供非常好的信息。我試圖使用預處理方法取消設置一些元素,但是它的位置模塊的情況下,這個技巧不能以某種方式工作。順便給你的努力和一般解決方案,我接受你的答案。 – 2011-02-07 05:07:00

0

到目前爲止,對於這個位置表單結構的直接回答與其他表單結構不同。基本上使用drupal_render函數,我在默認位置字段集之外填充了郵政編碼和國家/地區表單元素。所以模板顯示空的位置字段集。

我糾正它使用骯髒的技術 - CSS破解了暫時隱藏字段設置如下:

#user-register fieldset {display:none;} 
1

要改變對你有生成後添加的內容類型表單的位置字段集,像這樣

function hook_form_alter(&$form, &$form_state, $form_id) { 
    ... 
    $form['#after_build'][] = 'alter_location_elements'; 
} 

和回調函數會是這個樣子:

function alter_location_elements($form_element, &$form_state) { 
    $form_element['locations'][0]['street']['#type'] = 'hidden'; 
    $form_element['locations'][0]['city']['#type'] = 'hidden'; 
    $form_element['locations'][0]['postal_code']['#type'] = 'hidden'; 

    return $form_element; 
} 
0

對於D6,最好的方法(不要用['#type'] = 'hidden';或unset(),這些方法可能會產生bug):

$form_element['locations'][0]['street']['#access'] = false; 

在form_alter:

$form['field']['#access'] = false; 

使用CSS:

display:none; 

被JS:

$('#IDELEMENT').css('display') == "none"); or $('#IDELEMENT').hide; 

這是沒有必要一個id元素。