Magento - добавить кнопку в system.xml с прикрепленным к ней методом - PullRequest
13 голосов
/ 16 июня 2010

Я создал модуль, в котором регулярно выполняется метод «экспорта», как это определено в области cron моего модуля в файле config.xml.Но я хотел бы дать пользователю возможность запускать этот метод экспорта по требованию, добавив кнопку «Выполнить сейчас» в конфигурации системы, используя файл system.xml.

Похоже, что «Кнопка типа внешнего интерфейса "может работать, как я уже пробовал, и добавляет небольшую нажимаемую кнопку в разделе конфигурации.Но я не могу прикрепить метод или метку к самой кнопке.

Я думал о добавлении кнопки в файл модуля "Grid.php", но это не то, что я хотел бы сделатькак он подходит для моего acl.

Ниже приведен мой файл system.xml с типом интерфейса "button".

Кто-нибудь знает, как:

  • добавить метку / значение для кнопки
  • добавить класс для кнопки
  • добавить метод для вызова при нажатии кнопки

Большое спасибоза вашу помощь!

    <?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>

Ответы [ 2 ]

18 голосов
/ 17 июня 2010

примечание: начиная с этого вопроса, Magento эволюционировал.Имейте в виду, что это решение может не работать в текущих версиях.

Вы должны попытаться добавить <frontend_model></frontend_model>.Например:

    <?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>

А затем создайте файл app / code / 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() функция.

Hugues.

edit: я убрал заглавные буквы edit: Исправленоорфографическая ошибка

5 голосов
/ 17 июня 2010

Hugues ответ сделал свое дело. Однако следует обратить внимание на то, что действие frontend_model не должно иметь заглавных букв.

Это должно быть

<frontend_model>bar/button</frontend_model>

вместо

<frontend_model>Bar/Button</frontend_model>

Итак, вот что я сделал, чтобы все это работало в рамках всего процесса администрирования.

1) Следуя инструкциям Хьюза (еще раз, следите за тем, чтобы в вызове 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, в которую я хотел, чтобы пользователь был перенаправлен (раздел носителей в моем случае):

$this->_redirect('adminhtml/system_config/edit/section/carriers');

И все течет!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...