Jump to content

Recommended Posts

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

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

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

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

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

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

 

  1. CREATE TABLE `ps_et_ticketsrange` (
  2. `id_et_ticketsrange` int(11) NOT NULL AUTO_INCREMENT,
  3. `num_inicial` int(11) NOT NULL,
  4. `num_final` int(11) NOT NULL,
  5. `type` varchar(255) NOT NULL,
  6. `active` tinyint NOT NULL
  7. ) 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

  • Like 1
Link to comment
Share on other sites

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 by dani.k2asoft (see edit history)
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...