dani.k2asoft Posted June 15, 2016 Share Posted June 15, 2016 Buenos días, Seguramente son unas dudas bastante tontas pero necesito consultarlas a ver si me arrojáis un poco de luz. Tengo un módulo de prestashop que muestra en el admin una lista (Helper list) que tira de un controlador y tal. La tabla la rellena bien, pero a la hora de hacer "acciones" no funciona ninguna. Por ejemplo: añadir nuevo item, editar uno, eliminar, etc. Me he basado en otros ejemplos de módulos y no encuentro como asocian el modelo al controlador, en este caso yo creo que directamente no está reconociéndolo. ¿Alguien puede echarme una mano? Un saludo y gracias!! Link to comment Share on other sites More sharing options...
buhoplace Posted June 15, 2016 Share Posted June 15, 2016 Supongo que la lista estará en el renderView, o en el Controlador si solo tiene una View. Para asignar la lista, pon antes de generarla: $this->table = 'MYTABLA';$this->className = 'CLASE, EN CLASSES/MYCLASE'; Si te muestra la lista con las filas de tu tabla, ese no es el problema, si al darle a editar o añadir, te sale el formulario a rellenar, ese formulario lo genera el renderForm(), Si ese form no lo guarda, ahí estará el problema. Mira a ver si salta algún error , o simplemente es que al darle a editar o añadir, no sale dicho formulario? Link to comment Share on other sites More sharing options...
dani.k2asoft Posted June 15, 2016 Author Share Posted June 15, 2016 Buenas!! Los elementos de la tabla me los muestra sin problema, ya que en $this->table le he indicado la tabla. El problema está en que si en $this->className le indico la clase, cuando hago click en añadir, editar o eliminar me lleva a una página en blanco. Sin embargo si no le indico la clase, el renderForm si que me muestra el formulario de edición con los campos que yo le indico y tal en el controlador, pero no hace nada, ni guarda uno nuevo ni carga el elemento a editar ni nada. Link to comment Share on other sites More sharing options...
buhoplace Posted June 15, 2016 Share Posted June 15, 2016 Puedes poner tu codigo del controlador y clase aqui? Estas llamando a la funcion postProcess en algun momento? Y si es asi devuelves el parent?? Link to comment Share on other sites More sharing options...
dani.k2asoft Posted June 16, 2016 Author Share Posted June 16, 2016 Hola! No tenía puesta la función postProcess(), la he puesto como me has dicho y tampoco hace nada. Sigue fallando lo mismo, cuando tengo rellenado el className, directamente al hacer click en Add o edit de algun elemento me tira a pantalla en blanco o error 500. Sin embargo si no le indico clase, si que carga el formulario pero no hace nada, ni guarda ni modifica nada. El código de la clase es este: <?php class RangeCore extends ObjectModel { public $num_inicial; public $type; public $num_final; public $active = 0; public static $definition = array( 'table' => 'et_ticketsrange', 'primary' => 'id_et_ticketsrange', 'fields' => array( 'num_inicial' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'type' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32), 'num_final' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => true), 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false), ), ); } Y el código del controlador es este: <?php require_once (_PS_MODULE_DIR_ . '/eticket/classes/Range.php'); class AdminManageRangesController extends ModuleAdminController { public $module = 'eticket'; public function __construct() { $this->bootstrap = true; $this->table = 'et_ticketsrange'; $this->className = 'Range'; $this->lang = false; $this->addRowAction('edit'); $this->addRowAction('delete'); $this->_orderWay = 'DESC'; $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'),'icon' => 'icon-trash', 'confirm' => $this->l('Delete selected items?'))); $this->fields_list = array( //'id_et_ticketsrange' => array('title' => $this->l('ID'), 'align' => 'center', 'class' => 'fixed-width-xs'), 'num_inicial' => array('title' => $this->l('Número inicial'), 'align' => 'center', 'class' => 'fixed-width-xs'), 'num_final' => array('title' => $this->l('Número final'), 'align' => 'center', 'class' => 'fixed-width-xs'), 'type' => array('title' => $this->l('Tipo de Rango'), 'class' => 'fixed-width-sm'), 'active' => array('title' => $this->l('Estado'), 'active' => 'status', 'type' => 'bool', 'align' => 'center', 'class' => 'fixed-width-xs', 'orderby' => false), ); parent::__construct(); } public function renderForm() { // Building the Add/Edit form $this->fields_form = array( 'legend' => array( 'title' => $this->l('RANGO') ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Número inicial'), 'name' => 'num_inicial', 'size' => 33, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Número final'), 'name' => 'num_final', 'size' => 33, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Tipo de Rango'), 'name' => 'type', 'size' => 33, 'required' => true ) ), 'submit' => array( 'title' => $this->l(' Guardar '), 'class' => 'button' ) ); return parent::renderForm(); } public function postProcess(){ parent::postProcess(); } } ?> Por cierto, la tabla que hay en la base de datos y estoy utilizando es esta: CREATE TABLE `ps_et_ticketsrange` ( `id_et_ticketsrange` char(36) NOT NULL, `num_inicial` int(11) NOT NULL, `num_final` int(11) NOT NULL, `type` varchar(255) NOT NULL, `active` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Gracias por tu ayuda! Link to comment Share on other sites More sharing options...
buhoplace Posted June 16, 2016 Share Posted June 16, 2016 (edited) Hola, tu objeto Range.php, quitale el Core de la clase class Range extends ObjectModel, a mi con eso me funciono Edited June 16, 2016 by buhoplace (see edit history) 1 Link to comment Share on other sites More sharing options...
dani.k2asoft Posted June 16, 2016 Author Share Posted June 16, 2016 Gracias buhoplace, He cambiado el nombre de la clase de RangeCore a Range pero de todas formas al crear un elemento no me lo guarda, y al editar no me carga los datos ni me deja editar, tampoco eliminar. ¿Crees que me está faltando algo por implementar para que funcione el add/edit/remove? Link to comment Share on other sites More sharing options...
buhoplace Posted June 16, 2016 Share Posted June 16, 2016 Y la tabla, estaría mejor si el id lo pasas a int en vez de a char, y lo haces AUTOINCREMENT, y las booleanas, pasalas a tinyint CREATE TABLE `ps_et_ticketsrange` ( `id_et_ticketsrange` int(11) NOT NULL AUTO_INCREMENT, `num_inicial` int(11) NOT NULL, `num_final` int(11) NOT NULL, `type` varchar(255) NOT NULL, `active` tinyint NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Si no, verás que al guardar, no te añade un id a la primaria, y el tinyint ocupa menos ; http://dev.mysql.com/doc/refman/5.7/en/integer-types.html 1 Link to comment Share on other sites More sharing options...
buhoplace Posted June 16, 2016 Share Posted June 16, 2016 Tiene que estar dandote error en algún lado, tienes el modo desarrollador activado? Link to comment Share on other sites More sharing options...
dani.k2asoft Posted June 16, 2016 Author Share Posted June 16, 2016 (edited) Muchísimas gracias buhoplace!!!! Si, el error ahora me estaba marcando con ID duplicado, porque había creado uno y le estaba poniendo a todos el ID Vacío por el motivo que tu me has comentado antes. Ya he conseguido que funcione todo, al final creo que el mayor problema era el tema del id. Gracias por tu ayuda!! Edited June 16, 2016 by dani.k2asoft (see edit history) Link to comment Share on other sites More sharing options...
buhoplace Posted June 16, 2016 Share Posted June 16, 2016 Me alegro que funcione, un saludo! 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