テンプレートphpの設定フォームのこの特定の部分の設定を解除したい。 Drupal 6のコード例をいくつか見つけましたが、Drupal 7.でそれを行う方法を理解できません。
結果なしでこれを試しました:
if ($form_id == 'user_profile_form') {
unset($form['language']);
}
(「ユーザー調整」モジュールがありますが、前処理でそれを実行したいです)
上記のプロジェクトの両方を作成し、しばらくの間それらを維持しています。 (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()
を呼び出すたびに呼び出されるため、この目的には役立ちません。
" Disable user language "モジュールを確認しました。
コードのこの部分は本当に私にとって十分です:
function template_form_user_profile_form_alter(&$form, $form_state) {
unset($form['locale']);
}
PHPを実行できない、または実行できない理由がある場合、Drupal 7で言語設定ブロックを非表示にする簡単な方法は、次のCSSをユーザー編集ページに追加することです。 :
#user-profile-form fieldset#edit-locale
{
display: none;
}
CSSをページに追加するいくつかの方法を試しましたが、私の推奨する方法はCSSインジェクターモジュール( https://www.drupal.org/project/css_injector )です。使いやすく、効果的で、注入したCSSをすべて維持するのに便利な場所だと思います。
追伸これは古い投稿だと思いますが、答えを探して読んだので、他の人もそうだと思います。
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; } }