2014-07-24 2 views
0

좋아, 나는 이것에 아주 가깝다고 느낀다. 그러나 나는 그것 위에서 지난 2 일을 보내었고, 어디에서 도움을 요청할 시간이 될지 생각하지 않았다. 내 용어가 어쩌면 내게로 떨어져. Magento Observer가 데이터를 블록에 넣습니다.

  1. 경우에 클래스 "Mage_Adminhtml_Block_Sales_Order_Totals"기다렸다 core_block_abstract_to_html_after
  2. 에 대한 이벤트 관찰자 관찰자를 통해 블록을 가지고 만든) (addTotal라고;

여기가 내가 붙어있는 곳입니다. 블록을 덤프하면 HTML에 표시되지 않는 새로 추가 된 합계를 볼 수 있습니다. 확실히 새로 추가 된 데이터를 포함 할 수 있도록 HTML 또는 무언가를 "새로 고치는"방법이 있어야합니다.

public function handleBlockOutput($observer) 
{ 
    /* @var $block Mage_Core_Block_Abstract */ 
    $block = $observer->getBlock(); 

    if ($block instanceof Mage_Catalog_Block_Product_List) { 
     $transport = $observer->getTransport(); 
     $html = $transport->getHtml(); 

     if (strpos($html, "amasty-layered-navigation") === FALSE){ 
      $html = some_custom_logic(); 

      $transport->setHtml($html); 
     } 
    } 
} 

그래서 관찰자는 HTML이 아닌 블록을 수정할 수 있습니다 : 여기에 내가 지금까지 가지고있는 코드 ... 다음 코드를 시도

<?php 
class Company_Extension_Model_Totals { 

    public function blockToHtmlAfter(Varien_Event_Observer $observer){ 
     $block = $observer->getBlock(); 
     $class = get_class($block); 

     if($class == 'Mage_Adminhtml_Block_Sales_Order_Totals'){ 
      $transport = $observer->getTransport(); 

      $block->addTotal(new Varien_Object(array(
       'code'  => 'newmethod', 
       'value'  => '10', 
       'base_value'=> '10', 
       'label'  => 'New Method', 
       'area'  => 'footer' 
      )), 'last'); 

      #$transport->setHtml($output); 
     } 

    } 

} 
?> 

답변

0

이다. 블록 HTML을 가져 와서 문자열을 추가 할 수 있습니다. 그것은 당신을 위해 일할 것인가?

또한 블록 함수를 호출하는 레이아웃을 사용할 수 있습니다

  <block type ="amfinder/form" name="amasty-products-finder"> 
       <action method="setId"><id>1</id></action> <!-- with params --> 
       <action method="apply" /> <!-- without params --> 
      </block>  
+0

내가 차라리 블록을 수정하는 것이 렌더링되기 전에 ... 관찰자의 어떤이의 수 있나요? 또는 html을 아무 것도 설정하지 않고 다시 렌더링하는 방법이 있습니까? – Banning

+0

블록을 다시 쓰지 않으려한다고 가정합니다. 레이아웃에서 addTotal을 호출하면 어떨까요? – Amasty

+0

나는 관리해야하는 파일의 양을 최소한으로 유지하고 싶습니다. 내가 말할 수있는 것부터, 새로운 블록과 레이아웃을 만들지 않고 유지할 수있는 유일한 방법은 Mage_Adminhtml_Block_Sales_Order_Totals를 타고 건너 뛰고 _initTotals() 함수에서 $ this-> _ totals에 직접 내 맞춤 합계를 적용하는 것입니다. – Banning

관련 문제