2013-03-26 74 views
0

我想在Magento中以編程方式設置塊的位置。以編程方式在Magento中設置塊的位置

例如我希望我可以設置一個塊作爲位置:

  1. 以下產品視圖頁

  2. 的「內容」在側欄(左/右)

  3. 任何其他塊之前/之後。

請提出建議的方式。

+0

你有什麼試過? ESL可能是一個因素,但這些看起來像面試問題。 – benmarks 2013-03-26 13:03:02

回答

0

我找到了解決方案。您可以使用觀察器動態設置塊位置。 首先在<Namespace>/<Module>/Model目錄下創建Observer.php。寫下面的代碼在這個文件中:

class <Namespace>_<Module>_Model_Observer 
{ 
    public function set_block($observer) 
    { 
     $action = $observer->getEvent()->getAction(); 
     $fullActionName = $action->getFullActionName(); 
     $position = 'right'; 
     $sub_position = 'before="cart_sidebar"'; 

     $myXml = '<reference name="'.$position.'">'; 
     $myXml .= '<block type="obc/obc" name="obc" template="obc/obc.phtml" '.$sub_position.' />'; 
     $myXml .= '</reference>'; 
     $layout = $observer->getEvent()->getLayout(); 
     if ($fullActionName=='catalog_product_view') { //set any action name here 
      $layout->getUpdate()->addUpdate($myXml); 
      $layout->generateXml(); 
     } 
    } 
} 

現在​​3210寫入以下行來調用觀察者:

<events> 
    <controller_action_layout_generate_blocks_before> 
     <observers> 
      <module_block_observer> 
       <type>singleton</type> 
       <class><Namespace>_<Module>_Model_Observer</class> 
       <method>set_block</method> 
      </module_block_observer> 
     </observers> 
    </controller_action_layout_generate_blocks_before>  
</events> 

現在,您可以隨時隨地在頁面上使用觀察者設置你的塊的位置。

+0

爲什麼不能使用insert(blockname,sibling,after,alias)方法? – kaushik 2013-12-11 09:08:17

相關問題