it-swarm.com.de

Deaktivieren Sie die Einstellung der Benutzersprache auf der Seite zum Bearbeiten des Benutzers

Ich möchte diesen bestimmten Teil des Einstellungsformulars in der Vorlage PHP deaktivieren. Ich habe ein Codebeispiel für Drupal 6) gefunden, kann aber nicht herausfinden, wie es in Drupal 7) gemacht wird.

Ich habe es ohne Ergebnis versucht:

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

(Es gibt ein Modul "User Tweaks", aber ich möchte, dass es dies im Vorprozess tut.)

5
cateye

Ich habe beide genannten Projekte erstellt und sie eine Weile gepflegt. (Ich habe aufgehört, Drupal 6 und 7 Module zu warten.)

Der im Modul "Benutzersprache deaktivieren" verwendete Code ist nicht korrekt: unset() sollte niemals für Formularelemente verwendet werden, da dies zu Problemen bei Modulen führen würde, die versuchen, auf das Formularelement zuzugreifen.

Der richtige Code ist der folgende. Es wäre vorzuziehen, wenn der Code ausgeführt würde, nachdem andere Module ihren eigenen Code ausgeführt haben.

/**
 * 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;
      }
    }
  }
}

In meinem Modul habe ich auch hook_init() verwendet, um $user->language In einen Standardwert zu ändern. anders $user->language würde der letzte Wert gespeichert.

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

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

Das Modul "Benutzersprache deaktivieren" verfügt natürlich über eine eigene Berechtigung, mit der ausgewählt werden kann, welche Benutzer die Berechtigung zum Auswählen ihrer eigenen Sprache haben. Dieser Teil ist jedoch nicht unbedingt erforderlich.

Ich habe hook_init() verwendet, da die Dokumentation für hook_user_load() die folgende Warnung enthält:

Aufgrund des statischen Caches in user_load_multiple() sollten Sie diesen Hook nicht verwenden, um die von der Tabelle {users} selbst zurückgegebenen Benutzereigenschaften zu ändern, da dies beim Laden aus dem Cache zu unzuverlässigen Ergebnissen führen kann .

Der Code ändert auch im laufenden Betrieb eine Eigenschaft für den aktuell angemeldeten Benutzer, ohne Änderungen in der Datenbank vorzunehmen. hook_user_load() würde diesem Zweck nicht dienen, da es jedes Mal aufgerufen wird, wenn ein Modul user_load() aufruft.

14
kiamlaluno

Ich habe mir das Modul " Benutzersprache deaktivieren " angesehen.

Dieser Teil des Codes ist in der Tat genug für mich:

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

Für diejenigen, die aus irgendeinem Grund kein PHP ausführen oder nicht können, besteht eine einfache Möglichkeit, den Spracheinstellungsblock in Drupal 7) auszublenden, darin, der vom Benutzer bearbeiteten Seite das folgende CSS hinzuzufügen ::

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

Nachdem ich verschiedene Methoden zum Hinzufügen von CSS zu Seiten ausprobiert habe, ist meine bevorzugte Methode das CSS Injector-Modul ( https://www.drupal.org/project/css_injector ). Ich finde es einfach zu bedienen, effektiv und ein bequemer Ort, um all mein injiziertes CSS zu pflegen.

P.S. Mir ist klar, dass dies ein alter Beitrag ist, aber ich habe ihn gelesen und nach einer Antwort gesucht, also denke ich, dass andere es auch tun werden.

1

In drupal 8) können wir mit dem folgenden Code deaktivieren

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