2011-01-10 2 views
1

新しいブロックセット.phtml &ブロック:
ブロックが現在製品ページにあるかどうかを知るにはどのような方法がありますか?
製品ページにある場合は、現在表示されている製品のデータにどうやって行くのですか?MagentoでProductまたはProductIDを取得する

おかげで、 エヤル

答えて

6

第1の質問)商品の表示ページにいることを確認する方法。

このような機能の目的が明記されていないため、問題は明確ではありません。あなたの質問は「製品ビューページに埋め込まれており、他のページに埋め込まれていないことをブロックする方法は?」と解釈します。

最も一般的な方法は、ページのレイアウトを取得し、製品を表示するように設計された標準ブロックを検索することです。だからあなたのブロックに次のような要求を行うことができます。

$block = $this->getLayout() 
    ->getBlock('product.info'); 

if ($block) { 
    // Block exists - you're viewing product page 
} 


他の方法は、現在のページのレイアウトを形成するために使用ハンドルレイアウトをチェックすることです:

$handles = $this->->getLayout() 
    ->getUpdate() 
    ->getHandles(); 
if (in_array('catalog_product_view', $handles)) { 
    // Handle exists - you're viewing product page 
} 

それは、より具体的な方法だがが、製品ビュー・ブロックを使用して同様のデザインのページではなく、製品ページを表示する場合にのみ肯定的な結果を返します。製品レビューページの例では、わずかな違いを持つ同じ製品ページが表示されますが、独自の(「catalog_product_view」ではなく)ハンドルを使用しています。あなたの目的について何も言っていない限り、私はあなたに第一または第二の方法を選ぶことをお勧めできません。

お知らせ:通常
a)は、それが現在見ているページ
Bをチェックする必要はありませんしませんので、あなたのブロックは、それが埋め込まれています場所を知る必要はありませんいずれか)、またはあなたのブロックがあるので、あなたのアーキテクチャは、間違っている可能性が製品ビューページでのみ使用されます。しかし、この場合は、必要なページとブロックにのみブロックを配置するレイアウトxmlタスクです。

2番目の質問)製品の表示ページで現在の製品を取得する方法。次のコード

用途:

$product = Mage::registry('current_product'); 

そして、あなたは製品が現在視聴して取得します。

+0

新しいmagento私はハンドルの概念を完全に理解しているかどうかはわかりませんが、最初のオプションは私が目指していたように聞こえます。 この情報は、私が書き込んでいるブロックが、別の場所に挿入された場合に正常に失敗するように、製品ビューを持つページのレイアウトを介して挿入されるようにしたいものです。 '$ product = Mage :: registry( 'current_product');と' $ product = Mage :: registry( 'product'); 'の違いは何ですか? – epeleg

+1

レジストリは変数を保持します。最初のケースでは、 '製品'変数の2番目の変数 'c​​urrent_product'を求めます。これらの変数には何が保存されていますか?一緒に働くスクリプトだけが知っています。製品ビューページでは、これらの変数の両方が同じ製品インスタンスで埋められます。 –

1

現在のリクエストオブジェクトを確認することができます - それは、現在使用中のモジュール、コントローラ、アクションとのparamsに関するすべてのデータを保持しています。モジュール、コントローラー、アクションは同じで、製品IDは一致しますか

しかし、標準のMagento製品のビューコントローラーの代わりになる

のサードパーティ製のカスタマイズを知っておく必要があります
+0

あなたは、この方法が良い方法ではないと自分自身を言う... – epeleg

+0

私はあなたが設定から製品ビューモジュールとコントローラを取得する必要があることを意味するだけでなく、デフォルトの1つを使用して –

+0

o.k.詳細を教えてください。 レイアウト内で何とか製品ビューブロックを検索しなければならないと思っていました。誰もが最終的にそれの中に製品のビューを持つ新しいアクションを追加することができるので、彼らはできないのですか? 私のQの第2部分についてはどうですか? – epeleg

0

これは、どの製品が表示されているかを知らせます。

Mage::registry('current_product') 

current_productがある場合は、このページがカタログコントローラによって処理されている保証するものではありませんが、あなたは、おそらく製品ページです。

+0

'$ product = Mage :: registry( 'current_product');と' $ product = Mage :: registry( 'product'); 'の違いは何ですか? – epeleg

+1

商品ページには、何もありません。両方とも同時に設定されます。 「製品」は、製品の「友人への電子メール」ページなど、いくつかの場所に設定されています。 – clockworkgeek

関連する問題