2010-06-16 15 views
12

He creado un módulo que tiene un método de "exportación similar" que se ejecuta regularmente como se define en el área cron de mi módulo del archivo config.xml. Pero me gustaría dar al usuario la capacidad de ejecutar este método de exportación a pedido agregando un botón "Ejecutar ahora" en la configuración del sistema, utilizando así el archivo system.xml.Magento: agregue un botón a system.xml con el método adjunto

Parece que el botón "tipo de interfaz" puede estar funcionando como lo he intentado y agrega un pequeño botón que hace clic en la sección de configuración. Pero no puedo adjuntar un método ni una etiqueta en el botón.

Pensé en agregar un botón en el archivo "Grid.php" del módulo pero esto no es lo que me gustaría hacer ya que encaja con mi acl.

A continuación se muestra mi archivo system.xml con el tipo de interfaz de "botón".

¿Alguien tiene una idea de cómo:

  • añadir una etiqueta/valor al botón
  • agregar una clase al botón
  • añadir un método a llamar cuando se hace clic en el botón

Muchas gracias por su ayuda!

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

Respuesta

17

Nota: desde esta pregunta, Magento ha evolucionado. Tenga en cuenta que esta solución puede no funcionar en las versiones actuales.

Debería intentar agregar un <frontend_model></frontend_model>. Por ejemplo:

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

y luego crear app/código/local/foo/bar/Bloquear/button.php en el que duraran copiar:

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

Gracias a phy4me.

Para comprender mejor lo que está sucediendo, lea las fuentes principales: app/code/core/Mage/Adminhtml/Block/System/Config/Form.php la función initForm() y la función initFields().

Hugues.

editar: He quitado las tapas edición: Se ha corregido un error de ortografía

5

Hugues respuesta hizo el truco. Una cosa a tener en cuenta es que la acción frontend_model no debe tener topes.

Ésta debe ser

<frontend_model>bar/button</frontend_model> 

en lugar de

<frontend_model>Bar/Button</frontend_model> 

Así que aquí es lo que hice para que el conjunto funcione en un proceso de toda la administración.

1) siguió las instrucciones indicadas por Hugues (una vez más, tenga cuidado de no poner tapas en la llamada frontend_model)

2) en APP/código/local/foo/bar/Bloquear/button.php, cambiado la definición $ url para hacer que llamar a un controlador de administración del módulo foo_bar

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

3) crear/editar la acción del controlador de administración foo_bar en la que he llamado el método deseado con

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

y ha añadido una redirección a la zona adminhtml a la que quería que el usuario sea redireccionado (sección portadores de configuración en mi caso):

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

Y todo fluye!

Gracias de nuevo ...!

+0

Gracias, necesitaba esto. – Strawberry

Cuestiones relacionadas