不同语言CMS页面的不同URL键

时间:2013-06-12 18:47:40

标签: magento url-rewriting magento-1.7

我目前正在建立一个支持几种不同语言的Magento商店。

我遇到的一个问题是我无法找到如何将两个CMS页面链接在一起,以便当用户切换他们的语言时,它们会自动转发到当前的CMS页面,但是使用他们的首选语言。一种选择是对两个页面使用相同的URL密钥,但这不会非常用户友好,因为一些用户会看到不是用他们的母语的URL密钥。

让我举个例子:

我有一个“关于我们”页面。在商店的英文版中,该页面的网址为/about-us。现在,德国用户登陆该页面并切换他的语言。但由于德语相当于“关于我们”是“Überunsuns”,该页面的德语版本位于/ueber-uns,因此用户将显示404页面,因为不存在/about-us的德语版本

有人知道如何解决这个问题吗?

更新:做了更多的研究而没有发现任何内容。我不敢相信我是唯一有这个问题的人?使用所有语言的相同URL密钥的首选解决方案看起来非常难看,并且不是非常用户友好!

3 个答案:

答案 0 :(得分:9)

因此,我找到的唯一解决方案是在 Magento重写规则中为每个页面手动创建重定向。这样做,转到Catalog -> URL Rewrite Management并按以下格式添加每个页面:

enter image description here

因此,如果用户正在使用 Francais 商店视图并请求/url-in-english,则重定向将启动并将用户重定向到/url-in-french

这当然不是一个理想的解决方案,如果两个页面可以直接“链接”,那将是首选,但我想我现在必须使用它。如果有人提出更好的解决方案,请随意添加你的!

答案 1 :(得分:2)

我在Magento CE 1.8.0.0中看到过这个错误。这里的问题是\ app \ code \ core \ Mage \ Core \ Model \ Url \ Rewrite \ Request.php中的错误分配。

要解决此问题,只需在Mage_Core_Model_Url_Rewrite_Request类中的受保护函数_rewriteDb()中更改$ fromStore的赋值即可

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

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

结果是我们可以使用正确的密钥访问$ 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

答案 2 :(得分:1)

以上解决方案有效,但需要一段时间。我们只是在cms页面上重写语言转换器url以转到基本URL:

在填写$ url变量的部分之后,将以下代码添加到app/design/frontend/default/template_name/template/page/switch/languages.html(就像我们的那样

$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页面上并检查网址是否包含.com /; .de /或.nl并删除部分,然后再添加域扩展名。

在我们的示例中

http://www.mega-watch.com/about-us?blabla将变为http://www.mega-watch.com/

希望这有助于某人...