Magento从HTML块重定向
我想在我的自定义html块中重定向到特定的URL 我正在尝试的是: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
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=basesetenif 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){},现在它可以工作了。