2009-10-03 79 views
6

當用戶在我的網站上註冊時,我似乎無法從drupal_set_message獲取消息。 我正在使用Drupal 6.14。Drupal:drupal_set_message不顯示消息

添加在user.module打印:

它打印 'XXXXX';

A var_dump$_SESSION變量給出狀態消息,drupal_set_message不顯示,所以看起來也很好。

我已經卸載了我的所有模塊,只剩下核心,並且現在使用Garland作爲主題。

此外,我安裝了新的Drupal安裝,並且它給了我一個很好的狀態消息。

然後我比較了我的.htaccess和Drupal的新安裝。改造礦讓他們平等。

沒有幫助。

有什麼想法?

+0

你仍然可以在不同的頁面/環境等狀態信息? –

+0

請在<?php print $ messages中設置page.tpl.php文件; ?>。試試吧 –

回答

10

很好地找到原因 - 幾周前我有這個完全相同的問題。現在

,對於原因:

Drupal的會話通過ID號相連(你可以在數據庫會話表中看到這一點,如果你看一下)給用戶。 Drupal還具有自己的會話處理功能,其中之一是檢查當前會話是否與有效的用戶帳戶關聯(對於匿名用戶,即用戶0) - (多個會話無關緊要每個用戶都是開放的 - 當這麼多的匿名用戶訪問您的網站時肯定會發生這種情況)。

如果Drupal沒有找到當前會話的有效用戶,那麼會話重新重新生成 - 這意味着以前的信息丟失。

編輯:

最近的註釋,促使我多一點深度添加到答案,因爲我已經因爲發現該錯誤的最可能的原因。

基本上,匿名用戶使用ID 0。如果將一個0值插入到MySQL中的自動遞增字段中,則該值實際上將成爲序列中的下一個可用值(因此,自動遞增字段設置爲10的表將在11處插入而不是0)。

我們遇到了問題,因爲我們在開發過程中使用MySQL轉儲來導出和導入備份。

+0

Thx!標記你的答案爲接受:) – eddy147

+0

這也讓我花了很多時間。感謝您將它放在這裏。 –

11

我們剛解決了它。顯然,用戶0不見了,有人刪除了它或者某個模塊做了它。 將其插入數據庫後,我們再次收到了消息。

這是你必須做的:

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

而在此之後將UID設置爲0,因爲UID是自動增量!

儘管如此,不知道如何與drupal_set_message相提並論。

+0

謝謝,謝謝,謝謝 - 我一直在努力尋找解決方案。我永遠不會拿起它。很久以前忘記了我由於一些奇怪的原因從用戶中刪除了記錄0。祝福你。 – Lukasz

4

另一個問題可能是您的主題不能在模板中打印$消息。

+0

不,如原文所述,我們首先切換到花環來排除。之後,我們在模塊之後移除模塊。我們通過添加缺少的用戶0來解決這個問題。 – eddy147

+0

如果您更改主題或者通過意外刪除它,它仍然是可能的。因爲評論最多的問題,它還將其作爲對第二個人或任何其他人未來可能發佈的響應發佈,因爲最多的評論問題是$ message從模板中刪除。另一件事是,當你刪除匿名用戶(uid 0)時,只會影響顯示給未登錄的用戶的消息,因爲這些消息被保存在會話中。所以它仍然適用於已登錄的用戶。 – googletorp

+0

$ message「s」,我想。 – sepehr

2

做theme_get_messages()時,我無法得到的消息,甚至出現或echo $消息等

所以我不得不從$ _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中。

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