【问题标题】:Magento - removing wishlist link in 1.4.2?Magento - 删除 1.4.2 中的愿望清单链接?
【发布时间】:2010-12-12 19:44:28
【问题描述】:

以前在 Magento 中,愿望清单链接是使用以下内容添加的(在 wishlist.xml 中):

<action method="addWishlistLink"></action>

您可以使用以下内容(在您的 local.xml 中)覆盖并删除它:

<remove name="wishlist_link"/>

但是,在最新的 Magento 1.4.2 中,他们更改了愿望清单链接添加到以下内容的方式:

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action>

现在有人知道如何删除愿望清单链接吗?

【问题讨论】:

    标签: magento


    【解决方案1】:

    似乎没有公开的方法可以可靠地从布局中删除愿望清单链接block。 (您可以跳到最后寻找解决方法)

    addLinkBlock 假定存在已传递的块,因此以您描述的方式使用 remove 会导致抛出致命错误

    Fatal error: Call to a member function getPosition() on a non-object in /Users/alanstorm/Sites/magento1point4.2.dev/app/code/core/Mage/Page/Block/Template/Links.php on line 112
    

    这是导致该错误的核心代码

    app/code/core/Mage/Page/Block/Template/Links.php
    public function addLinkBlock($blockName)
    {
        $block = $this->getLayout()->getBlock($blockName);
        $this->_links[$this->_getNewPosition((int)$block->getPosition())] = $block;        
        return $this;
    }
    

    这个方法假定它能够通过任何名称来拉出一个块,所以我们不能像在以前的版本中那样只删除wishlist_link块。

    删除链接的唯一机制似乎是同一块类上的以下方法

    app/code/core/Mage/Page/Block/Template/Links.php
    public function removeLinkByUrl($url)
    {
        foreach ($this->_links as $k => $v) {
            if ($v->getUrl() == $url) {
                unset($this->_links[$k]);
            }
        }
        return $this;
    }
    

    但是,这是使用字符串比较完成的,并且没有可靠的方法(据我所知)从布局文件生成 URL 对象,将其转换为字符串,并将其传递给方法(这是必需的,因为有许多配置设置可以更改最终的字符串 URL)。这使得这种方法对我们的需求没有帮助。

    所以,我们可以修改现有的wishlist_link 块以使用空白或不存在的模板。这样块仍然呈现,但它呈现为一个空字符串。最终结果是我们避免了上面提到的致命错误,但仍然设法从我们选择的页面中删除链接。

    以下内容将从所有使用default handle. 的页面中删除链接

    
    
        
            参考>
        默认>
    布局>
    

    【讨论】:

    • 为此干杯。有点骇人听闻,但这对 Magento 来说并不是什么新鲜事,所以我想我现在不得不这样做。知道为什么会发生变化吗?
    • 其实,刚试过这个,不开心,还是看到链接。还有什么想法吗?
    • 我想说这与其说是一个变化,不如说是一个由新功能造成的无意错误。这适用于我的默认安装,所以我会检查你的 local.xml 是否正在加载,并且所有内容都被正确的句柄包围。确认后,将一些调试代码添加到基模板类的 setTemplate 方法中,以确保确实调用了 action 方法。也许您有另一个布局更新覆盖了这个新布局?
    • 抱歉,工作正常,我还需要更新我的 links.phtml。现在工作干杯!
    • 感谢这个,运行良好,但仍然感觉有点 hacky。
    【解决方案2】:

    在你的 local.xml 文件中,

    <?xml version="1.0"?>
    <layout version="0.1.0">
      <default>
        <reference name="root">
          <reference name="top.links">
            <!-- Remove wishlist link in magento 1.4.x and newer -->
            <remove name="wishlist_link"/>
          </reference>
        </reference>
      </default>
    </layout>
    

    【讨论】:

      【解决方案3】:

      您可以从管理面板 System > Configuration > Wishlist > Enabled = "No" 中删除愿望清单链接

      【讨论】:

      • 我不想禁用愿望清单功能,只是从某些页面中删除链接。
      【解决方案4】:

      将以下内容添加到您的 local.xml 文件中。

      <reference name="top.links">
          <remove name="wishlist_link"/>  
      </reference>
      

      这行得通!我已从 Toplinks 中删除了 Wishlink,并希望将其重新添加到另一个块中,但是当您以这种方式删除它时,这似乎是不可能的。很遗憾。

      【讨论】:

        【解决方案5】:

        我知道我在这里迟到了好几年,但对于那些仍在寻找答案的人来说。

        我有一种方法可以解决这个问题,这只是一些额外的工作,但它并不老套,它让你可以完全控制你的 top.links 块。

        只需取消设置top.links 块并重新创建它,它将是空的(不再有wishlist_link 块),您所要做的就是在其中添加您想要的任何链接! (当然,在您的 theme/layout/local.xml 文件中执行所有这些操作)。

        <layout version="0.1.0">
        <default>
            <!-- HEADER -->
            <reference name="header">
        
                <!-- Unsetting the already existing top links block -->
                <action method="unsetChild">
                    <name>topLinks</name>
                </action>
        
                <!-- Re-creating a new top links block -->
                <block type="page/template_links" name="top.links" as="topLinks">
                    <!-- EXAMPLE: Account Dashboard Link -->
                    <action method="addLink" translate="label title" module="catalog">
                        <label>Account Dashboard</label>
                        <url helper="customer/getAccountUrl"/>
                        <title>Account Dashboard</title>
                    </action>
                    <!-- You can add any other links that you want -->
                </block>
        
            </reference>
        </default>
        </layout>
        

        还请记住,对于像 Sign InLog Out 这样的一些链接,您需要在适当的 &lt;customer_logged_out&gt;&lt;customer_logged_in&gt; 句柄内引用您的 top.links 块,而不是在 &lt;default&gt; 内作为指导您可以查看 Magento 的 customer.xml 文件。

        重要提示:如果您的项目中包含任何将链接添加到 top.links 块的模块,这些链接将不会显示,因为 local.xml 是最后处理的,所以请保留它使用这种方法时要记住:)

        我是一名经过认证的 Magento 前端开发人员,拥有超过 3 年的经验,我已经克服了很多关于布局 XML 的难题,以至于我们成为了最好的朋友。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多