Denis67 Posted January 18 Share Posted January 18 (edited) 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 Edited January 24 by Denis67 (see edit history) Link to comment Share on other sites More sharing options...
Prestashop Addict Posted January 20 Share Posted January 20 Hi, missing method initContent(), sample below: // Method to send template path to smarty and define the content public function initContent(){ parent::initContent(); // init your smarty variables $header = $this->context->smarty->fetch(_PS_MODULE_DIR_ . 'mymodule/views/templates/admin/header.tpl'); $footer = $this->context->smarty->fetch(_PS_MODULE_DIR_ . 'mymodule/views/templates/admin/footer.tpl'); $this->context->smarty->assign(array( 'content' => $header . $this->content . $footer )); } Link to comment Share on other sites More sharing options...
Denis67 Posted January 23 Author Share Posted January 23 Problème identifié, j'avais un template content.tpl dans le dossier admin de mes templates du module. Ce fichier ne servait plus car je l'avais créé pour un test et visiblement il surchargeait le content.tpl natif de prestashop. J'avais donc cette erreur 🙂 Merci! Link to comment Share on other sites More sharing options...
Prestashop Addict Posted January 23 Share Posted January 23 N'oubliez pas de mettre [RESOLU] dans le titre et un Thanks est apprécié sur la bonne solution pour aider les autres utilisateurs. 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