Bonjour à tous !
Je lis beaucoup sur ce forum mais j'aurais aujourd'hui une petite question technique dont je n'ai pas reussi à trouver réponse pour le moment.
Je suis en train de créer un module prestashop pour une entreprise qui est en prestashop 1.7.8.11. J'utilise le noyau Legacy et j'ai un probleme pour l'affichage d'une grille dans le backoffice. En effet, au lieu de ma grille, j'ai seulement le code html qui la compose.
Le but de ce controleur est d'afficher une liste des données d'une table installée par le module (données d'un registre).
Le module installe un nouvel onglet lié à un AdminController nommé AdminLotRegisterOut.
J'ai un objectModel de la table dans mon dossier classes:
<?php // ObjectModel pour la table ps_lot_register_out class LotRegisterOut extends ObjectModel { public $id_lot_register_out; public $date; public $exit_reason; public $document_number; public $id_customer; public $id_supplier; public $society; public $name; public $address; public $zip_code; public $city; public $country; public $specimen; public $lot_number; public $identification; public $quantity; public $deleted; public static $definition = [ 'table' => 'lot_register_out', 'primary' => 'id_lot_register_out', 'fields' => [ 'date' => ['type' => self::TYPE_DATE, 'validate' => 'isDate', 'required' => true], 'exit_reason' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'required' => true], 'document_number' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 20], 'id_customer' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], 'id_supplier' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], 'society' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], 'name' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], 'address' => ['type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 255], 'zip_code' => ['type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 10], 'city' => ['type' => self::TYPE_STRING, 'validate' => 'isCityName', 'size' => 255], 'country' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], 'specimen' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml'], 'lot_number' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], 'identification' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 30], 'quantity' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => true, 'default' => 0], 'deleted' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'default' => 0], ], ]; public function fillFields($data) { foreach ($data as $field => $value) { if (property_exists($this, $field)) { $this->$field = $value; } } } public static function markAsDeletedByReference($reference) { $db = Db::getInstance(); return $db->update( 'lot_register_out', ['deleted' => 1], 'document_number = "' . pSQL($reference) . '"' ); } public static function exists($documentNumber, $lotNumber, $specimen) { $db = Db::getInstance(); $query = new DbQuery(); $query->select('id_lot_register_out') ->from('lot_register_out') ->where('document_number = "' . pSQL($documentNumber) . '"') ->where('lot_number = "' . pSQL($lotNumber) . '"') ->where('specimen = "' . pSQL($specimen) . '"') ->where('deleted = 0'); return (bool)$db->getValue($query); } }
Et voici le contenu de mon controlleur :
<?php require_once _PS_MODULE_DIR_ . '/lotmanager/classes/LotRegisterOut.php'; class AdminLotRegisterOutController extends ModuleAdminController { public function __construct() { $this->bootstrap = true; $this->table = LotRegisterOut::$definition['table']; $this->identifier = LotRegisterOut::$definition['primary']; $this->className = LotRegisterOut::class; parent::__construct(); $this->fields_list = [ 'id_lot_register_out' => [ 'title' => $this->l('ID'), 'align' => 'center', 'width' => 25, ], 'exit_reason' => [ 'title' => $this->l('Motif'), 'search' => false, ], 'document_number' => [ 'title' => $this->l('Document'), 'width' => 25, ], 'society' => [ 'title' => $this->l('Société'), 'width' => 120, ], 'name' => [ 'title' => $this->l('Nom'), 'width' => 120, ], 'address' => [ 'title' => $this->l('Adresse'), 'width' => 120, ], 'zip_code' => [ 'title' => $this->l('Code postal'), 'width' => 120, ], 'city' => [ 'title' => $this->l('Ville'), 'width' => 120, ], 'country' => [ 'title' => $this->l('Pays'), 'width' => 80, ], 'specimen' => [ 'title' => $this->l('Espèce'), 'width' => 120, ], 'lot_number' => [ 'title' => $this->l('Numéro de lot'), 'width' => 120, ], 'identification' => [ 'title' => $this->l('Identification'), 'width' => 120, ], 'quantity' => [ 'title' => $this->l('Quantité'), 'width' => 120, ], 'date' => [ 'title' => $this->l('Date'), 'type' => 'date', ], ]; } }
Du coup j'ai mis l'image de l'affichage que cela donne dans le backoffice mais je ne comprends pas pourquoi la grille ne s'affiche pas correctement. J'ai une erreur de type Symfony\Component\Debug\Exception\ContextErrorException: Notice: Undefined index: content_id in mais je ne comprends pas trop ce que je ne respecte pas (c'est la premiere fois que je dois faire apparaitre une grille en backoffice).
Est-ce que certains d'entre vous ont deja été confrontés à ce genre d'erreur?
Merci par avance de votre aide 🙂
Denis