Trigger onAfterOrderUpdate

  • Posts: 454
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
6 years 2 months ago #298231

-- HikaShop version -- : 3.5.1
-- Joomla version -- : 3.8.12
-- PHP version -- : 7.3

Bonjour,

j'essaye d'utiliser le trigger onAfterOrderUpdate ... le début est difficile.
Voici mon code :

<?php

defined('_JEXEC') or die('Restricted access');

class plgHikashopTest extends hikashopPlugin
{
	
	function onAfterOrderUpdate(&$order,&$send_email) {
	
		$config =& hikashop_config();
		$confirmed = $config->get('order_confirmed_status');
		$orderClass= hikashop_get('class.order');
		$orderInDb = $orderClass->loadFullOrder($order->order_id);

		if(!isset($order->order_status))
			return true;
		if(!empty($order->order_type) && $order->order_type != 'sale')
			return true;
		if($order->order_status != $confirmed) {
			return true;
		}
		if(isset($order->old->order_status) && $order->old->order_status == $confirmed) {
			return true;
		}

		if($order->order_status == $confirmed){
			
			// mon action toute simple pour tester

		}

	}
	
}

Mon action n'est pas lancée. L'erreur est surement absurde mais c'est la première fois que j'utilise un trigger hikashop donc pas toujours facile de se lancer :)

Merci d'avance
Cordialement

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 2 months ago #298251

Bonjour,

Le code me semble pas mal.
Mais déjà, faites un essai avec un var_dump('test');exit; au début de la fonction onAfterOrderUpdate et changez le statut de la commande dans le backend.
Si l'interface réagi normalement, c'est que la fonction n'est pas appelée. Dans ce cas, c'est un soucis au niveau de Joomla. Par exemple, le nom de la class de votre plugin ne correspond pas à ce que vous avez mis dans le XML du plugin, ou vous n'avez pas installé le plugin, ou vous ne l'avez pas activé.
Si vous voyez un changement, c'est que la fonction est appelée. Notez aussi le troisième paramètre de la fonction loadFullOrder si vous ne le mettez pas à false, alors les données de la commande ne seront chargées que si vous êtes dans le backend ou si le changement de statut s'éffectue suite à une action directe de l'utilisateur. Par exemple, une notification de commande envoyée par une plateforme de paiement qui changerait le statut de la commande doit impérativement avoir ce paramètre à true. Sinon, le chargement des données sera refusé.

Please Log in or Create an account to join the conversation.

  • Posts: 454
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
6 years 2 months ago #298269

Bonjour,

merci pour la réponse. J'ai fait les tests, et sans même installer mon plugin, lorsque je passe une commande en confirmée dans le backend, j'ai le message suivant :

Une erreur s'est produite
0 Call to a member function setQuery() on null

La commande passe quand même en confirmée. Ensuite que mon plugin soit installé ou non, aucune différence.

J'ai regardé un peu les autres plugins hikashop et je ne vois pas ou le nom de class est déclaré dans le XML.

J'ai fait un test tout bête :
Si je mets le test var_dump('test');exit; dans la fonction onAfterOrderUpdate du plugin "group", ca fonctionne, j'ai donc bêtement pris ce plugin, renommé en group2 les fichiers, ainsi que le nom dans la ligne "<filename plugin="group2">group2.php</filename>", gardé juste la fonction onAfterOrderUpdate et le test, et ca ne fonctionne pas. Pourtant c'est une copie conforme de l'autre plugin qui fonctionne. (il est bien installé et activé)

Cordialement

Last edit: 6 years 2 months ago by Minie.

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 2 months ago #298274

Bonjour,

1. Concernant l'erreur "0 Call to a member function setQuery() on null", il faut que vous activiez l'option "error reporting" et l'option "debug mode" de la configuration Joomla. Cela affichera plus d'information sur l'erreur ce qui vous permettra de savoir d'où vient le soucis.

2. Vous avez dû oublié de renommer la classe dans le fichier PHP de votre group2 plugin.

Please Log in or Create an account to join the conversation.

  • Posts: 454
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
6 years 2 months ago #298305

Bonjour,

1. Avec le rapport d'erreur en mode developpement, ca donne ceci en plus : (c'est après avoir passé la commande en confirmée dans le backend, lors de la demande de notification par mail du client)



2. Pourtant non c'est pour cela que je suis étonnée, je l'ai renommée "plgHikashopGroup2".

Par contre, si je retire le "2", il trouve la class puisqu'il déclare le doublon sur la page listing des commandes du backend avec une erreur :
Fatal error: Cannot declare class plgHikashopGroup, because the name is already in use in mon_chemin_serveur/plugins/hikashop/group2/group2.php on line 11

Si je laisse mon 2 et que je fais un echo test; en dehors de la fonction (juste dans la class) il la trouve aussi puisqu'il m'indique une erreur en page d'accueil du backend.

Mais si je la fait normal avec le code suivant, aucune réaction, alors que si je met le var_dump('test');exit; dans la fonction onAfterOrderUpdate du vrai plugin group, il me montre le test après la demande de notification client.

En gros mon plugin fonctionne dans plein de cas, sauf le cas normal que je souhaite :(

Voici le plugin complet (pour le peu qu'il contient):
Fichier XML
<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5" method="upgrade" group="hikashop">
	<name>Hikashop Group2 Plugin</name>
	<creationDate></creationDate>
	<version></version>
	<author></author>
	<authorEmail></authorEmail>
	<authorUrl></authorUrl>
	<copyright></copyright>
	<license></license>
	<description></description>
	<files>
		<filename plugin="group2">group2.php</filename>
	</files>
</extension>

Fichier PHP
<?php

defined('_JEXEC') or die('Restricted access');

class plgHikashopGroup2 extends hikashopPlugin
{
	
	function onAfterOrderUpdate(&$order,&$send_email) {
		var_dump('test');exit;
	}
}

Je peux pas faire plus épuré, et pourtant ...

Cordialement

Attachments:
Last edit: 6 years 2 months ago by Minie.

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 2 months ago #298307

Bonjour,

1. Vous avez personnalisé la version texte de l'email "notification de statut de commande" via le menu Système>Emails, en y rajoutant une requête MySQL avec une erreur dans le PHP. C'est surement pour cela que votre plugin "ne fonctionne pas", car cela crash lors de l'envoi de l'email durant le changement de statut.

2. C'est peut être à cause du problème mentionnée dans le point 1. Car sinon je ne vois pas de soucis avec le code que vous fournissez.

Please Log in or Create an account to join the conversation.

  • Posts: 454
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
6 years 2 months ago #298360

Bonjour,

En effet mon code de modification était obsolète mais le mail modifié était désactivé donc je n'y ai pas pensé. J'ai refais un test, le var_dump('test');exit; apparaît bien après avoir accepté l'envoi du mail après confirmation de commande.

Merci beaucoup, je peux enfin passer à la suite.

Cordialement

Please Log in or Create an account to join the conversation.

Time to create page: 0.055 seconds
Powered by Kunena Forum