如何删除Magento Orders和Returns页面

时间:2012-03-08 21:38:27

标签: magento

Magento 1.6+创建订单和退货页面(www.yourstore.com/sales/guest/form/)并在页脚中放置链接。

通过在local.xml(see this stackoverflow answer)中添加布局更新,可以轻松删除页脚中的链接

但页面仍然存在,可以被Google编入索引,应该删除。如何通过代码删除此默认Magento页面?

修改 我想澄清一点,我不是在寻找重定向,重写或404类型的答案。我正在寻找一种方法来首先删除或覆盖创建此页面的任何功能,因此它永远不会被创建。我的理论是,如果存在创建它的功能,那么应该有一种方法来删除该功能。我知道还有其他通过重写等方法隐藏URL的方法。但在我看来,首选方法是不创建不需要的页面,然后再隐藏它们。我认为Magento有一些不产生它产生的页面的方法。类似于local.xml如何删除不需要的代码块。是否有类似的方法来防止首先创建不需要的页面?

3 个答案:

答案 0 :(得分:3)

最简单的方法是使用URL重写将请求重新路由到Magento的404页面。在.htaccess文件中,在RewriteEngine on之后和其他重写规则之前添加以下两行:

RewriteCond %{REQUEST_URI} ^/sales/guest/form
RewriteRule .* errors/404.php

如果您只需要从一个站点中删除此功能,您可以将其包含在Apache的<If>语法中,如下所示:

<If "%{HTTP_HOST} != 'www.example.com'">
    RewriteCond %{REQUEST_URI} ^/sales/guest/form
    RewriteRule .* errors/404.php
</If> 

如果您更喜欢使用PHP代码,其他替代方法包括覆盖Mage_Sales_GuestController类以返回重定向到404页面。或者您可以操作路由器以在路由发生之前从路由表中删除URL。与.htaccess解决方案相比,这两者都要复杂得多。

答案 1 :(得分:2)

您可以使用local.xml方法将/ sales / guest / form / page的内容替换为其他内容。例如,您可以将此句柄放在那里......

<sales_guest_form>
  <reference name="content"> 
    <!-- Remove the main content of the page, which is the form -->
    <remove name="guest.form" />
    <!-- Optionally you can add in your own block or set of blocks. Not sure I would though -->
    <block type="yourmodlulealias/some_class" template="whatever/template.phtml" /> 
  </reference>
</sales_guest_form>

这将删除整个客人表单,并将其替换为您自己选择的块。哎呀,你甚至不需要添加自己的块。

另一个想法是创建一个侦听controller_action_predispatch_sales_guest_form事件的观察者,并在它被触发时重定向。在此页面的主要处理发生之前触发此事件。所以config.xml可能会有类似的东西......

        <controller_action_predispatch_sales_guest_form>
            <observers>
                <seo_redirect>
                    <type>singleton</type>
                    <class>yourmodulealias/observer</class>
                    <method>redirectRequest</method>
                </seo_redirect>
            </observers>
        </controller_action_predispatch_sales_guest_form>

然后你的观察者类会看起来像这样......

class Yourcompany_Yourmodulename_Model_Observer {
  public function redirectRequest($observer){
    header("Location: " . Mage::getUrl() . 'someplace-else');
  }
}

如果你不喜欢重定向的想法,你可能会发疯并退出:)

修改 如果您已经死定,看起来该页面不存在,那么也许您可以返回404状态。当Web服务器获取对服务器上不存在的文档的请求时,它通常返回404.换句话说,404表示该文档不存在。要做到这一点,您可以使用上面的观察者想法,只需将上面的重定向替换为:

class Yourcompany_Yourmodulename_Model_Observer {
  public function redirectRequest($observer){
    Mage::app()->getResponse()->setHeader('HTTP/1.1','404 Not Found');
    Mage::app()->getResponse()->setHeader('Status','404 File not found');
    exit;
  }
}

当您点击浏览器中的页面时,它将完全为空白,并且http标头会说它找不到404。另一种类似的方法是使其显示Magento的默认404页面。我之前没有这样做,但我想你首先需要覆盖控制器(app / code / core / Mage / Sales / controllers / GuestController)(如果你不熟悉的话,查看如何覆盖控制器,它与重写模型和块不同)。您只需覆盖该类中的formAction()函数。它可能是这样的:

public function formAction()
{
  $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
  $this->getResponse()->setHeader('Status','404 File not found');
  $this->loadLayout();
  $this->renderLayout();
}

除了此更改之外,您还需要更新local.xml文件中的布局句柄,使其看起来像句柄(位于cms.xml布局文件中)。所以它看起来像这样。

<sales_guest_form> 
    <remove name="right"/>
    <remove name="left"/>

    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
    <reference name="content">
        <block type="core/template" name="default_no_route" template="cms/default/no-route.phtml"/>
    </reference>
</sales_guest_form>

同样,我还没有测试过最后一种方法,但它应该可以正常工作。点击http://yousite.com/sales/guest/form会将您带到同一个Magento 404页面,就好像您访问了其他一些不存在的网址,例如http://yoursite.com/some-non-existent-url

答案 2 :(得分:1)

发布另一个答案,因为评论太长了......

任何不存在的文件(例如js / css等).htaccess重写将重定向Magento的请求处理过程(从index.php开始)。因此,任何URL(如sales / guest / form)都会触及Magento请求处理程序,无论它是否由Magento定义。此时,如果它与Magento控制器操作匹配或可以路由到Magento控制器,Magento会生成相应的页面。如果无法将URL解析为控制器操作,Magento将生成404页面。

因此,任何以404结果响应且不允许控制器操作运行的解决方案在功能上与“删除”页面相同。