Magento - Добавьте кнопку к system.xml с методом, присоединенным к нему

Я создал модуль, который имеет "экспорт как" метод, работающий регулярно, как определено в области крона моего модуля файла 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>
13
задан Hervé Guétin 16 June 2010 в 14:53
поделиться

2 ответа

примечание: после этого вопроса 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: исправлена ​​орфографическая ошибка

18
ответ дан 1 December 2019 в 22:06
поделиться

Ответ 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');

И все работает!

Спасибо еще раз ...!

5
ответ дан 1 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: