web-dev-qa-db-ja.com

ユーザー編集ページのユーザー言語設定を無効にする

テンプレートphpの設定フォームのこの特定の部分の設定を解除したい。 Drupal 6のコード例をいくつか見つけましたが、Drupal 7.でそれを行う方法を理解できません。

結果なしでこれを試しました:

if ($form_id == 'user_profile_form') {
  unset($form['language']);
}

(「ユーザー調整」モジュールがありますが、前処理でそれを実行したいです)

5
cateye

上記のプロジェクトの両方を作成し、しばらくの間それらを維持しています。 (Drupal 6および7モジュールの保守を中止しました。)

ユーザー言語の無効化モジュールで使用されているコードは正しくありません。フォーム要素にアクセスしようとするモジュールで問題が発生するため、unset()をフォーム要素に使用しないでください。

正しいコードは次のコードです。他のモジュールが独自のコードを実行した後にコードを実行することが望ましいです。

_/**
 * Implements hook_form_alter().
 */
function mytheme_form_alter(&$form, $form_state, $form_id) {
  // The language selector is only displayed if there is more than one language.
  if (drupal_multilingual()) {
    if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) {
      if (count(element_children($form['locale'])) > 1) {
        $form['locale']['language']['#access'] = FALSE;
      }
      else {
        $form['locale']['#access'] = FALSE;
      }
    }
  }
}
_

私のモジュールでは、hook_init()を使用して_$user->language_をデフォルト値に変更しました。別の方法として、_$user->language_は最後に保存された値を持っています。

_/**
 * Implements hook_init().
 */
function dul_init() {
  if (!user_access('change own user language')) {
    global $user;

    $user->language = language_default('language');
  }
}
_

明らかに、Disable user languageモジュールには独自の権限があり、どのユーザーが独自の言語を選択する権限を持つかを選択できますが、その部分は必ずしも必要ではありません。

hook_init() のドキュメントには次の警告があるため、hook_user_load()を使用しました。

user_load_multiple() の静的キャッシュのため、このフックを使用して{users}テーブル自体から返されるユーザープロパティを変更しないでください。これにより、キャッシュからロードするときに信頼できない結果になる可能性があります。 。

コードはまた、データベースに変更を加えることなく、現在ログインしているユーザーのプロパティをオンザフライで変更しますhook_user_load()は、モジュールがuser_load()を呼び出すたびに呼び出されるため、この目的には役立ちません。

14
kiamlaluno

" Disable user language "モジュールを確認しました。

コードのこの部分は本当に私にとって十分です:

function template_form_user_profile_form_alter(&$form, $form_state) {
   unset($form['locale']);
}
5
cateye

PHPを実行できない、または実行できない理由がある場合、Drupal 7で言語設定ブロックを非表示にする簡単な方法は、次のCSSをユーザー編集ページに追加することです。 :

#user-profile-form fieldset#edit-locale
{
    display: none;
}

CSSをページに追加するいくつかの方法を試しましたが、私の推奨する方法はCSSインジェクターモジュール( https://www.drupal.org/project/css_injector )です。使いやすく、効果的で、注入したCSSをすべて維持するのに便利な場所だと思います。

追伸これは古い投稿だと思いますが、答えを探して読んだので、他の人もそうだと思います。

1

drupal 8では、以下のコードを使用して無効にすることができます

function digicare_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id){ if($form_id = "user_register_form" || $form_id = "user_profile_form"){ $form['language']['#access'] = FALSE; } }

0
nehapandya