miguelangelss4 Posted June 27, 2018 Share Posted June 27, 2018 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 More sharing options...
miguelangelss4 Posted June 27, 2018 Author Share Posted June 27, 2018 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 More sharing options...
miguelangelss4 Posted July 2, 2018 Author Share Posted July 2, 2018 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now