Событие, используемое для добавления функциональности после запуска вспомогательного метода - PullRequest
2 голосов
/ 08 февраля 2011

Хорошо, я не знал, как сформулировать вопрос, так что, надеюсь, я смогу объяснить это ясно. Я хорошо справляюсь с использованием событий для добавления / изменения функциональности практически для всего. У меня есть задача изменить страны, которые указаны в раскрывающемся списке стран в оценочных формах доставки, выставления счетов и адресов доставки. Эта функциональность добавлена ​​из некоторых бизнес-правил клиента.

Я уверен, что мог бы легко переписать метод, но я изо всех сил стараюсь найти способы использовать все события, чтобы делать вещи, поэтому я спрашиваю вас, ребята, хотите ли вы использовать событие, чтобы изменить то, что отображается в раскрывающемся списке основанный на методе getRegionJson() внутри Mage_Directory_Helper_Data, как бы вы поступили?

Я надеялся, что было событие, когда коллекция загружалась, но я не видел возможности сделать это, но, возможно, я что-то упустил.

1 Ответ

1 голос
/ 09 февраля 2011

Это не совсем ответ на вопрос о том, как использовать события для атаки на вспомогательные классы, но это действительно решает мою проблему.Я был неправ в том, что мне нужно было изменить вывод JSON для getRegionJson.Поправьте меня, если я ошибаюсь, но это используется только в том случае, если вы выбираете другую страну, и тогда изменится раскрывающийся список состояния / услуги.Так как мне нужно было только удалить опции из меню выбора, этот вывод 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, которая выводится из вспомогательного класса, с помощью наблюдателя.

...