それは確実にレイアウトからウィッシュリストリンクブロックを削除するには、no公に利用可能な方法があります表示されます。だからここだ
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
をスローされますが、致命的なエラーで結果を説明した方法で削除使用して、
addLinkBlock
が渡されていたブロックの存在を前提としています(回避策のために最後までスキップすることができます)そのエラーの原因となるコアコード
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のためには新しくないので、私は今これと一緒に行かなければならないと思います。なぜその変更が起こったのか? –
実際には、これを試しただけで喜びはなく、まだリンクを見ています。これ以上のアイデアは? –
私は、それが新しい機能によって作られた不注意なバグではあまり変わらないと言いたいと思います。これはデフォルトのインストールで私のために働くので、local.xmlがロードされているかどうか、そしてすべてが正しいハンドルに囲まれているかどうかを確認します。確認したら、基本テンプレートクラスのsetTemplateメソッドにデバッグコードを追加して、アクションメソッドが実際に呼び出されていることを確認します。多分あなたはこの新しいものを無効にしている別のレイアウトアップデートを持っていますか? –