欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Drupal 6: How to hide field-set textfield from being displayed in the form?



I have enabled Location User module and during user registration I am collecting 2 location fields Country and Postal Code. As I am theming user registration form, I want to remove the Location field-set around Country and Postal Code elements.

Could you please guide me?

shareimprove this question
 

4 Answers 正确答案 

If all you want to do is hide the fields from view, then a simple CSS class setting them to display:none; will do the trick.

If you want to actually change the fields that are presented in the form (as opposed to simply hiding them), you can override the fields in a form using the form_alter hook.

The form_alter hook allows you to override the contents of any form. For instance, if you want to add a field to the 'user_login' form, you could write a function like this:

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

Then when the user login form is displayed, it will now have your new field in it. You can set as many fields as you like in this $form array.

Likewise, you can remove a field from the form by unsetting it as follows:

unset($form['fieldname']);

The problem you will face, however, is that in Drupal 6, the form_alter hook is only available for modules, not themes. So you may need to create a small module to do what you need. I believe this limitation has been removed in Drupal 7.

See the Drupal Hook_Form_Alter documentation for more detail.

You may also want to see this link which is the Drupal bug ticket where they discussed adding the feature to allow form_alter on themes. You'll note that it is marked as fixed with the Drupal version number of 7.

Another option you have for the form is to write your own template for it in your theme. Using this, you can use drupal_render to output each field/fieldset in the form individually. This also allows you to do more complex theming if you want additional HTML code, etc. However, this method is fraught with danger, as if any other fields are added to the form later on, your theme will not be able to cope with it. Its generally not advised to render your form manually in this way.

Hope that helps.

shareimprove this answer
 
   
Hi Spudley, Thanks for very good information. I tried to Unset the some of the elements using preprocess method, but it case of Location Module this trick is not working somehow. By the way for you efforts and general solution I am accepting your answer. – Asif Mulla Feb 7 '11 at 5:07

To alter the location fieldset on content type forms you have to add an after build, like so

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

and the callback function would look something like this:

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;
}
shareimprove this answer
 

So far no straight answer for this as Location form structure is different from other form array. Basically using drupal_render function, I have populated postal code and country form element outside of the default Location field-set. So template was displaying empty Location field-set.

I rectified it using dirty technique - CSS hack for time being hiding field-set as below:

#user-register fieldset {display:none;}
shareimprove this answer
 

For D6, the best way (don't use ['#type'] = 'hidden'; or unset(), these methods can produce bugs):

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

In form_alter:

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

By Css:

display:none;

By Js:

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

It isn't necessary a id element.

来自  http://stackoverflow.com/questions/4897639/drupal-6-how-to-hide-field-set-from-being-displayed-in-th...
普通分类: