THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Salut,

J'ai créé dernièrement un plugin pour l'envoi d'un mail de confirmation lors de l'inscription d'un client.

J'ai vu que l'appel de ce plugin se faisait via :

Dans action.php :

modules_fonction("apresclient", $client);

Dans PluginsClassiques.class.php :

function apresclient(){}

Dans mon plugin :

function apresclient($client){}

Jusque là ok.

Je suis en train de faire un nouveau plugin qui se lancera au changement de statut de la commande.

Et là je remarque que l'appel se fait via :

Dans commande_details.php :

modules_fonction("statut", $commande);

Dans PluginsClassiques.class.php :

function statut($commande){}

Ma question finale est donc :
Pourquoi pour apresclient on appelle la fonction dans PluginsClassiques.class.php via :

function apresclient(){}

et non via :

function apresclient($client){}

et vice versa pour le changement de statut qui se fait via :

function statut($commande){}

et non via :

function statut(){}

?

Merci d'avance pour ces éclaircissements. ^^


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


il n'y a aucune explication rationnelle a vrai dire.

On définit juste les différents points d'entrée dans les fichiers PluginsClassiques, PluginsTransports, PluginsPaiements, après la surcharge fait le reste.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Ok wink


Aide les autres, ils t'aideront en retour.

Offline


Autre question :

Comment gérez vous l'utilisation de plusieurs tables dans un même plugin ?

Les requêtes se passent en dur ou bien vous utilisez

var $table1 = "table1";
var $table2 = "table2";

?

Last edited by Elyos (10-05-2009 15:14:47)


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


Quand je dois gérer plusieurs tables, je fais un fichier principal qui a le nom de mon plugin (Plugin.class.php). Ensuite pour les autres tables, je fais une classe dédié qui hérite de BaseObj et le fichier je l'appel Plugin_nomtable.class.php (qui a la même structure que les autres classe de thelia) et j'inclus chacun d'eux dans mon fichier principal.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Ok.

Je suis donc parti dans le bon sens même si je suis parti sur cette solution pour utiliser indépendamment les deux tables.

J'ai donc créé un plugin découpé en deux plugins, mais ça me parait un peu bizarre ce que j'ai fait...

L'un a besoin de l'autre pour fonctionner...

Je dois donc activer les deux plugins ?

Ou je dois simplement les inclure l'un dans l'autre et activer le plugin qui utilise les deux ?


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


Je te conseil d'étudier le plugin parrainage, il illustre ce que tu recherches :

http://contrib.thelia.fr/spip.php?artic … he=parrain

Tu verras qu'au final il n'y a qu'un plugin wink avec une class "pilote", celle qui a le nom de ton plugin et des classes qui gère d'autres table, mais tout est dans le même dossier. Enfin regarde tu verras tu comprendras mieux.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Ok ok.

Je suis en train de faire plein de plugins en même temps là donc j'ai un peu la tête dans tous les sens. ^^

