2013-03-26 1 views
0

Magento에서 프로그래밍 방식으로 블록의 위치를 ​​설정하고 싶습니다. (왼쪽/오른쪽)Magento에서 프로그래밍 방식으로 블록의 위치 설정

사이드 바 제품 뷰 페이지

  • 의 '콘텐츠'아래

    1. 예 :

      가 나는 등의 블록의 위치를 ​​설정할 수 있음을 받기

    2. 다른 블록 이전/이후.

    하시기 바랍니다.

  • +0

    무엇을 시도 했습니까? ESL이 요인 일 수도 있지만 인터뷰 질문처럼 보입니다. – benmarks

    답변

    0

    나는 이것을위한 해결책을 발견했다. 옵저버를 사용하여 블록 위치를 동적으로 설정할 수 있습니다. 먼저 을 <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