Я создал модуль, который имеет "экспорт как" метод, работающий регулярно, как определено в области крона моего модуля файла config.xml. Но я хотел бы дать пользователю способность выполнить этот метод экспорта по требованию путем добавления кнопки "Run now" в конфигурации системы, таким образом использования файла system.xml.
Кажется, что "frontend тип" кнопка может работать, поскольку я попробовал, и это добавляет крошечную активируемую по щелчку кнопку в разделе конфигурации. Но я не могу присоединить метод, ни маркировку на самой кнопке.
Я думал о добавлении кнопки в файле "Grid.php" модуля, но это не, что я хотел бы сделать, поскольку это действительно соответствует моему acl.
Ниже мой файл system.xml с "кнопкой" frontend тип.
Делает у любого есть подсказка о как к:
Большое спасибо за Вашу справку!
<?xml version="1.0" encoding="UTF-8"?>
<config>
...
<fields>
...
<run translate="label">
<label>Run now</label>
<frontend_type>button</frontend_type>
<backend_model>SOME BACKEND MODEL</backend_model>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</run>
</fields>
...
</config>
примечание: после этого вопроса Magento эволюционировала. Имейте в виду, что это решение может не работать в текущих версиях.
Вам следует попробовать добавить
.Например:
<?xml version="1.0" encoding="UTF-8"?>
<config>
...
<fields>
...
<run translate="label">
<label>Run now</label>
<frontend_type>button</frontend_type>
<frontend_model>bar/button</frontend_model>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</run>
</fields>
...
</config>
А затем создайте приложение / код / local / Foo / Bar / Block / Button.php, в которое вы скопируете:
<?php
class Foo_Bar_Block_Button extends Mage_Adminhtml_Block_System_Config_Form_Field
{
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
$this->setElement($element);
$url = $this->getUrl('catalog/product'); //
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
->setType('button')
->setClass('scalable')
->setLabel('Run Now !')
->setOnClick("setLocation('$url')")
->toHtml();
return $html;
}
}
?>
Спасибо phy4me.
Чтобы лучше понять, что происходит, прочтите основные источники: app / code / core / Mage / Adminhtml / Block / System / Config / Form.php
, функцию initForm ()
и initFields ()
функция.
Хьюг.
править: я удалил заглавные буквы edit: исправлена орфографическая ошибка
Ответ Hugues помог. Однако следует обратить внимание на то, что действие frontend_model не должно иметь заглавных букв.
Это должно быть
<frontend_model>bar/button</frontend_model>
вместо
<frontend_model>Bar/Button</frontend_model>
Итак, вот что я сделал, чтобы заставить все это работать в админке.
1) Следовал инструкциям, указанным Hugues (еще раз, следите за тем, чтобы не ставить заглавные буквы в вызове frontend_model)
2) В app/code/local/Foo/Bar/Block/Button. php, изменил определение $url, чтобы он вызывал контроллер администратора модуля Foo_Bar
$url = $this->getUrl('bar/adminhtml_controller/action');
3) Создал/отредактировал действие контроллера администратора Foo_Bar, в котором я вызвал нужный метод с
Mage::getModel('bar/block')->method();
и добавил редирект на область adminhtml, куда я хотел перенаправить пользователя (в моем случае раздел config носителей) :
$this->_redirect('adminhtml/system_config/edit/section/carriers');
И все работает!
Спасибо еще раз ...!