Jump to content
xEL

afficher des informations dans un hook displayInvoice

Recommended Posts

Bonjour
 
Après des longs recherches sur les forum et le net avec aucune solution 
 
je m'adresse à vous pour petit aide concernant l'affichage du hook displayInvoice
actuellement je suis en cours de développer un module de paiement, la partie front office tous ce passe bien avec l'enregistrement de tout paiement effectue par un client.
 
Mon soucis c'est que je veux afficher dans le details commande en back-office  un hook displayInvoice contenant des informations sélectionner à partir d'une table
 
dans la classe module j'ai ajouté une function displayInvoice ci-desous
 

function displayInvoice($params)
{
$id_order = $params['id_order'];
 
global $smarty;
$paymentdetails = $this->readPaymentdetails($id_order);
 
$smarty->assign(array(
   'montant'          => $paymentdetails['montant'],
'email'        => $paymentdetails['emailclient'],
'status'        => $paymentdetails['status'],
'id_order' => $id_order,
'this_page' => $_SERVER['REQUEST_URI'],
'this_path' => $this->_path,
            'this_path_ssl' => Configuration::get('PS_FO_PROTOCOL').$_SERVER['HTTP_HOST'].__PS_BASE_URI__."modules/{$this->name}/"));
return $this->display(__FILE__, 'invoice_block.tpl');
 
}

la fonction displayInvoice fais appele à la fonction readPaymentdetails ci-dessous

function readPaymentdetails($id_order)
	{
		$db = Db::getInstance();
		$result = $db->ExecuteS('
		SELECT montant ,emailclient ,status FROM `ps_bingapaiement` b , `ps_orders` o 
				WHERE b.idcommande=o.id_cart AND o.id_order='.intval($id_order).'; ');
		return $result[0];
		
	}

le fichier invoice_block.tpl se trouve dans le même répertoire que le  fichier classe du module 

 

Merci d'avance

 

Share this post


Link to post
Share on other sites

Et, vu qu'il n'y a pas de suite au message, cela ne fonctionne pas ?

 

Quelle version de PrestaShop ? 1.4, je suppose ?

Share this post


Link to post
Share on other sites

Bonjour J.Danse

 

Je suis sur prestashop 1.5.4.0

 

et voila le code de mon fichier invoice_block.tpl

<fieldset style="width: 400px;">

	<legend>

     {l s='Informations details paiement'}

	</legend>

	<div id="info" border: solid red 1px;">
	<table>
	<tr><td>Montant:</td> <td>{$montant}</td></tr>
	<tr><td>Email:</td> <td>{$emailclient}</td></tr>
	<tr><td>Status:</td> <td>{$status}</td></tr>
	</table>
	</div>

</fieldset>
Edited by xEL (see edit history)

Share this post


Link to post
Share on other sites

Ah. J'ai supposé 1.4 car votre code est purement "1.4 like", c'est pour ça. Mais, ne vous tracassez pas, cela doit aussi fonctionner pour la 1.5.

 

Cependant, n'ayant pas le temps de faire un copier/coller de test voir le soucis, quel est ce dernier ? Je n'ai toujours pas lu le problème... Je présume, mais sans certitudes, qu'il n'y a pas d'affichage correspondant ?

 

Avez-vous vidé le cache (ou le désactiver, temporairement) éventuellement ?

Share this post


Link to post
Share on other sites

J'ai vidé le cache mais aucun block ne s'affiche au detail commande du back-office 

Share this post


Link to post
Share on other sites

dans la classe module j'ai ajouté une function displayInvoice ci-desous

donc tu as fait un override, mais je vois :

 

return $this->display(__FILE__, 'invoice_block.tpl');

et

 

le fichier invoice_block.tpl se trouve dans le même répertoire que le fichier classe du module

donc à mon avis ça va bloquer, il ne peut pas trouver ce fichier tpl

 

et ceci ne va pas fonctionner :

."modules/{$this->name}/"))

sauf si tu veux afficher {$this->name} en "clair"

 

une question toute bête, ton module est bien bien greffé sur le hook displayInvoice ?

 

pour finir, au lieu de faire : $result = $db->ExecuteS

et ensuite return $result[0]; il vaut mieux faire :

function readPaymentdetails($id_order)
	{
		return Db::getInstance()->getRow('
		SELECT `montant`, `emailclient`, `status` FROM `'._DB_PREFIX_.'_bingapaiement` b , `'._DB_PREFIX_.'_orders` o 
				WHERE b.`idcommande` = o.`id_cart` AND o.`id_order` = '.(int)$id_order);
		
		
	}
un peu de lecture : http://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/

 

et en 1.5 on évite les GLOBAL, donc tu peux changer $smarty->assign( par $this->smarty->assign( et supprimer global $smarty;

Share this post


Link to post
Share on other sites

Bonjour  coeos.pro

merci pour votre réponse 

 

oui effectivement mon module est bien greffé sur hook displayInvoice 

voilà mon code finale et ce dernier n'affiche rien :/

function displayInvoice($params)
	{
			$id_order = $params['id_order'];
 
			$paymentdetails = $this->readPaymentdetails($id_order);
 
			$smarty->assign(array(
			    'montant'  	        => $paymentdetails['montant'],
				'email' 		        => $paymentdetails['emailclient'],
				'status' 		        => $paymentdetails['status'],
				'id_order'					=> $id_order,
				'this_page'					=> $_SERVER['REQUEST_URI'],
				'this_path' 				=> $this->_path,
            	'this_path_ssl' 			=> Configuration::get('PS_FO_PROTOCOL').$_SERVER['HTTP_HOST'].__PS_BASE_URI__."modules/{$this->name}/"));
			return $this->display(__FILE__,"modules/{$this->name}/invoice_block.tpl");
 
	}
	
		function readPaymentdetails($id_order)
	{
		return Db::getInstance()->getRow('
		SELECT `montant`, `emailclient`, `status` FROM `'._DB_PREFIX_.'_bingapaiement` b , `'._DB_PREFIX_.'_orders` o 
				WHERE b.`idcommande` = o.`id_cart` AND o.`id_order` = '.(int)$id_order);
		
		
	}

Share this post


Link to post
Share on other sites

commencez par mettre une bonne url :

return $this->display(__FILE__, 'invoice_block.tpl");

et vous avez bien quelque chose comme :
 

	
public function install()
	{
	 	if (!parent::install() OR !$this->registerHook('displayInvoice'))
                     return false;

//suite éventuelle du code d'installation
} 

et vous avez essayé de mettre function hookdisplayInvoice($params) au lieu de function displayInvoice($params)

Share this post


Link to post
Share on other sites

Oui tout est réglé j'ai bien mis 


public function install()
{
if (!parent::install()
OR !$this->registerHook('displayInvoice')
OR !$this->registerHook('payment')
OR !$this->registerHook('paymentReturn'))
return false;
return true;
}

j'ai bien mis l'url mais au niveau de l'affichage rien ne s'affiche :/

Share this post


Link to post
Share on other sites

aucune réponse :/ sur je suis sur le points de rechercher page par page sur le forum avec aucune solution :/

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

×
×
  • Create New...

Important Information

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