2011-02-08 78 views
2

好的,我不知道如何给这个问题下个单词,所以希望我能够清楚地解释这个问题。我一直在使用事件来添加/修改几乎所有的功能。我的任务是修改预计出货,结算和送货地址表单中列出的国家/地区列表下拉列表中的国家/地区列表。该功能是从客户端的一些业务规则中添加的。辅助方法被触发后用于添加功能的事件

我相信我可以很容易地重写这个方法,但我正在努力想办法使用所有的事件来做事,所以我问你们是否想用事件来改变下拉菜单基于Mage_Directory_Helper_Data内部方法getRegionJson()的显示,您将如何处理它?

我希望有一个事件,当集合被加载,但我没有看到这样做的可能性,但也许我失去了一些东西。

+0

这是不能通过修改数据库中的`directory_country_region`表来完成的事情吗? – clockworkgeek 2011-02-08 20:31:41

+0

嗯我只是想根据购物车中的某些商品去除某些国家。 – 2011-02-08 20:54:41

回答

1

这不完全是关于如何使用事件来攻击辅助类的问题的答案,但它确实回答了我的问题。我错了,因为我需要修改getRegionJson的JSON输出。纠正我,如果我错了,但只有当你选择一个不同的国家,然后状态/服务下拉将改变使用。由于我只需要从选择菜单中删除选项,该JSON输出可以保留它是因为如果我删除国家选项,用户从来没有机会选择它来需要该JavaScript。

所以我没有找到一个方法来与观察者通过建立一个事件观察者像下面

 <core_block_abstract_to_html_before> 
      <observers> 
       <modify_country_dropdown> 
        <type>singleton</type> 
        <class>module/observer</class> 
        <method>modifyCountryDropDown</method> 
       </modify_country_dropdown> 
      </observers> 
     </core_block_abstract_to_html_before> 

下改变这种下降所以你可以看到我是观察者core_block_abstract_to_html_before事件,然后在我的代码看到该块的块Mage_Core_Block_Html_Select您可以搜索名称,如以下

if($observer->getBlock()->getName() == 'country_id' || $observer->getBlock()->getName() == 'billing[country_id]' || $observer->getBlock()->getName() == 'shipping[country_id]'){ 

     $options = $observer->getBlock()->getOptions(); 
     code here 
     } 

如果选项都不同选择的菜单选项,我可以做我想做的事情用。

虽然我这样做了,但如果我们想要改变从助手类中用观察者输出的那个json字符串,将会很高兴。