新しいブロックをマゼンタに注入する方法

カスタムモジュールで作業していて、ロード時にカスタムブロックコードをcmsブロックに埋め込むようにしています。ブロックのコードは次のとおりです。

{{block type="module/block_name" categories="2,4,3" template="catalog/product/list.phtml" }}

これはcmsブロックページで実行されます。しかし、私は実行時にブロックコードを埋め込もうとしています。このために私はイベントを作成します

 
     
          
              
                       singleton
                       Module_Model_Observer
                       addlisttocms
                
         
     
 

オブザーバーにいる間、私は関数を作成します:

public function addlisttocms(Varien_Event_Observer $observer)
    {
     $controller = Mage::app()->getRequest()->getControllerName();
     $layout = Mage::app()->getRequest()->getRouteName();
     $var = Mage::app()->getRequest()->getActionName();
     $page =  Mage::app()->getRequest()->getParam('page_id');
}

今、私はcmsページが読み込まれるときに、私は上記の関数を使用して私のブロックを埋め込みたい。出来ますか ?

0
nl ru de

2 答え

これを行うには、レイアウトXMLまたはカスタムウィジェットを使用します。

カスタムモジュールレイアウトXMLファイル:


    
        
            2,3,4
        
    

2
追加された
あなたは少し詳細な答えを提供することができますか?
追加された 著者 Mahmood Rehman,
申し訳ありませんが、私の質問が表示されたら、私はxmlでないオブザーバーでこのブロックコードを追加したいと思います。$ observer-> getEvent() - > getLayout() - > getUpdate() - > addUpdate()あなたは私のポイントを持っています。
追加された 著者 Mahmood Rehman,
理由は私は動的にidを取得していますが、xmlではそれを行うことができないと思います。xmlで私が知っていることを知っていれば、私にとっては素晴らしい選択です。
追加された 著者 Mahmood Rehman,
私はこの投稿に続いています。 asia-connect。 com.vn/2009/07/… ids私はオブザーバーから設定しました。
追加された 著者 Mahmood Rehman,
私の電話では、やや短いです。
追加された 著者 benmarks,
私はあなたのことを理解していません。なぜあなたはしている/あなたはオブザーバーと一緒にこれをしなければなりませんか?レイアウト内のすべてのブロックもこのように動作します。彼らはそうしない理由があります。
追加された 著者 benmarks,
あなたのブロックが投稿したオブザーバーコードからこれらのIDを動的に取得する方法はわかりません。 MVCのMagento規約では、複数のレイヤーを結合するのではなく、ブロックが内部的にコレクションクラスを呼び出すことができます。あなたが投稿した例では、あなたのブロックに同じことを達成するために $ this-> getRequest()を使用する _construct()メソッドを含めることができます。さらに、あなたが選んだイベントを使うことで、あなたのブロックは決してレイアウトXMLキャッシュの一部になることはありません。どちらも注意すべき考慮事項です。
追加された 著者 benmarks,

私は自分のanswer.changeイベントを 'controller_action_layout_generate_xml_before'に、オブザーバーには

  $layout = $observer->getLayout();
 $layout->getUpdate()->addUpdate(' 
    
        
            2,3,4
        
    
');
$layout->generateXml();.

refrenceについては、サイトをご覧ください。

1
追加された