drupal 7 – Deshabilitar la configuración del idioma del usuario en la página de edición del usuario

Pregunta:

Quiero desarmar esta parte específica del formulario de configuración en la plantilla php. Encontré un ejemplo de código para Drupal 6, pero no puedo entender cómo hacerlo en Drupal 7.

Intenté esto sin resultado:

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

(Hay un módulo de "ajustes de usuario" pero quiero que lo haga en el preproceso)

Respuesta:

Creé los dos proyectos mencionados y los he mantenido durante un tiempo. (Dejé de mantener los módulos Drupal 6 y 7).

El código usado en el módulo Disable user language no es correcto: unset() nunca debe usarse para elementos de formulario, ya que esto causaría problemas a los módulos que intentan acceder al elemento de formulario.

El código correcto es el siguiente. Sería preferible que el código se ejecutara después de que otros módulos ejecuten su propio código.

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

En mi módulo también usé hook_init() para cambiar $user->language a un valor predeterminado; de otra manera $user->language tendría el último valor guardado.

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

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

Claramente, el módulo Deshabilitar el idioma del usuario tiene su propio permiso, lo que permite seleccionar qué usuarios tienen permiso para seleccionar su propio idioma, pero esa parte no es estrictamente necesaria.

hook_init() porque la documentación de hook_user_load() tiene la siguiente advertencia:

Debido al caché estático en user_load_multiple() no debe usar este gancho para modificar las propiedades del usuario devueltas por la tabla {users} ya que esto puede resultar en resultados poco confiables al cargar desde el caché.

El código también está cambiando sobre la marcha una propiedad para el usuario actualmente conectado, sin realizar ningún cambio en la base de datos. hook_user_load() no serviría para este propósito, ya que se invoca cada vez que un módulo llama a user_load() .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım