0
좋아, 나는 이것에 아주 가깝다고 느낀다. 그러나 나는 그것 위에서 지난 2 일을 보내었고, 어디에서 도움을 요청할 시간이 될지 생각하지 않았다. 내 용어가 어쩌면 내게로 떨어져. Magento Observer가 데이터를 블록에 넣습니다.
- 문
- 경우에 클래스 "Mage_Adminhtml_Block_Sales_Order_Totals"기다렸다 core_block_abstract_to_html_after
- 에 대한 이벤트 관찰자 관찰자를 통해 블록을 가지고 만든) (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);
}
}
}
?>
내가 차라리 블록을 수정하는 것이 렌더링되기 전에 ... 관찰자의 어떤이의 수 있나요? 또는 html을 아무 것도 설정하지 않고 다시 렌더링하는 방법이 있습니까? – Banning
블록을 다시 쓰지 않으려한다고 가정합니다. 레이아웃에서 addTotal을 호출하면 어떨까요? – Amasty
나는 관리해야하는 파일의 양을 최소한으로 유지하고 싶습니다. 내가 말할 수있는 것부터, 새로운 블록과 레이아웃을 만들지 않고 유지할 수있는 유일한 방법은 Mage_Adminhtml_Block_Sales_Order_Totals를 타고 건너 뛰고 _initTotals() 함수에서 $ this-> _ totals에 직접 내 맞춤 합계를 적용하는 것입니다. – Banning