似乎没有公开可用的方法来可靠地删除愿望清单链接block从布局来看。 (您可以跳到最后查看解决方法)
The 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
这是导致该错误的核心代码
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;
}
此方法假设它将能够通过传递的任何名称拉出一个块,因此我们不能像在以前的版本中那样删除愿望清单链接块。
删除链接的唯一机制似乎是同一块类上的以下方法
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)。这使得这个方法对我们的需求没有帮助。
那么,我们can是否修改现有的 Wishlist_link 块以使用空白或不存在的模板。这样该块仍然会呈现,但它呈现为空字符串。最终结果是我们避免了上面提到的致命错误,但仍然设法从我们选定的页面中删除链接。
以下内容将从中删除链接all页面使用default handle.
<!-- file: local.xml -->
<layout>
<default>
<reference name="wishlist_link">
<action method="setTemplate"><template>blank-link.phtml</template></action>
</reference>
</default>
</layout>