Magento Observer将数据注入块中

时间:2014-07-24 14:43:04

标签: magento

我有:

  1. 为core_block_abstract_to_html_after
  2. 创建了一个事件观察者
  3. 在if语句中等待课程“Mage_Adminhtml_Block_Sales_Order_Totals”
  4. 通过观察者获取了块并调用了addTotal();
  5. 这就是我被困的地方......如果我转储该块,我可以看到我新添加的总数,但是它没有显示在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);
            }
    
        }
    
    }
    ?>
    

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

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,而不是块。您可以获取块HTML并为其添加字符串。它会对你有用吗?

您还可以使用布局来调用块函数:

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