【问题标题】:Event to use to add functionality after a helper method is fired触发辅助方法后用于添加功能的事件
【发布时间】:2011-02-08 19:54:26
【问题描述】:

好的,我不知道如何表达这个问题,所以希望我能解释清楚。我在使用事件添加/修改几乎所有内容的功能方面做得非常好。我的任务是修改估计的送货、账单和送货地址表格上国家列表下拉列表中列出的国家。此功能是从客户端的某些业务规则中添加的。

我确信我可以轻松地重写该方法,但我正在尽最大努力想办法使用所有事件来做事,所以我问你们是否想使用事件来更改下拉列表显示的内容基于Mage_Directory_Helper_Data内部的getRegionJson()方法,你会怎么做?

我希望在加载集合时有一个事件,但我没有看到这样做的可能性,但也许我错过了一些东西。

【问题讨论】:

  • 这是不是通过修改数据库中的directory_country_region表无法做到的?
  • 嗯,我只想根据购物车中的某些商品删除某些国家/地区。

标签: php magento observer-pattern


【解决方案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
        }

其中 options 是所有不同的选择菜单选项,我可以随心所欲地使用它们。

虽然我这样做了,但如果我们确实想通过观察者更改从辅助类输出的 json 字符串会怎样。

【讨论】:

  • 不错的一个。证实了我的信念,有时似乎没有要绑定的事件,但如果你足够努力,总会有! :)
  • 是的,我以为我在试图找到一个事件的方法时迷路了,但它就在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多