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

Mar*_*ive 1 magento

以前在Magento中,使用以下内容添加了wishlist链接(在wishlist.xml中):

<action method="addWishlistLink"></action>
Run Code Online (Sandbox Code Playgroud)

你可以覆盖它并使用以下(在local.xml中)删除它:

<remove name="wishlist_link"/>
Run Code Online (Sandbox Code Playgroud)

但是,在最新的Magento 1.4.2中,他们改变了wishlist链接添加到以下内容的方式:

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何删除wishlist链接现在他们已经改变了它的添加方式?

Ala*_*orm 9

似乎没有公开的方法可以从布局中可靠地删除wishlist链接.(您可以跳到最后获得解决方法)

addLinkBlock假设一直传递块的存在,所以在使用中你描述一个致命的错误结果的方式去除被抛出

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
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

这个方法假设它能够通过传递的任何名称来提取一个块,所以我们不能像以前的版本那样只删除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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

以下将使用将Github repo克隆到我的新机器上的所有页面中删除链接addLinkBlock.从那以后,发生了一些事情.

  • 当我这样做addLinkBlock,addLinkBlockaddLinkBlock,该代码被直接发送到Heroku的.它曾经被发送到我自己的Github回购,但我明白这是一个简单的问题,重新定义被认为是'起源'.
  • 在将原点重新定义为我的Github repo的地址并输入之后addLinkBlock,我收到以下错误:
    错误:未能将某些引用推送到'git@github.com:...'
    为了防止您丢失历史记录,非快进更新是被拒绝.在再次推送之前合并远程更改('git pull').

我担心如果我这样做,我最后两天的编码将会丢失addLinkBlock(我已经支持所有内容以防万一).

我目前的想法:addLinkBlock从我的备份中手动更新最后两天的文件,然后最终完成我的操作addLinkBlock.这是正确的方法,还是有更优雅的解决方案?