Jump to content

[résolu]Valeur personnalisée dans fields_list


Recommended Posts

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 by PrestashopUser03 (see edit history)

Share this post


Link to post
Share on other sites

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 by hhennes (see edit history)

Share this post


Link to post
Share on other sites

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 by PrestashopUser03 (see edit history)

Share this post


Link to post
Share on other sites

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";
  }
}

 

Share this post


Link to post
Share on other sites

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 by hhennes (see edit history)
  • Thanks 1

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More