我已启用位置用户模块,在用户注册期间,我正在收集2个位置字段国家/地区和邮政编码。由于我主要是用户注册表单,我想删除国家和邮政编码元素周围的位置字段集。
你能指导我吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
到目前为止,没有直接的答案,因为位置表单结构与其他表单数组不同。基本上使用drupal_render
函数,我在默认的Location字段集之外填充了邮政编码和国家/地区表单元素。所以模板显示空位置字段集。
我使用脏技术纠正了它 - CSS hack有时间隐藏字段设置如下:
#user-register fieldset {display:none;}
答案 2 :(得分:0)
对于D6,最好的方法(不要使用['#type'] = 'hidden'
;或unset()
,这些方法会产生错误):
$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元素。
答案 3 :(得分:-1)
如果您只想隐藏视图中的字段,那么将它们设置为display:none;
的简单CSS类就可以了。
如果您想要实际更改表单中显示的字段(而不是简单地隐藏它们),您可以使用form_alter
挂钩覆盖表单中的字段。
form_alter
挂钩允许您覆盖任何表单的内容。例如,如果要在'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错误故障单,他们讨论了在主题上添加允许form_alter
的功能。您会注意到它被标记为已修复,Drupal版本号为7。
您对表单的另一个选择是在主题中为其编写自己的模板。使用此方法,您可以使用drupal_render
分别输出表单中的每个字段/字段集。如果你想要额外的HTML代码等,这也允许你做更复杂的主题。但是,这种方法充满了危险,就好像以后任何其他字段被添加到表单一样,你的主题将无法应对它。通常不建议以这种方式手动渲染表单。
希望有所帮助。