Jump to content

Filtrer les commandes par transporteur (prestashop 1.6)


Recommended Posts

Bonjour à tous, 

 

je cherche à rajouter un filtre par type de transporteur dans mon back office, du coup j'ai cherché un peu partout pour pouvoir le faire mais je n'ai pas trouvé pour la dernière mouture de prestashop. 

 

Je sais ou ça se passe je vois le principe mais mes connaissances en dev sont nulles et je ne sais pas comment faire. En sachant que je n'ai pas besoin de filtrer par pays et je me suis dit que je pouvais remplacer le filtre par pays par le filtre par transporteur. 

 

Si quelqu'un à une solution je vous en serais très reconnaissant :)

merci d'avance

 

 

Link to comment
Share on other sites

Bonjour,

 

Le principe est donc de surcharger la méthode __construct() pour y ajouter à l'array $this->fields_list un tableau comportant le nom du transporteur.

Cet array est directement tiré d'une requête SQL (il faudra donc surcharger la variable $this->_select et $this->_join pour y ajouter les transporteurs)

 

Vous pouvez vous baser sur la fonction __construct de la class AdminOrdersControllerCore

  • Like 1
Link to comment
Share on other sites

Bonjour Nowis et merci pour votre aide.

Pour être totalement franc avec vous je suis dans le brouillard le plus complet car comme je le disais je n'y connais pas grand chose et meme si je vois le principe je ne sais pas comment le réaliser... 

 

Merci

Link to comment
Share on other sites

  • 10 months later...

Boujour,

 

Pour surcharger un contrôleur vous devez vous rendre dans votre-site/override/controllers/admin

 

Dans ce dossier créer un fichier AdminOrdersController.php et puis y mettre ceci

<?php

class AdminOrdersController extends AdminOrdersControllerCore
{
	public function __construct()
	{
		parent::__construct();
		$this->_select .= ', ca.name as carrier_name';
		$this->_join .= ' LEFT JOIN `'._DB_PREFIX_.'carrier` ca ON (ca.`id_carrier` = a.`id_carrier`)';
		$this->fields_list['carrier_name'] = array(
			'title' => $this->l('Transporteur'),
			'width' => 200,
			'callback' => 'transporteur'
		);
	}
        public function processFilter()
	{
		parent::processFilter();
		$this->_filter = str_replace('`carrier_name`', 'ca.name', $this->_filter);
	}
	public function transporteur($carrier_name)
	{
		if (strpos(strtolower($carrier_name), 'colissimo') !== FALSE)
			return '<span style="color: #006a32;">' . $carrier_name . '</span>';
		else
			return $carrier_name;
	}
}

Vidé le cache de presta et voila !  :)

  • Like 1
Link to comment
Share on other sites

  • 4 years later...

Bonjou

On 2/3/2016 at 2:17 PM, AlexanderOs said:

Boujour,

 

Pour surcharger un contrôleur vous devez vous rendre dans votre-site/override/controllers/admin

 

Dans ce dossier créer un fichier AdminOrdersController.php et puis y mettre ceci


<?php

class AdminOrdersController extends AdminOrdersControllerCore
{
	public function __construct()
	{
		parent::__construct();
		$this->_select .= ', ca.name as carrier_name';
		$this->_join .= ' LEFT JOIN `'._DB_PREFIX_.'carrier` ca ON (ca.`id_carrier` = a.`id_carrier`)';
		$this->fields_list['carrier_name'] = array(
			'title' => $this->l('Transporteur'),
			'width' => 200,
			'callback' => 'transporteur'
		);
	}
        public function processFilter()
	{
		parent::processFilter();
		$this->_filter = str_replace('`carrier_name`', 'ca.name', $this->_filter);
	}
	public function transporteur($carrier_name)
	{
		if (strpos(strtolower($carrier_name), 'colissimo') !== FALSE)
			return '<span style="color: #006a32;">' . $carrier_name . '</span>';
		else
			return $carrier_name;
	}
}

Vidé le cache de presta et voila !  :)

Merci pour cette astuce mais j'ai cette erreur :

Column 'id_carrier' in field list is ambiguous

Link to comment
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
×
×
  • Create New...