Jump to content

code html affiché à la place d'un renderList via un AdminController [RESOLU]


Recommended Posts

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

test.jpg

Edited by Denis67 (see edit history)
Link to comment
Share on other sites

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

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

  • Denis67 changed the title to code html affiché à la place d'un renderList via un AdminController [RESOLU]

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...