Magento - 删除 1.4.2 中的愿望清单链接?

Posted

技术标签:

【中文标题】Magento - 删除 1.4.2 中的愿望清单链接?【英文标题】:Magento - removing wishlist link in 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>

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

【问题讨论】:

【参考方案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 的难题,以至于我们成为了最好的朋友。

【讨论】:

以上是关于Magento - 删除 1.4.2 中的愿望清单链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Magento 2.0 Luma 模板中删除“我的愿望清单”和“比较产品”块?

如果项目已经在 magento 的愿望清单中,则隐藏愿望清单按钮

用于添加产品愿望清单的 Magento 自定义 API

Magento - 访问客户的愿望清单

Magento - 包含当前用户愿望清单的产品系列

PHP Magento - 基于Ajax的愿望清单和比较