Drupal 6:如何隐藏字段集在表单中的显示?

时间:2011-02-04 11:49:31

标签: php drupal-6 location drupal-modules

我已启用位置用户模块,在用户注册期间,我正在收集2个位置字段国家/地区和邮政编码。由于我主要是用户注册表单,我想删除国家和邮政编码元素周围的位置字段集。

你能指导我吗?

4 个答案:

答案 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代码等,这也允许你做更复杂的主题。但是,这种方法充满了危险,就好像以后任何其他字段被添加到表单一样,你的主题将无法应对它。通常不建议以这种方式手动渲染表单。

希望有所帮助。