Magento从HTML块重定向

Magento从HTML块重定向,html,magento,redirect,block,Html,Magento,Redirect,Block,我想在我的自定义html块中重定向到特定的URL 我正在尝试的是: class Mage_Page_Block_Html_World extends Mage_Core_Block_Template { function __construct() { $i = 0; parent::__construct(); $this->setTemplate('page/html/world.phtml'); $this->setCookie(); } pu

我想在我的自定义html块中重定向到特定的URL

我正在尝试的是:

class Mage_Page_Block_Html_World extends Mage_Core_Block_Template {
function __construct()
{
    $i = 0;
    parent::__construct();
    $this->setTemplate('page/html/world.phtml');
    $this->setCookie();
}

public function setCookie()
{
    $lang = $this->getLanguageCode();
    if(isset($_GET['country'])) {
        $country = $_GET['country']; 
        Mage::getModel('core/cookie')->set('country', $country);
    } else {
        $country = Mage::getModel('core/cookie')->get('country');
    }
    /*Redirect to cookie url*/
    if($country) {
        try {
            $url = "http://myurl.dev/".$country."/";
            Mage::app()->getFrontController()->getResponse()->setRedirect($url);
        } catch (Exception $e) {
            echo 'Exception: ',  $e->getMessage(), "\n";
        }
    }
}
因为我在.htaccess中使用多存储配置,所以我使用:

setenif Host www.myurl.dev MAGE_RUN_CODE=base
setenif Host www.myurl.dev MAGE_RUN_TYPE=网站
SetEnvIf主机^myurl.dev MAGE\u RUN\u CODE=base
SetEnvIf主机^myurl.dev MAGE\u RUN\u TYPE=网站

SetEnvIf主机www.myurl1.dev MAGE_RUN_CODE=vs
SetEnvIf Host www.myurl1.dev MAGE_RUN_TYPE=网站
SetEnvIf主机^myurl1.dev MAGE\u RUN\u CODE=vs
SetEnvIf主机^myurl1.dev MAGE\u RUN\u TYPE=网站

问题是: 通过这个重定向,我得到了错误310:重定向太多。
我不知道如何解决这个问题。

太多重定向意味着无限循环。听起来好像你在每个页面上都加载了这个块——这意味着即使用户被重定向,这个块也会再次加载,并且仍然会尝试重定向它们

我建议您更改国家/地区的支票:

if($country) {

一旦用户被重定向,该检查就需要失败,以避免发送另一个重定向,目前看来,即使在重定向之后,它也会返回true。

鉴于框架架构,这是一种不合适的方法。作为开发人员,有几种机制可供您解析代码并触发重定向。当前的方法是使用视图层触发重定向,而请求控制器层和事件观察者系统则更合适


controller\u action\u predispatch
事件在所有请求作用域上都可用,并且每个路由都有目标的predispatch事件。你可以使用这些和
Mage\u Core\u Controller\u Request\u Http
对象(“Request对象”)来触发重定向。

试着解释一下你为什么这样做,然后其他人可以建议如何做,也许可以理解你为什么失败。逻辑应该在控制器中,而不是在块中。为什么我要这样做:我有一个登陆页面,在这里,用户可以选择自己的语言。语言代码存储在cookie中,如果用户再次输入基本url,则会重定向到正确的存储。html块通过getChildHtml('world')加载到我的自定义模板文件中。我用phtml文件中的一点javascript解决了这个问题,但如果s.o.知道在这个html块中实现这一点的解决方案,我将对此表示感谢。谢谢Andrew。我现在检查(currentUrl==baseURL){},现在它可以工作了。