[Prestashop] Afficher/cacher certaines informations dans mon-compte

Quand on accède à la page mon compte de prestashop, il y a une liste avec des liens renvoyant vers différentes pages, notamment vers la page commandes, avoirs, bons de réduction, adresses…

Les onglets avoirs et bons de réduction n’ont pas forcément d’intérêt si le client n’a jamais eu d’avoir ou de bon de réduction. Cela peut même prêter à confusion…

On ne va donc afficher les onglets « avoirs » et « bons de réduction » que si le client en possèdent.

Pour cela, on va travailler sur le fichier controller de my-account.tpl.

Il se trouve à l’adresse: /controllers/front/MyAccountController.php

/! ATTENTION : il faut surcharger ce fichier afin de ne pas perdre des modifications lors d’une mise à jour /!

Il faut donc récupérer ce fichier et le placer dans /override/controllers/front/

Remplacez ensuite

class MyAccountControllerCore extends FrontController{

Par

class MyAccountController extends MyAccountControllerCore{

Dans la fonction public function process(){

Rajoutez :

global $cookie;
$orderslip = OrderSlip::getOrdersSlip($cookie->id_customer);
if(empty($orderslip)) $avoirs = 0;
else $avoirs = 1;
self::$smarty->assign('avoirs',$avoirs);

En fait dans cette surcharge, vous pouvez ne laisser que les lignes qui nous intéresse, soit :

class MyAccountController extends MyAccountControllerCore{
	/**
	 * Assign template vars related to page content
	 * @see FrontController::initContent()
	 */
	public function initContent(){
		parent::initContent();
		global $cookie;
		$orderslip = OrderSlip::getOrdersSlip($cookie->id_customer);
		if(empty($orderslip)) $avoirs = 0; else $avoirs = 1;
		$this->context->smarty->assign(array('avoirs' => $avoirs,));
	}
}

Ensuite, on va insérer une condition dans le fichier TPL disant que si $avoirs différent de zéro c’est qu’il y a au moins un avoir.
Dans le fichier themes/mon_theme/my-account.tpl, on va donc remplacer :

  • getPageLink('order-slip.php', true)}" title="{l s='Credit slips'}">{l s='Credit slips'}getPageLink('order-slip.php', true)}" title="{l s='Credit slips'}">{l s='My credit slips'}

    Par :

    {if $avoirs != 0}la ligne ci-dessus...{/if}

    Voilà pour les avoirs. Pour les bons de remise, on peux utiliser la même méthode. Dans le même fichier controller PHP que l'on a modifié, à la suite vous rajoutez:

    $discounts=Discount::getCustomerDiscounts($cookie->id_lang,$cookie->id_customer);
    if(empty($discounts)) $remise = 0;
    else $remise = 1;
    self::$smarty->assign('remise',$remise);

    Et vous faites la même condition dans le tpl sur la ligne du lien bons de réduction avec une condition cette fois sur $remise.

    Ainsi chaque fois qu'un client se connectera sur son compte client, les lignes avoirs et bons de réduction n'apparaîtront que si le client a effectivement un avoir ou un bon de réduction.

    Cette astuce a été testée sur Prestashop 1.4 & 1.5.6