PrestashopUser03 Posted January 27, 2021 Share Posted January 27, 2021 (edited) Bonjour à tous, Je suis en train de créer un admin controller pour mon module et je voudrais savoir comment créer une valeur personnalisée (donc pas issu de la bdd) pour un des champs de ma fields_list. Le bout de code ci-dessous fonctionne très bien, j'ai bien la liste des champs qui apparait, et les filtres qui fonctionnent très bien. class AdminHbaAbonnementController extends ModuleAdminController { public function __construct(){ parent::__construct(); // Base $this->bootstrap = true; // use Bootstrap CSS $this->table = 'hb_atelier_abonnement'; // SQL table name, will be prefixed with _DB_PREFIX_ $this->identifier = 'hb_atelier_abonnement_id'; // SQL column to be used as primary key $this->className = 'Abonnement'; // PHP class name $this->allow_export = true; // allow export in CSV, XLS.. $this->name="test"; $this->_defaultOrderBy = 'hb_atelier_abonnement_id'; // the table alias is always `a` $this->_defaultOrderWay = 'DESC'; $this->actions=array('view'); $this->fields_list = [ 'hb_atelier_abonnement_id' => ['title' => 'ID','class' => 'fixed-width-xs'], 'hb_atelier_abonnement_type_velo' => ['title' => 'Type de vélo'], 'hb_atelier_abonnement_client_nom' => ['title' => 'Nom'], 'hb_atelier_abonnement_client_prenom'=>['title' => 'Prénom'], 'hb_atelier_abonnement_date_debut' => ['title' => 'Date de début', 'type'=>'datetime'], 'hb_atelier_abonnement_date_fin' => ['title' => 'Date de fin', 'type'=>'datetime'], 'valeur_personnalisee'=>['title'=>'action', VALEUR PERSONNALISEE ICI], ]; } } Merci d'avance pour vos réponses. Edited January 28, 2021 by PrestashopUser03 (see edit history) Link to comment Share on other sites More sharing options...
hhennes Posted January 28, 2021 Share Posted January 28, 2021 (edited) Bonjour, Il faut rajouter une option 'callback' dans votre colonne qui spécifique la fonction php qui va être appellée pour chaque élément. Si cette fonction n'est pas définie dans votre controller il faut également renseigner une option 'callback_object' avec la classe dans laquelle est située la fonction. Ce point est visible ici : https://github.com/PrestaShop/PrestaShop/blob/develop/classes/helper/HelperList.php#L372 Edited January 28, 2021 by hhennes (see edit history) Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted January 28, 2021 Author Share Posted January 28, 2021 (edited) Bonjour, Je vous remercie pour votre réponse (et aussi pour la série d'articles sur les admin controller très instructive), j'ai tenté un callback mais sans succès : class AdminHbaAbonnementController extends ModuleAdminController { public function __construct(){ parent::__construct(); // Base $this->bootstrap = true; // use Bootstrap CSS $this->table = 'hb_atelier_abonnement'; // SQL table name, will be prefixed with _DB_PREFIX_ $this->identifier = 'hb_atelier_abonnement_id'; // SQL column to be used as primary key $this->className = 'Abonnement'; // PHP class name $this->allow_export = true; // allow export in CSV, XLS.. $this->name="test"; $this->_defaultOrderBy = 'hb_atelier_abonnement_id'; // the table alias is always `a` $this->_defaultOrderWay = 'DESC'; $this->actions=array('view'); $this->fields_list = [ 'hb_atelier_abonnement_id' => ['title' => 'ID','class' => 'fixed-width-xs'], 'hb_atelier_abonnement_type_velo' => ['title' => 'Type de vélo'], 'hb_atelier_abonnement_client_nom' => ['title' => 'Nom'], 'hb_atelier_abonnement_client_prenom'=>['title' => 'Prénom'], 'hb_atelier_abonnement_date_debut' => ['title' => 'Date de début', 'type'=>'datetime'], 'hb_atelier_abonnement_date_fin' => ['title' => 'Date de fin', 'type'=>'datetime'], 'valeur_personnalisee'=>['title'=>'action','callback'=>'ceciestuntest'], ]; } public function ceciestuntest(){ return "test"; } } Qu'est-ce qui cloche dans mon code ? Edited January 28, 2021 by PrestashopUser03 (see edit history) Link to comment Share on other sites More sharing options...
hhennes Posted January 28, 2021 Share Posted January 28, 2021 Bonjour, Concernant la série d'articles sur le sujet ils sont partiellement finis , et c'est justement un des points que je n'ai documenté les callback ... 😕 J'en avais déjà fait il y'a longtemps mais je n'ai plus trouvé le module qui était lié. Est-ce que vous avez essayé sous cette forme ? callback doit être la clé de l'array et le nom de votre fonction sa valeur. class AdminHbaAbonnementController extends ModuleAdminController { public function __construct(){ //le reste du code $this->fields_list = [ 'valeur_personnalisee'=>['title'=>'action','callback'=>'ceciestuntest'], ]; } public function ceciestuntest(){ return "test"; } } Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted January 28, 2021 Author Share Posted January 28, 2021 Oui, j'ai essayé et ça ne marche pas, voilà ce qui apparait : Link to comment Share on other sites More sharing options...
hhennes Posted January 28, 2021 Share Posted January 28, 2021 (edited) OK j'ai trouvé pourquoi. En fait il faut que tu ai une valeur correspondant au nom de ta colonne dans tes résultats pour que le callback soit appellé. Du coup il est possible de faker cela en altérant la requête sql de base //Va rajouter une colonne avec une valeur de 1 pour la colonne action dans la requête de selection des infos. $this->_select .= "1 as action"; /** * Callback dans le listing * @param int $value * @param array $row * @return string */ public function ceciestuntest($value,$row){ return "test"; } Edited January 28, 2021 by hhennes (see edit history) 1 Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted January 28, 2021 Author Share Posted January 28, 2021 Super, je mets ça en résolu, ça marche nickel. 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