Je sais pas si ils existent déjà par contre :
- Plugin d'envoi de mails au changement de statut commande.
- Plugin de paliers commande (0 à 100 € d'achats -> 10 € de créditation, 100 € à 200 € 20 € de créditation...)


Aide les autres, ils t'aideront en retour.

Offline


Autre question car je suis en train de me perdre dans les classes...

Pour faire une action au changement de statut de commande, je dois bien faire une classe qui hérite de PluginsClassiques ou je peux la faire hériter de PluginsPaiements pour utiliser ensuite la fonction substitmail via

$sujet = $this->substitmail($sujet, $commande);

Aide les autres, ils t'aideront en retour.

Offline


Bon j'ai tenté un truc...

Manu (ou un autre) peux-tu me dire si cela te semble correct. Si oui je l'ajouterai dans les contribs wink

<?php

	include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsPaiements.class.php");
	
	class Mailstatut extends PluginsPaiements{


		function Mailstatut(){
			$this->PluginsPaiements("mailstatut");
		}
		
		function init(){
			$statut = new Statut();
			$query = "select * from $statut->table where id<>5";
			$resul = mysql_query($query);
			while($row = mysql_fetch_object($resul)){
				$statutdesc = new Statutdesc();
				$statutdesc->charger($row->id);
				$message = new Message();
				if(!$message->charger("mailstatut".$statutdesc->id)){
					$message->nom = "mailstatut".$statutdesc->id;
					$id = $message->add();

					$messagedesc = new Messagedesc();
					$messagedesc->message = $id;
					$messagdesc->lang = 1;
					$messagedesc->intitule = "Mail de changement du statut commande en $statutdesc->titre";
					$messagedesc->titre = "Votre commande n°__COMMANDE_REF__ sur __NOMSITE__";
					$messagedesc->description = "Statut de votre commande : $statutdesc->titre

__CLIENT_REF__ __CLIENT_FACTPRENOM__ __CLIENT_FACTNOM__
__CLIENT_ADRESSE1__ __CLIENT_ADRESSE2__ __CLIENT_ADRESSE3__
__CLIENT_CPOSTAL__ __CLIENT_VILLE__
__CLIENT_PAYS__

Commande __COMMANDE_REF__ du __COMMANDE_DATE__

Les articles commandés:
<VENTEPROD>
Article : __VENTEPROD_TITRE__
Quantité : __VENTEPROD_QUANTITE__
Prix unitaire TTC  : __VENTEPROD_PRIXU__ EUR
</VENTEPROD>
-----------------------------------------
Montant total TTC :    __COMMANDE_TOTAL__ EUR
Frais de port TTC :    __COMMANDE_PORT__ EUR
Sommetotale:            __COMMANDE_TOTALPORT__ EUR
==================================
Votre facture est disponible dans la rubrique mon compte sur __URLSITE__";
					$messagedesc->add();
				}
			}
		}
		
		function statut($commande){
			$msg = new Message();
			$msgdesc = new Messagedesc();
			/****classe perso****/
			//$formatmail = new Formatmail();

			$msg->charger("mailstatut".$commande->statut);
			$msgdesc->charger($msg->id);

			$sujet = $msgdesc->titre;
			$corps = $msgdesc->description;
			/****classe perso****/
			//$formatmail->charger_id($msg->formatmail);
			//$trame = $formatmail->trame;


			$emailcontact = new Variable();
			$emailcontact->charger("emailcontact");
			
			$nomsite = new Variable();
			$nomsite->charger("nomsite");
			
			
			$sujet = str_replace("__NOMSITE__", $nomsite->valeur, $sujet);
			
			/****classe perso****/
			//$corps = str_replace("__CORPSMESSAGE__", $corps, $trame);
			//$corps = str_replace("__TITRE__", $sujet, $corps);
			
			$sujet = parent :: substitmail($sujet, $commande);
			$corps = parent :: substitmail($corps, $commande);
			
			$client = new Client();
			$client->charger_id($commande->client);
			
			$mail = new PHPMailer();
			$mail->IsMail();
			$mail->From = $emailcontact->valeur;
			$mail->FromName = $nomsite->valeur;
			$mail->Subject = $sujet;
			$mail->MsgHTML($corps);
			$mail->AddAddress($client->email,$client->nom." ".$client->prenom);
			$mail->send();
		}
	
	}

?>

[edit]J'avais oublié la récupération des infos client[/edit]

Last edited by Elyos (11-05-2009 08:37:13)


Aide les autres, ils t'aideront en retour.

Offline


Personne pour me dire que mon plugin est mal foutu? sad


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


Salut,

ca m'a l'air pas mal ,'ai juste regarder dans les grandes lignes mais je vois pas d'erreur flagrante smile, à tester et retester pour etre sur


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Ok msieur.

Je finis mon intégration etc etc de la boutique que je suis en train de faire, je test ça et si c'est ok je mettrais ça dans les contribs wink

Par contre, c'est dommage que vous n'ayez pas géré tous les envois de mail via une seule et même classe... ça aurait été plus souple pour créer de nouveaux envois.

Je dis ça mais c'est peut être fait dans là 1.4.0 ? Ou prévu pour la prochaine ?


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline