【问题标题】:Magento redirect from HTML BlockMagento 从 HTML 块重定向
【发布时间】:2012-07-16 09:04:02
【问题描述】:

我想在我的自定义 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 中使用了多存储配置:

SetEnvIf 主机 www.myurl.dev MAGE_RUN_CODE=base
SetEnvIf 主机 www.myurl.dev MAGE_RUN_TYPE=website
SetEnvIf 主机 ^myurl.dev MAGE_RUN_CODE=base
SetEnvIf 主机 ^myurl.dev MAGE_RUN_TYPE=website

SetEnvIf 主机 www.myurl1.dev MAGE_RUN_CODE=vs
SetEnvIf 主机 www.myurl1.dev MAGE_RUN_TYPE=website
SetEnvIf 主机 ^myurl1.dev MAGE_RUN_CODE=vs
SetEnvIf 主机 ^myurl1.dev MAGE_RUN_TYPE=website

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

【问题讨论】:

  • 尝试解释你为什么这样做,然后其他人可以建议如何做到这一点,也许可以理解你失败的原因
  • 这个逻辑应该在控制器中,而不是在块中。
  • 为什么这样做:我有一个登录页面,用户可以在其中选择他们的语言。语言代码存储在 cookie 中,如果用户再次输入基本 url,他将被重定向到正确的存储。 html 块通过 getChildHtml('world') 加载到我的自定义模板文件中。我在我的 phtml 文件中用一点 javascript 解决了这个问题,但是如果 s.o.知道在这个 html 块中执行此操作的解决方案,我会欣赏它。

标签: html magento redirect block


【解决方案1】:

考虑到框架架构,这是一种不合适的方法。作为开发人员,您可以使用多种机制来解析代码并触发重定向。当请求控制器层和事件观察器系统更合适时,您当前的方法让您使用视图层来触发重定向。

controller_action_predispatch 事件适用于所有请求范围,并且每个路由都有针对性的预调度事件。您可以使用这些和Mage_Core_Controller_Request_Http 对象(“请求对象”)来触发重定向。

【讨论】:

    【解决方案2】:

    重定向过多意味着无限循环。听起来您正在每个页面上加载此块 - 这意味着即使用户被重定向,该块也会再次加载并仍然尝试重定向它们。

    我建议您对国家/地区的检查需要更改:

    if($country) {
    

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

    【讨论】:

    • 谢谢安德鲁。我现在检查 if(currentUrl == baseURL){} 现在它可以工作了。
    猜你喜欢
    • 2014-07-04
    • 2011-10-14
    • 2014-02-20
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多