2012-09-19 279 views
0

我創建了一個雙語言網站,其表單在提交時保存了一個cookie,然後每個頁面都會檢查cookie以查看要加載的語言。提交按鈕需要按兩次才能加載頁面

我遇到的問題是需要按兩次提交按鈕才能加載頁面並切換語言。

這是我有以下形式:

<form action="<?php the_permalink(); ?>" name="region" method="post"> 
    <input type="submit" name="region" value="English" id="en-button" /> 
    <input type="submit" name="region" value="Cymraeg" id="cy-button" /> 
</form> 

這是我functions.php文件保存的Cookie:

function set_region_cookie() 
{ 
    if(isset($_POST['region'])) 
    { 
     // Set Cookie 
     setcookie('region', $_POST['region'], time()+1209600); 
     // Reload the current page so that the cookie is sent with the request 
     header('Region: '.$_SERVER['REQUEST_URI']); 
    } 
} 
add_action('init', 'set_region_cookie'); 

這是我身邊每一個內容區域加載不同的內容:

<?php $language = $_COOKIE["region"]; 
if ($language == "English") { ?> 
    <?php echo the_field('english_content'); ?> 
<?php } else { ?> 
    <?php echo the_field('welsh_content'); ?> 
<?php } ?> 

語言切換正確,但只有當您點擊提交按鈕twi CE。

+1

所以你說,第一次點擊'submit'按鈕之一,表單是**沒有**提交?如果是這樣,您使用的是哪種瀏覽器,是否會在所有瀏覽器中發生? – billyonecan

+0

@deifwud當我點擊提交按鈕頁面重新加載,然後當我再次點擊頁面重新加載,但這次語言實際上改變。所以要改變語言,我需要點擊兩次。我使用的是Chrome,但它發生在Safari和Firefox中。 – Rob

+1

好的 - 所以表單實際上是提交 - 你是否在**分配'$ language = $ _COOKIE ['region']'之前調用'set_region_cookie' **? – billyonecan

回答

3

原來,問題就出現了由於該餅乾的工作方式的結果,發現了以下(重要)信息in this question

一個cookie的工作方式如下:

  1. 您提出請求
  2. 服務器SENDS Cookie返回客戶端
  3. 頁面加載 - Cookie對此頁面上的PHP不可見加載
  4. 刷新
  5. 客戶端發送的cookie頭到服務器
  6. 服務器接收cookie頭從而PHP可以讀取它
  7. 的網頁加載 - 曲奇這裏是可見的。

我從來沒有在第一次真正注意到了,但實際上存在的代碼來處理,以使服務器接收到的cookie刷新頁面問題的路線: -

// Reload the current page so that the cookie is sent with the request 
header('Region: '.$_SERVER['REQUEST_URI']); 

變化是到:

// Reload the current page so that the cookie is sent with the request 
header('Location: '.$_SERVER['REQUEST_URI']); 
+0

我會盡快給予獎勵! – Rob

0

請嘗試使用選擇字段。由於有兩個提交按鈕,瀏覽器可能會嚇壞了。那麼你可以做一些像document.getElementById('theSelectMenu').onchange = function(){ document.getElementById('theForm').submit(); }或更好的但它使用jQuery。

+0

我真的沒有選擇把它放在下拉菜單中,因爲這是它的設計。 – Rob

相關問題