2013-06-12 84 views
6

我目前正在建立一個支持幾種不同語言的Magento商店。針對不同語言CMS頁面的不同URL鍵

我碰到的一個問題是我無法找到如何將兩個CMS頁面鏈接在一起,以便當用戶切換他們的語言時,它們會自動轉發到當前CMS頁面,但是以其首選語言。一種選擇是爲這兩個頁面使用相同的URL密鑰,但這不會很方便用戶,因爲有些用戶會看到URL密鑰不是以其母語。

讓我舉一個例子:

我有一個「關於我們」頁面。在商店的英文版本中,該頁面的URL是/about-us。現在德國用戶登錄該頁面並切換其語言。但是因爲德語相當於「關於我們」是「關於我們」,所以該頁面的德語版本爲,因此用戶將被呈現404頁面,因爲沒有德語版本/about-us存在。

有誰知道如何解決這個問題?

更新:做了一些更多的研究,沒有發現任何東西。我不能相信我是唯一有這個問題的人嗎?爲所有語言使用相同的URL密鑰的解決方案看起來非常難看,並且不太友好!

回答

8

因此,我發現的唯一解決方案是在Magento Rewrite Rules中爲每個頁面手動創建重定向。不要做,去Catalog -> URL Rewrite Management並以下列格式添加的每個頁面:

enter image description here

因此,如果用戶正在使用法語商店視圖,並請/url-in-english,重定向會踢,將用戶重定向到/url-in-french

這當然不是一個理想的解決方案,如果兩個頁面可以直接「鏈接」,這將是首選,但我想我暫時不得不使用它。如果有人想出更好的解決方案,隨時添加你的!

1

以上解決方案的工作,但需要一段時間。我們只是做了以下改寫語言轉換器的網址一個CMS頁面上時,去基地網址:

下面的代碼添加到app/design/frontend/default/template_name/template/page/switch/languages.html在$ url變量被填充後的部分(在我們這就像

$url = /*explode('?',*/$_lang->getCurrentUrl()/*);*/; 

,所以我們增加了以下內容:

if(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.com/')){$url = strstr($url, '.com/', true) . '.com/';} 
elseif(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.de/')){$url = strstr($url, '.de/', true) . '.de/';} 
elseif(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.nl/')){$url = strstr($url, '.nl/', true) . '.nl/';} 

我在這裏所做的檢查,如果一個CMS頁面上,並檢查URL包含的.com /;由Matchi.com提供回到/或.NL和剝離部分之前再添加域名後綴。

在我們的例子:http://www.mega-watch.com/about-us?blabla將成爲http://www.mega-watch.com/

希望這可以幫助別人了..

+0

真棒,感謝分享。看起來比我的解決方案更優雅... –

2

我已經看到了在Magento CE 1.8.0.0這個bug。這裏的問題是\ app \ code \ core \ Mage \ Core \ Model \ Url \ Rewrite \ Request.php中的錯誤賦值。

爲了解決這個問題,就足以在Mage_Core_Model_Url_Rewrite_Request類中受保護的功能_rewriteDb()從

$fromStore = $this->_request->getQuery('___from_store'); 

,結果變成

$fromStore = Mage::getModel('core/store')->load($this->_request->getQuery('___from_store'), 'code')->getId(); 

$ fromStore的分配,我們可以使用正確的密鑰訪問$ stores數組(使用商店ID而不是商店代碼)。有了這個if語句

if (!empty($stores[$fromStore])) { 

以正確的方式工作。

提醒一下:不要修改核心文件。只需在任何更改之前將\ app \ code \ core \ Mage \ Core \ Model \ Url \ Rewrite \ Request.php複製到\ app \ code \ local \ Mage \ Core \ Model \ Url \ Rewrite \ Request.php即可。 這個答案用德語在這裏:Rewrite von Seiten in verschiedenen Sprachen und verschiedenen URL Keys in Magento