2011-08-11 17 views
8

私はFrontendページからレイアウトをフェッチしたいMagentoモジュールに取り組んでいます。フロントエンドページでは、すべての種類のページ、つまりCMSページ、カテゴリ、製品、カート、アカウントなどを意味します。Magentoは与えられたページのレイアウトを取得します

私はAlan Stormの優れたmagento-nofrills電子書籍を読んでいます。私はCommercebugプラグイン私のマゼンタサイトを開発するのに役立ちます。私はまた、similairの質問を探してstackoverflowにいくつかの時間を費やした、私はそれを逃した場合は私を許してください。

たとえば、ページIDまたはカテゴリIDがある場合、バックエンドで実行されるコードからそのフロントエンドページのレイアウトを取得するにはどうすればよいですか?

私が要求してプレーしてきたと私はフロントエンドでこのコードを実行すると、インスタンスのためのカタログページを見たとき、私はモジュール、コントローラ、layouthandlesなどが変更されていることがわかります

$request = Mage::app()->getRequest(); 
$request->setModuleName('cms'); 
$request->setRouteName('cms'); 
$request->setControllerName('page'); 
$request->setActionName('view'); 
$request->setParam('page_id', 6); 

しかし、私はレイアウトからXMLを検査したときに、私は私のIDを持つ(この例では)用のXML CMSのページを表示するためにMagentoのを強制的に見えることはできません= 6:

Mage::app()->getLayout()->getNode()->asXml(); 

は、たぶん私はあまりにも複雑に考えていますしかし、。特定のページにサイドバーがあるかどうかを確認したいと思います。ブロックと要素はページとサイドバーに表示されます(アクティブブロックのみで、無視されません)。

ありがとうございます! Tim

+1

これを把握しましたか?私は自分自身が好奇心だ。 – chrisjlee

答えて

5

getLayout()の前にloadLayout()を呼び出します。ブロックは($ block_name)getBlockを呼び出すことにより、レイアウトでアクティブな場合

次のことが確認できます。

$left_block = $this->loadLayout()->getLayout()->getBlock('left'); 

ブロックは、レイアウトの一部ではない(または無視される)場合、$ left_blockがされます偽です。 あなたは、その子のブロックを参照してくださいgetSortedChildren()と一緒にgetBlock()を使用することができます。

$this->loadLayout()->getLayout()->getBlock('content')->getSortedChildren(); 

上記の「コンテンツ」ブロック内のブロック名の文字列配列を返します。アクティブなブロックの名前のみが返されます。

+0

あなたのスニペットを使って$ left_blockを取得しようとしました。 例外エラーが発生しました。そのコード行の前に追加する必要があるものはありますか? – Kamal

+0

コードはどこに置いたのですか?上記の例はコントローラファイルに含まれています。 – Joe

+0

owh ...私はphtmlファイルでそれを使う必要があります...私はそれを行うことができる方法はありますか?私はここにそれを求めているhttp://stackoverflow.com/questions/11133522/magento-get-which-layout-being-used-on-phtml-files。あなたがそれに答えることができれば嬉しいです:) – Kamal

関連する問題