我已啓用位置用戶模塊,並且在用戶註冊期間,我正在收集2個位置字段國家和郵政編碼。由於我正在主持用戶註冊表單,因此我想刪除國家和郵政編碼元素周圍的位置字段。Drupal 6:如何隱藏字段集在窗體中顯示?
你能指導我嗎?
我已啓用位置用戶模塊,並且在用戶註冊期間,我正在收集2個位置字段國家和郵政編碼。由於我正在主持用戶註冊表單,因此我想刪除國家和郵政編碼元素周圍的位置字段。Drupal 6:如何隱藏字段集在窗體中顯示?
你能指導我嗎?
如果你想要做的是從視圖中隱藏字段,然後簡單的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代碼等,這也可以讓你做更復雜的主題。但是,這種方法充滿了危險,就像後面任何其他字段被添加到表單一樣,你的主題將無法應付它。通常不建議以這種方式手動呈現表單。
希望有所幫助。
到目前爲止,對於這個位置表單結構的直接回答與其他表單結構不同。基本上使用drupal_render
函數,我在默認位置字段集之外填充了郵政編碼和國家/地區表單元素。所以模板顯示空的位置字段集。
我糾正它使用骯髒的技術 - CSS破解了暫時隱藏字段設置如下:
#user-register fieldset {display:none;}
要改變對你有生成後添加的內容類型表單的位置字段集,像這樣
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;
}
對於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元素。
嗨Spudley,感謝您提供非常好的信息。我試圖使用預處理方法取消設置一些元素,但是它的位置模塊的情況下,這個技巧不能以某種方式工作。順便給你的努力和一般解決方案,我接受你的答案。 – 2011-02-07 05:07:00