强制删除商店代码?___ store =默认来自Magento中的URL

时间:2014-12-03 09:10:07

标签: magento

在magento,我使用两个商店视图,一个是阿拉伯语,另一个是英语。当我将商店转换为英语时,这个字符串会附加在url(___ store = english)中,用于英语商店查看。对于阿拉伯语而言,这是明智的。现在我想删除?___ store = english for english和?___ store = arabic for arabic in URL。

7 个答案:

答案 0 :(得分:3)

如果使用链接小部件,请使用以下过程。

app/code/core/Mage/Catalog/Block/Widget/Link.php复制到app/code/local/Mage/Catalog/Block/Widget/Link.php

搜索(Magento 1.7.x中的第91行/ Magento 1.9.x中的第100行)

  

$ this-> _href = $ this-> _href。 $符号。 “___ store =”。 $ store->引用代码();

并修改为

  

$ this-> _href = $ this-> _href;

上传并保存您的更改,您现在不会为您的小部件(动态)插入链接添加?___ store = default。

信用:DesignHaven

答案 1 :(得分:2)

要删除此格式:?___ store =英语为english,?___ store = arabic

在设计文件中找到languages.phtml

/app/design/frontend/default/template/page/switch/languages.phtml

在第41行

echo $_lang->getCurrentUrl()

将'false'添加为参数

echo $_lang->getCurrentUrl(false)

实际网址:

http:example.com?___store=english for english and ?___store=arabic

在$ _lang-> getCurrentUrl(false)方法中添加false参数后。网址将如下所示生成

http:example.com?___store=english

然后要删除'___ store = english'参数,您需要在控制器操作中添加预调度事件: 在本地模块config.xml中添加此代码

      <controller_action_predispatch>
            <observers>
                <controller_action_before>
                    <class>marketplace/observer</class>
                    <method>setToControllerActionPreDispatch</method>
                </controller_action_before>
            </observers>
        </controller_action_predispatch>

在本地观察者中添加此方法

public function setToControllerActionPreDispatch($observer)
{   
    $pathInfo = Mage::helper('core/url')->getCurrentUrl();       
    if(strpos($pathInfo, "___store") != ''){     
        $pathInfo = str_replace(array('?___store=arabic', '?___store=default'), '' , $pathInfo);
        Mage::app()->getResponse()->setRedirect($pathInfo);
    }           

}

答案 2 :(得分:0)

在管理员到达系统&gt;配置(从顶部菜单),然后转到&#39; Web&#39;形成左侧菜单。

第一个选项是“将商店代码添加到网址&#39;”,将其设置为“否”。

答案 3 :(得分:0)

在看完这个并试验管理员之后,我的想法是考虑多个Magento'网站'而不是商店。即使您排除查询参数,Magento也希望将商店名称附加为URI的第一个组件。简而言之,我不确定在使用多个“商店”时尝试实际从URL中删除商店组件有多好。

答案 4 :(得分:0)

要删除此格式:?___ store = english for english

  

步骤1:转到system-&gt; Configuration。然后转到网络标签。你可以看到有一个选项&#39;   &#34;将商店代码添加到网址&#34;将该选项设置为&#34;是&#34;

     

第2步:/app/design/frontend/base/default/template/page/switch/languages.phtml   找到以下代码:

echo $_lang->getCurrentUrl()
Add 'false' as parameter
echo $_lang->getCurrentUrl(false)
  

步骤3:将app / code / core / Mage / Catalog / Block / Widget / Link.php复制到   应用程序/代码/本地/法师/目录/砌块/空间/ Link.php

Search this line :
$this->_href = $this->_href . $symbol . "___store=" . $store->getCode();


And modify to : 
$this->_href = $this->_href;
  

步骤4:转到“管理”面板,找到导航系统 - >“索引管理”&gt;&gt; Reindex数据

答案 5 :(得分:0)

我知道问题很老,但是如果有人需要此功能,并且您不想更改我派发的文件module on Github,并进行了一些改进。

您还可以使用composer进行安装。

答案 6 :(得分:0)

如果像我们一样,您已经被Google索引了这些URL,则应将它们排除在URL parameters中,确保您拥有canonical URL tag,然后还可以使用诸如index之类的内容来拦截请求。 php和301到没有多余参数的页面:

$url = parse_url($_SERVER['REQUEST_URI']);
if (!empty($url['query'])) {

    //$params = arrary();
    $checkingfor = array('___store', '___from_store');
    parse_str($url['query'], $params);
    if (count(array_intersect_key(array_flip($checkingfor), $params)) > 0) {
        $vars = array_diff_key($params, array_flip($checkingfor));
        $finalUrl = http_build_url(
            '',
            array(
                "scheme" => $_SERVER['REQUEST_SCHEME'],
                "host" => $_SERVER['SERVER_NAME'],
                "path" => $url['path'],
                "query" => http_build_query($vars)
            )
        );
        header('Location: ' . $finalUrl, true, 301);
        exit();
    }
}

如果未安装PECL,请使用this alternative来http_build_url()。

posted here