2009-10-03 21 views
6

ユーザーが自分のサイトに登録するとdrupal_set_messageからメッセージが表示されないようです。 私はDrupal 6.14を使用しています。Drupal:drupal_set_messageはメッセージを表示しません

user.moduleの印刷の追加:

それは 'XXXXX' を印刷します。

$_SESSIONvar_dumpという変数は、drupal_set_messageが表示されない状態メッセージを表示します。

私はすべてのモジュールをアンインストールしました。コア残っていて、Garlandをテーマとして使用しています。

さらに、私は新しいDrupalインストールをインストールしました。そこでは素晴らしい状態メッセージが表示されます。

次に、新しいインストールから.htaccessとDrupalを比較しました。それらを等しくするために鉱山を修正しました。

何も役立ちません。

どのような考えですか?

+0

あなたはまだ別のページ/環境に他のステータスメッセージを取得するのですか? –

+0

<?php print $ messagesにpage.tpl.phpファイルを設定してください。 ?>。それを試してください –

答えて

10

原因を見つけてうまくやった - 私はまったく同じ問題を数週間前にしていました。

さて、理由:

DrupalのセッションはID番号によってリンクされているユーザーに(あなたが見れば、あなたは、データベース内のセッションテーブルでこれを見ることができます)。また、Drupalには独自のセッション処理機能があり、その1つは現在のセッションが有効なユーザーアカウントに関連付けられているかどうかを確認するチェックです。匿名ユーザーの場合はユーザー0です(複数のセッション多くの匿名ユーザーがあなたのサイトにアクセスするとどうなるでしょうか?)

Drupalが現在のセッションで有効なユーザーを見つけられない場合、セッションは新たに再生成されます。つまり、以前の情報が失われたことを意味します。

編集:

最近のコメントは、私は以来、エラーの最も可能性の高い原因を発見したとの回答にもう少し深みを追加するために私を求めています。

基本的には、匿名ユーザーにはID 0を使用しています。MySQLの自動増分フィールドに0の値を挿入すると、その値は実際に次の使用可能な値になります(したがって、自動増分フィールドが10に設定されたテーブルはINSERTが11でINSERTが0ではありません)。

私たちは開発中にバックアップのエクスポートとインポートにMySQLダンプを使用していたので、この問題が発生しました。

+0

Thx!あなたの答えは受け入れられたとマークしました:) – eddy147

+0

このhastは私にも多くの時間を要しました。ここに入れてくれてありがとう。 –

11

ただ解決しました。どうやら、ユーザー0は見つからなかった、誰かがそれを削除したり、いくつかのモジュールがそれをやった。 データベースに挿入した後、私たちは再びメッセージを受け取りました。

これは、あなたがしなければならないものです:uidは自動インクリメントであるため、

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); 

その後は、0にUIDを設定!

drupal_set_messageでどのようにそのメスカスが起きているのかはまだ分かりません。

+0

ありがとう、ありがとう、ありがとう - 私は解決を見つけるために一日中苦労してきました。私は決してそれを拾いませんでした。ちょうど忘れてしまった前に、私はいくつかの奇妙な理由でユーザーからレコード0を削除しました。お大事に。 – Lukasz

4

もう1つの問題は、あなたのテーマがテンプレートに$メッセージを表示しないことです。

+0

いいえ、元の投稿に記載されているように、私たちはまずそれを排除するためにガーランドに切り替えました。その後、モジュールの後にモジュールを削除しました。不足しているユーザー0を追加して解決しました。 – eddy147

+0

テーマを変更した場合や、それを削除した場合でも、まだ可能性があります。また、2番目の人に返信してくれる人や、誰かが将来来る人もいるでしょう。コメントの問題が多いので、$メッセージはテンプレートから削除されます。別のことは、匿名ユーザー(uid 0)を削除すると、セッションにメッセージが保存されるため、ログインしていないユーザーに表示されるメッセージにのみ影響します。だから、まだログインしているユーザーのために働くでしょう。 – googletorp

+0

$ message "s"と思います。 – sepehr

2

私はtheme_get_messages()を実行する際にも表示するメッセージを取得したり、$ _SESSION [「メッセージ」]からそれを得るために$

は、だから私が持っていたなどのメッセージをエコーし​​ませんでした。

すなわち:誰かを助け

<?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']); 
      } 

     ?> 

希望。

+0

おかげでそれは働いた!あなたはその実際の理由を見つけましたか? –

1

これは長い間見つかっていますが、これはあなたがインストールした他のモジュールの原因です。 linuxを使用している場合、このコードをコンソールのphpmyadmin oに適用できます。

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); 
0

drupal_set_message($msg, $type = 'status');あなたがメッセージを設定することができます、それはユーザーの訪問次の(または現在)のページに自動的に表示されます。

は、ドキュメントを参照してください:http://api.drupal.org/api/function/drupal_set_message/6

関連する問題