2010-12-12 4 views
1

は以前Magentoの中で、ウィッシュリストのリンクを使用して追加されました(wishlist.xmlに)次Magento - 1.4.2のウィッシュリストリンクを削除しますか?

<action method="addWishlistLink"></action> 

そして、あなたはそれをオーバーライドして(あなたのlocal.xmlで)以下を使用して削除できます。

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action> 

誰でも方法を知っているT:

<remove name="wishlist_link"/> 

しかし、最新のMagentoの、1.4.2に、彼らは、ウィッシュリストのリンクは、以下に追加する方法を変更しましたoウィッシュリストのリンクを削除して、追加方法を変更しましたか?

答えて

9

それは確実にレイアウトからウィッシュリストリンクブロックを削除するには、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> 
+0

これを歓迎します。ビットハッキーですが、それはMagentoのためには新しくないので、私は今これと一緒に行かなければならないと思います。なぜその変更が起こったのか? –

+0

実際には、これを試しただけで喜びはなく、まだリンクを見ています。これ以上のアイデアは? –

+0

私は、それが新しい機能によって作られた不注意なバグではあまり変わらないと言いたいと思います。これはデフォルトのインストールで私のために働くので、local.xmlがロードされているかどうか、そしてすべてが正しいハンドルに囲まれているかどうかを確認します。確認したら、基本テンプレートクラスのsetTemplateメソッドにデバッグコードを追加して、アクションメソッドが実際に呼び出されていることを確認します。多分あなたはこの新しいものを無効にしている別のレイアウトアップデートを持っていますか? –

1

あなたが管理者パネルの[システム]> [設定]> [ウィッシュリストからウィッシュリストリンク>有効を削除することができます=「いいえ」

+0

ウィッシュリスト機能を無効にしたくない場合は、特定のページからリンクを削除するだけです。 –

3

In your local.xml file,

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <default> 
    <reference name="root"> 
     <reference name="top.links"> 
     <!-- Remove wishlist link in magento 1.4.x and newer --> 
     <remove name="wishlist_link"/> 
     </reference> 
    </reference> 
    </default> 
</layout> 
1

Add the following to your local.xml file.

<reference name="top.links"> 
    <remove name="wishlist_link"/> 
</reference> 

This works! I have removed Wishlink from Toplinks and wanted to add it back into another block but that doesn't seem possible when you remove it in this way. Sadly.

0

I know I'm years late here, but for all of those people who are still looking for answers to this.

I have a way to work around this issue that is only a bit of extra work but it's not hacky and it gives you FULL control of your top.links block.

Simply unset the top.linksブロックを使用して、すべてのページからリンクを削除し、それが(これ以上wishlist_linkブロック)空になり、それを再作成し、次、あなたがしなければならないすべては、あなたがの内たい結ぶ方追加ですそれ! (あなたのtheme/layout/local.xmlファイルでこれをすべて行います)。

<layout version="0.1.0"> 
<default> 
    <!-- HEADER --> 
    <reference name="header"> 

     <!-- Unsetting the already existing top links block --> 
     <action method="unsetChild"> 
      <name>topLinks</name> 
     </action> 

     <!-- Re-creating a new top links block --> 
     <block type="page/template_links" name="top.links" as="topLinks"> 
      <!-- EXAMPLE: Account Dashboard Link --> 
      <action method="addLink" translate="label title" module="catalog"> 
       <label>Account Dashboard</label> 
       <url helper="customer/getAccountUrl"/> 
       <title>Account Dashboard</title> 
      </action> 
      <!-- You can add any other links that you want --> 
     </block> 

    </reference> 
</default> 
</layout> 

はまたSign Inのようないくつかのリンクのためにそれを覚えてLog Outあなたは、Magentoののcustomer.xmlファイルを見ることができ、このためのガイドとして代わりに<default>の内部で処理し、適切な<customer_logged_out><customer_logged_in>の内側にあなたのtop.linksブロックを参照する必要があります。

重要:すべてのモジュールがtop.linksブロックへのリンクを追加するには、プロジェクトに含まがある場合local.xmlが最後に処理されているので、これらのリンクは、このメソッドを使用するときに、これだけ心の中でそれを維持し、表示されません:)

私は3年以上の経験を持つ認定Magentoフロントエンド開発者であり、私たちがベストフレンドになった時点でレイアウトXMLの頭痛を克服しました。

関連する問題