Pertanyaan Magento - Tambahkan tombol ke system.xml dengan metode yang melekat padanya


Saya telah membuat modul yang memiliki metode "ekspor seperti" berjalan secara teratur seperti yang didefinisikan di daerah cron modul saya dari file config.xml. Tapi saya ingin memberi pengguna kemampuan untuk menjalankan metode ekspor ini sesuai permintaan dengan menambahkan tombol "Jalankan sekarang" dalam konfigurasi sistem, sehingga menggunakan file system.xml.

Tampaknya tombol "frontend type" mungkin berfungsi karena saya sudah mencoba dan itu menambahkan tombol kecil yang dapat diklik di bagian konfigurasi. Tetapi saya tidak dapat melampirkan metode atau label pada tombol itu sendiri.

Saya berpikir tentang menambahkan sebuah tombol di file "Grid.php" dari modul tetapi ini bukan yang saya ingin lakukan karena cocok dengan acl saya.

Di bawah ini adalah file system.xml saya dengan jenis frontend "tombol".

Apakah ada yang tahu bagaimana caranya:

  • tambahkan label / nilai ke tombol
  • tambahkan kelas ke tombol
  • tambahkan metode untuk memanggil ketika tombol diklik

Terima kasih banyak atas bantuanmu !

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

12
2018-06-16 14:53


asal


Jawaban:


Catatan: karena pertanyaan ini, Magento telah berevolusi. Ketahuilah bahwa solusi ini mungkin tidak berfungsi di versi saat ini.

Anda harus mencoba menambahkan <frontend_model></frontend_model>. Sebagai contoh :

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

Dan kemudian buat aplikasi / kode / lokal / Foo / Bar / Blok / Button.php di mana Anda akan menyalin:

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

Terima kasih untuk phy4me.

Untuk lebih memahami apa yang terjadi baca sumber inti: app/code/core/Mage/Adminhtml/Block/System/Config/Form.php itu initForm() fungsi dan initFields() fungsi.

Hugues.

edit: Saya menghapus topi edit: mengoreksi kesalahan ejaan


17
2018-06-16 22:17



Jawaban Hugues melakukan trik. Satu hal yang harus diperhatikan meskipun adalah bahwa tindakan frontend_model tidak harus memiliki topi.

Ini pasti

<frontend_model>bar/button</frontend_model>

dari pada

<frontend_model>Bar/Button</frontend_model>

Jadi inilah yang saya lakukan untuk membuat semuanya berjalan dalam proses admin-wide.

1) Mengikuti instruksi yang dinyatakan oleh Hugues (sekali lagi, hati-hati jangan meletakkan topi di panggilan frontend_model)

2) Dalam aplikasi / kode / lokal / Foo / Bar / Blok / Button.php, mengubah definisi $ url untuk membuatnya memanggil pengontrol admin dari modul Foo_Bar

$url = $this->getUrl('bar/adminhtml_controller/action');

3) Membuat / mengedit tindakan pengontrol admin Foo_Bar yang saya sebut metode yang diinginkan dengan

Mage::getModel('bar/block')->method();

dan menambahkan redirect ke area adminhtml yang saya inginkan pengguna untuk dialihkan (bagian operator konfigurasi dalam kasus saya):

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

Dan semuanya mengalir!

Terima kasih lagi ...!


5
2018-06-17 10:18