似乎没有公开的方法可以可靠地从布局中删除愿望清单链接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. 的页面中删除链接
blank-link.phtml参考>
默认>
布局>