2009-10-03 19 views
6

Parece que no puedo recibir un mensaje de drupal_set_message cuando un usuario se registra en mi sitio. Estoy usando Drupal 6.14.Drupal: drupal_set_message no muestra un mensaje

Adición de una impresión en la user.module:

Imprime 'xxxxx';

A var_dump de la variable $_SESSION muestra el mensaje de estado, que drupal_set_message no muestra, por lo que se ve bien también.

He desinstalado todos mis módulos, solo restos del núcleo, y el uso de Garland ahora como un tema.

Además, he instalado una nueva instalación de Drupal, y allí me da un bonito mensaje de estado.

Luego comparé mi .htaccess y Drupal's, de la nueva instalación. Mina modificada para hacerlos iguales.

Nada ayuda.

¿Alguna idea?

+0

¿Todavía recibe otros mensajes de estado en diferentes páginas/circunstancias? –

+0

Configure un archivo page.tpl.php en . Pruébalo –

Respuesta

10

muy bien hecho encontrar la causa - Hace un par de semanas tuve el mismo problema.

Ahora, por la razón:

sesiones de Drupal están unidas por el número de identificación (se puede ver esto en la tabla de sesiones en la base de datos si se mira) al usuario. Drupal también tiene sus propias funciones de manejo de sesión, y una de ellas es verificar si la sesión actual está asociada con una cuenta de usuario válida, y para usuarios anónimos, es decir, el usuario 0 (no importa si hay varias sesiones). están abiertas por usuario, lo cual es ciertamente lo que sucede cuando tantos usuarios anónimos visitan su sitio).

Si Drupal no encuentra un usuario válido para la sesión actual, entonces la sesión se regenera de nuevo, es decir, se pierde la información anterior.

Editar:

Un comentario reciente me ha llevado a añadir un poco más de profundidad a la respuesta que he encontrado desde entonces la causa más probable para el error.

Básicamente, es el uso de la ID 0 para el usuario anónimo.Si INSERTAS un valor de 0 en un campo de incremento automático en MySQL, el valor se convertirá en el siguiente valor disponible en la secuencia (entonces, una tabla con campo de incremento automático establecido en 10 se INSERTARÁ en 11 y no en 0).

Nos topamos con el problema porque estábamos usando volcados de MySQL para exportar e importar copias de seguridad durante el desarrollo.

+0

¡Thx! marcó su respuesta como aceptada :) – eddy147

+0

Esto también me ha costado muchas horas. Gracias por ponerlo aquí. –

11

Lo hemos resuelto. Aparentemente, el usuario 0 faltaba, alguien lo eliminó o algún módulo lo hizo. Después de insertarlo en la base de datos recibimos nuestros mensajes nuevamente.

Esto es lo que tiene que hacer:

INSERT INTO `users` (`uid`, `name`, `pass`, `mail`, `mode`, `sort`, `threshold`, `theme`, `signature`, `signature_format`, `created`, `access`, `login`, `status`, `timezone`, `language`, `picture`, `init`, `data`) VALUES 
(0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL); 

Y después de eso establecer el UID a 0, porque UID es un incremento automático !!

Sin embargo, todavía no hay idea de cómo se confunde con drupal_set_message.

+0

Gracias, gracias, gracias. He estado luchando todo el día para encontrar una solución. Nunca lo recogí. Recién olvidado hace mucho tiempo borré el registro 0 de los usuarios por alguna extraña razón. Salud. – Lukasz

4

Otro problema podría ser que su tema no imprime $ mensaje en las plantillas.

+0

No, como se menciona en la publicación original, primero cambiamos a garland para descartarlo. Después de eso eliminamos el módulo después del módulo. Lo solucionamos agregando el usuario que falta 0. – eddy147

+0

Todavía es una posibilidad, ya sea que hayas cambiado el tema o lo hayas borrado por accidente. También lo publiqué más como una respuesta al segundo tipo o a cualquier otra persona que venga en el futuro, ya que el problema que más se comenta es que $ mensaje se elimina de la plantilla. Otra cosa es que cuando elimina el usuario anónimo (uid 0), solo los mensajes de efecto se muestran a los usuarios que no han iniciado sesión, ya que los mensajes se guardan en la sesión. Por lo tanto, aún funcionaría para los usuarios que hayan iniciado sesión. – googletorp

+0

$ mensaje "s", creo. – sepehr

2

no pude conseguir mensajes a aparecer incluso cuando se hace theme_get_messages() o echo $ mensajes, etc.

así que tuve que conseguirlo de $ _SESSION [ 'mensajes'].

es decir:

<?php 
      // we aren't getting messages, get them manually 
      if (isset($_SESSION['messages'])) { 
       echo '<div class="messages">'; 
       foreach($_SESSION['messages'] as $type=>$messages) { 
        echo "<p class=\"$type\">".implode("</p><p class=\"$type\">", $messages)."</p>"; 
       } 
       echo '</div>'; 
       unset($_SESSION['messages']); 
      } 

     ?> 

la esperanza de que ayude a alguien.

+0

¡Gracias hermano, funcionó! pero ¿encontraste la razón real para eso? –

1

encuentro esto mismo durante mucho tiempo, esto es causa de que otros módulos que instale que afectan a este puede aplicar este código en phpmyadmin o en la consola si usa linux.

INSERT INTO `users` (`uid`, `name`, `pass`, `mail`, `theme`, `signature`, `signature_format`, `created`, `access`, `login`, `status`, `timezone`, `language`, `picture`, `init`, `data`) VALUES 
(0, '', '', '', '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL); 
Cuestiones relacionadas