Павел Новицкий

Отключение рендеров в гриде при экспорте. Работа над ошибками

21 февраля 2014, 1:17

Знаете что самое интересное в работе с Magento? Можно излазить эту CMS вдоль и поперёк и всё равно нет-нет, а нарвёшься на какую-нибудь неизвестную деталь.

Вот так и случилось c модулем CouponUsage. При выводе списка купонов хотелось сделать прямо в гриде ссылки на заказ и использованное правило с купоном. Ничего сложного — дополнительный блок рендера, параметр «renderer» в описании колонки и готово. И всё было бы хорошо если бы не экспорт отчёта в csv и xml. При экспорте используется тот же блок грида что и при выводе в админке. Данные, само собой, точно так же проходят через рендерер и в итоге получаем в файле экспорта не номер заказа и название правила, а нечитаемый хтмл вида

    <a href="http://example.com/index.php/admin/sales_order/view/order_id/193/">100000193</a>

Раз есть такая проблема — думаем логически. Раз есть отдельный метод в контроолере для обработки экспорта, значит, можно там как-то дать понять системе какой формат данных нам нужен. Первое решение «в лоб» показалось самым простым и правильным. Передать в блок свою переменную no_renderer и по ней уже определять подключать рендерер или нет.

Смущало только что такого подхода не встречал. My bad. Совсем бегло родительские классы проглядывал. Оказалось, всё вообще банально и просто. В классе Mage_Adminhtml_Block_Widget_Grid есть уже готовый флаг $_isExport как раз переключающийся при вызове экспорта.

Такая вот работа над ошибками, да. На гитхабе, разумеется, уже обновлённая версия.

0 комментариев


Ваш комментарий
(обязательно)
(не показывается)
(HTML не работает)
© 2013-2017
Скопировать