web-dev-qa-db-ja.com

チェックボックスのデフォルトの「N / A」オプションを非表示にする方法は?

ユーザープロファイルページ(登録ページではなく)に表示する「性別」(チェックボックス)オプションがあります。オプションは「男性」(デフォルト)と「女性」です。このフィールドは必須ではないため、「N/A」オプションが表示されています。 Drupalこれを行う 設計による

このフィールドを必須にすると、「N/A」オプションはなくなりますが、不要な登録ページに自動的に表示されます。

CSSで非表示にしようとしていましたが、チェックボックスと「N/A」テキストを非表示にする方法がわかりません。

<div class="form-item form-type-radio form-item-field-gender-und">
<input id="edit-field-gender-und-none" class="form-radio" type="radio" value="_none" name="field_gender[und]">
<label class="option" for="edit-field-gender-und-none">N/A </label>
</div>
<div class="form-item form-type-radio form-item-field-gender-und">
<input id="edit-field-gender-und-0" class="form-radio" type="radio" checked="checked" value="0" name="field_gender[und]">
<label class="option" for="edit-field-gender-und-0">Male </label>
</div>
<div class="form-item form-type-radio form-item-field-gender-und">
<input id="edit-field-gender-und-1" class="form-radio" type="radio" value="1" name="field_gender[und]">
<label class="option" for="edit-field-gender-und-1">Female </label>
</div>

助けて! ;-)

4
uwe

JQueryを使用してこれを実現できます

$("#edit-field-gender-und-none").remove();
4
Hansyg

これを達成するためのより良い方法は、単純な form_alter フックと、フィールドに必要ないunset()オプションを書くことだと思います。

_function YOURMOD_form_YOURFORM_alter(&$form, &$form_state) {
  unset($form['YOURFIELD']['und']['#options']['_none']);
}
_

上記の例では、フィールドはエンティティ編集フォームの分類法参照フィールドであるため、余分な_['und']_があります。すべての状況下にある必要はありません。最初にdpm($form)を実行して、フォームの構造を確認することができます。

3
mojzis

別の簡単な解決策は、次の関数をtemplate.phpファイルに追加することにより、N = A form-itemにフォーム無効化クラスを追加することですDrupal.

function <theme_name>_form_element($variables) {
  $element = $variables['element'];
  // Disable radio button N/A
  if ($element['#type'] == 'radio' && $element['#return_value'] === '_none') {
    $variables['element']['#attributes']['disabled'] = TRUE;
  }
  return theme_form_element($variables);
}

次に、CSSを使用して行うことができます

.form-radios .form-disabled {
  display: none;
}
3
incaic

Drupal 7では、次のコードを試してください。

/**
 * Implements hook_element_info_alter().
 */
function MODULENAME_element_info_alter(&$type) {
  $type['radios']['#process'][] = '_remove_radio_na';
  $type['select']['#process'][] = '_remove_radio_na';
}

/**
 * Removes the '_none' option from a form element.
 */
function _remove_radio_na($element) {
  unset($element['#options']['_none']);
  unset($element['_none']);
  return $element;
}

キャッシュをクリアしてください。そうしないと機能しません。

空の値は出力の前に削除されるため、これはCSSまたはJS/jQueryで結果を非表示にするよりも優れた方法です。

1
kenorb

私はこれをします:

jQuery("#edit-field-gender-und-none")[0].children[0].remove();

0
Fedo Peralta