0

カスタム モジュールに取り組んでおり、読み込み時に cms ブロックにカスタム モジュール ブロック コードを埋め込もうとしています。ブロックの私のコードは次のとおりです。

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

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

 <events>
     <controller_action_layout_generate_blocks_before>
          <observers>
              <mypage>
                       <type>singleton</type>
                       <class>Module_Model_Observer</class>
                       <method>addlisttocms</method>
                </mypage>
         </observers>
     </controller_action_layout_generate_blocks_before>
</events> 

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

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ページがロードされたときに、上記の関数を使用してブロックを埋め込む必要があります。出来ますか ?

4

2 に答える 2

2

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

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

<cms_page_view>
    <block name="some.block" type="module/block_name" parent="content" template="catalog/product/list.phtml">
        <action method="setCategories">
            <ids>2,3,4</ids>
        </action>
    </block>
</cms_page_view>
于 2012-12-28T05:06:38.880 に答える
1

answer.change イベントを「controller_action_layout_generate_xml_before」に取得し、オブザーバーで次のようなコードを挿入します

  $layout = $observer->getLayout();
 $layout->getUpdate()->addUpdate('<reference name="content"> 
    <block name="mymodule" type="mymodule/blockname"  template="catalog/product/list.phtml">
        <action method="setCategories">
            <ids>2,3,4</ids>
        </action>
    </block>
</reference>');
$layout->generateXml();.

参考までに、サイトをチェックしてください。

于 2012-12-28T07:43:35.950 に答える