这似乎有可靠地从布局中删除的心愿链接块没有公开可用的方法。 (你可以跳到最终的解决方法,)
的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;
}
这种方法假定它要能拉出不论其名称被传递块,所以我们不能只删除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.
<!-- file: local.xml -->
<layout>
<default>
<reference name="wishlist_link">
<action method="setTemplate"><template>blank-link.phtml</template></action>
</reference>
</default>
</layout>
为此欢呼。有点怪异,但这对于Magento来说并不是什么新东西,所以我现在不得不选择这个。任何想法为什么改变? – 2010-12-13 00:46:03
其实只是尝试这样做,并没有喜悦,仍然能看到的链接。还有什么想法? – 2010-12-13 00:54:44
我会说这是没有这么多的变化,通过新功能创建一个无意的错误。这适用于默认安装,所以我会检查你的local.xml是否被加载,并且所有东西都被正确的句柄包围。一旦你确认了,添加一些调试代码的基本模板类的setTemplate方法,以确保操作方法真的被调用。也许你有另一个布局更新覆盖这个新的? – 2010-12-13 02:51:27