2013-03-26 1 views
0

Я хочу программно установить положение блока в Magento.Установить положение блока программно в Magento

Например, я хочу, чтобы я мог установить положение блока, как:

  1. Ниже «содержание» зрения странице продукта

  2. В боковой панели (слева/справа)

  3. До/после любого другого блока.

Пожалуйста, предложите способ сделать это.

+0

Что вы пытаетесь? ESL может быть фактором, но это похоже на вопросы интервью. – benmarks

ответ

0

Я нашел решение для этого. Динамическое позиционирование блока можно использовать с помощью наблюдателей. Прежде всего создайте Observer.php в каталоге <Namespace>/<Module>/Model. Написать следующий код в этом файле:

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(); 
     } 
    } 
} 

Сейчас в config.xml пишут следующие строки для вызова наблюдателя:

<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

 Смежные вопросы

  • Нет связанных вопросов^_^