Добавление своего mass action в админке магазина magento.

Добавление своего mass action в админке магазина magento.

Для добавления нового mass action в админке магазина можно воспользоваться двумя средствами:
1. переопределив Admin Grid
2. использовав событие (event)

Первый вариант в 99% случаев считаю неприемлемым, т.к. переопределение базового класса одним модулем повлечет за собой проблемы при использовании этого же класса другим модулем. Предпочтительней использовать события (подробнее о том что это здесь).

Рассмотрим на примере, предполагаем, что модуль у нас уже создан: необходимо добавить новый mass action в листинг продуктов (который будет делать что-то) и поможет нам в этом событие ‘core_block_abstract_prepare_layout_before‘, которое выбрасывается в методе setLayout блоков.

Сначала в файле app/code/local/Mycompany/MassactionModule/etc/config.xml регистрируем событие и observer (наблюдателя) для него, добавляем следующий код

После чего создаем сам observer здесь /var/www/mymagento/site/app/code/local/Mycompany/MassactionModule/Model/Observer.php.

Здесь:
- проверяю имя контроллера на ‘catalog_product’, т.к. меня интересует именно список продуктов
- ‘recalculate_price‘ – значение (value) для option в селекте mass action
- ‘label‘ – то, что будет отображаться в селекте
- ‘url‘ – моего контроллера, который будет производить обработку massactionmodule – имя модуля
- ‘massaction‘ – имя контроллера
- ‘customrecalculateprice‘ – имя метода

Подробнее можно узнать здесь Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract::addItem.

Далее добавляем роуты в app/code/local/Mycompany/MassactionModule/etc/config.xml

Все, в mass actions теперь появился новый пункт. Если по кам-то причинам, новая опция в mass actions селекте отсутствует, рекомендую почистить кеш magento.

И сам контроллер, который буде выполнять желаемое действие, создаю его здесь app/code/local/Mycompany/MassactionModule/controllers/MassactionController.php

В $this->getRequest()->getParam(‘product’) получаю выделенные продукты, а дальше можно начинать совершать желаемое действие.
Вот и все.