Jump to content

Problema añadiendo columna tipo "activo" en módulo Form Builder Pro


Recommended Posts

Hola a todos,

estoy teniendo problemas añadiendo una columna en un módulo de la tienda. El módulo es Form Builder Pro, y la idea es añadir una columna en la lista de datos recibidos para indicar si están procesados o no.

La columna la he añadido perfectamente añadiendo al array $this->fields_list (/modules/gformbuilderpro/controllers/admin/AdminGformrequestController.php):

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

También he tocado el modelo correspondiente, añadiendo mi campo (/modules/gformbuilderpro/classes/gformrequestModel.php):

public static $definition = array(
        'table' => 'gformrequest',
        'primary' => 'id_gformrequest',
        'multilang' => false,
        'fields' => array(
            //Fields
            'id_gformbuilderpro' =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'user_ip'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'sendto'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'approbed' => array('type' => self::TYPE_INT, 'validate' => 'isBool'),//mi campo
            'subject'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'attachfiles' =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'jsonrequest' =>  array('type' => self::TYPE_HTML,'validate' => 'isCleanHtml'),
            'request' => 	array('type' => self::TYPE_HTML,'validate' => 'isCleanHtml'),
            'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
        )
    );

Hasta aquí, bien. Pero en la columna me salen un motón de 1 y 0 en función de si he marcado cada fila como aprobada o no. Esto queda un poco feo y quería cambiarlo por una columna al estilo de la columna activo en la lista de productos, de forma que se puedan activar/desactivar directamente desde esta lista, y ahí es donde me quedo bloqueado.

De todo lo que he probado, lo que mejor pinta tiene es dejar el controller así:

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'active' => 'status',//ultimo añadido
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

Que al menos saca en vez de 0 y 1 en la lista las aspas rojas y checks verdes, pero al pulsar en cualquiera recibo el error:

property "active" is missing in object gformrequestModel

Además de eso, al poner el cursor sobre las aspas sale un cartel que dice "Inactivo" y sobre los checks "Activo", y también me gustaría cambiar ese texto. Si pongo:

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'approbed' => 'status',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

Vuelve a sacar la columna con 0 y 1.

Otras opciones probadas han sido:

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'active' => 'approbed',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'approbed' => 'approbed',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
				'ajax' => true
			),

La última del ajax muestra bien los checks/aspas pero al pulsarlas no hace absolutamente nada, simplemente muestra un error por consola diciendo que no existe la acción, pero no sé cómo añadir esta función al controller...

Link to comment
Share on other sites

Hola de nuevo,

he intentado cambiar a hacerlo mediante Ajax y tampoco soy capaz:

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'active' => 'approbed',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed',
				'ajax' => true
			),

Y:

	public function ajaxProcessapprobed(){
		$result = new stdClass();
		$result->success = true;
		$result->sql = "";
		$approbed = 1;
		$result->text = $this->l("Successful update");
		
		try{			
			$result->sql = "UPDATE "._DB_PREFIX_."gformrequest SET approbed = $approbed WHERE id_gformrequest = ".$_POST['id_gformrequest']." LIMIT 1;";
			
			if (!Db::getInstance()->Execute($result->sql))
				$result->success = false;
		}
		catch(Exception $e){
			$result->success = false;
			$result->text = $e->getMessage();
		}
		
		die(Tools::jsonEncode($result));
	}

Más adelante tendré que ver cómo hacer que $approbed recoja el valor en función de si se pulsa el check o el aspa, pero de momento estoy con eso. Recibo este error:

Quote

Uncaught TypeError: Cannot read property 'success' of null
    at Object.success (index.php?controller=AdminGformrequest&token=9188543a081c3b2c2a412c3df982215b:950)
    at j (jquery-1.11.0.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-1.11.0.min.js:2)
    at x (jquery-1.11.0.min.js:4)
    at XMLHttpRequest.b (jquery-1.11.0.min.js:4)
(anonymous) @ index.php?controller=AdminGformrequest&token=9188543a081c3b2c2a412c3df982215b:950
j @ jquery-1.11.0.min.js:2
fireWith @ jquery-1.11.0.min.js:2
x @ jquery-1.11.0.min.js:4
b @ jquery-1.11.0.min.js:4
XMLHttpRequest.send (async)
send @ jquery-1.11.0.min.js:4
ajax @ jquery-1.11.0.min.js:4
n.(anonymous function) @ jquery-1.11.0.min.js:4
(anonymous) @ index.php?controller=AdminGformrequest&token=9188543a081c3b2c2a412c3df982215b:949
dispatch @ jquery-1.11.0.min.js:3
r.handle @ jquery-1.11.0.min.js:3

En esta línea:

if (data.success == 1) {

Ya que el objeto data me llega siempre a null... 

Link to comment
Share on other sites

Hola,

finalmente he podido conseguir esto. Faltaban un par de funciones en el controller.

 

Todo queda finalmente así.

/modules/gformbuilderpro/controllers/admin/AdminGformrequestController.php (añadiendo esto a la definición de los campos en el array $this->fields_list)

			'approbed' => array(
				'title' => $this->l('Approbed'),
				'type' => 'bool',
				'active' => 'approbed',
				'width' => 'auto',
				'orderby' => false,
				'filter_key' => 'a!approbed'
			),

En el mismo archivo, añadir estas funciones:

	public function initProcess()
    {
        parent::initProcess();
        if (Tools::isSubmit('approbed'.$this->table) && Tools::getValue($this->identifier)) {
            $this->action = 'approbed';			
        }
    }
    public function processApprobed(){
        if (Validate::isLoadedObject($object = $this->loadObject())) {
            $object->approbed = !$object->approbed;
            $object->update(false);
        }
    }

En el modelo, añadir la variable para mi columna, en este caso approbed:

class gformrequestModel extends ObjectModel
{
    public $id_gformrequest;
    public $id_gformbuilderpro;
    public $user_ip;
    public $subject;
    public $sendto;
	public $approbed = 0;//msolla
    public $request;
    public $attachfiles;
    public $jsonrequest;
    public $date_add;
    public static $definition = array(
        'table' => 'gformrequest',
        'primary' => 'id_gformrequest',
        'multilang' => false,
        'fields' => array(
            //Fields
            'id_gformbuilderpro' =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'user_ip'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'sendto'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'approbed' => array('type' => self::TYPE_INT, 'validate' => 'isBool'),//msolla
            'subject'  =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'attachfiles' =>  array('type' => self::TYPE_STRING,'validate' => 'isString'),
            'jsonrequest' =>  array('type' => self::TYPE_HTML,'validate' => 'isCleanHtml'),
            'request' => 	array('type' => self::TYPE_HTML,'validate' => 'isCleanHtml'),
            'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
        )
    );

Y con esto ya estaría la columna, y sus valores se actualizan al ser pulsada el aspa/check.

Lo que no he conseguido cambiar es el literal que aparece al pasar el cursor por encima.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...