BreezingForms et AcyMailing 6 et 5

J'utilise un formulaire BreezingForms et j'aimerais y ajouter une option d'inscription à ma lettre d'information AcyMailing.
Cela est-il réalisable ?

Niveau: Moyen, Avancé
Version BF minimale requise: BreezingForms Lite

Situation

Que ce soit sur un formulaire d'inscription à votre site, un formulaire de contact ou tout autre formulaire tant qu'il soit généré par BreezingForms, vous aimeriez inclure la possibilité à votre visiteur de s'abonner à votre lettre d'information.

Mise en place de la liste de diffusion

Assurez-vous d'avoir installé AcyMailing 6 et d'y avoir créé une liste de diffusion. Référez-vous au besoin à la documentation d'AcyMailing.

Dans la gestion des listes, relever l'ID ou les ID de vos listes de diffusion (et oui, vous pouvez très bien en avoir plusieurs) auxquelles vous souhaitez proposer l'inscription à vos visiteurs. Notez ces ID's nous en aurons besoin lors de la mise en place de l'option dans le formulaire BreezingForms.

bf acy 01 tn

Préparation du formulaire

Créez le formulaire censé proposer l'inscription à votre liste de diffusion ou éditez-le s'il existe déjà. Ce formulaire doit comporter au moins un champ pour récupérer le nom de l'utilisateur et un champ pour récupérer son e-mail. Nommez-les p.ex. nom et email.

Nous allons placer une case à cocher dans ce formulaire afin de laisser choisir l'utilisateur de s'abonner ou pas à vos listes de diffusion.

  • Placez cette case à cocher à l'emplacement désiré et nommez-la p.ex. souscription.

Les éléments du formulaire sont désormais prêts à fonctionner et à enregistrer le nom et l'e-mail de vos utilisateurs dans vos listes.  Enregistrez les modifications de votre formulaire avant de passer à la suite.

Mise en place du script d'enregistrement

Il reste à mettre en place le script qui permettra l'enregistrement des informations utilisateur dans votre base de données.

Sélectionnez le formulaire dans l'arborescence à gauche et passez dans les propriétés avancéesPlus d'options.

Sur la page suivante, sélectionnez l'onglet Envoyer des pièces. Dans la zone Fin de soumission, sélectionnez l'option Personnalisé et entrez le script suivant :

$this->execPieceByName('ff_InitLib');
  if(!ff_getSubmit('souscription')) return; // souscription est le nom de la checkbox
    include_once(rtrim(JPATH_ADMINISTRATOR,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_acym'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php');

    $myUser = new stdClass();
    $myUser->email =ff_getSubmit('email'); //email est le nom du champ de réception de l'e-mail de l'utilisateur
    $myUser->name =ff_getSubmit('nom'); //nom est le nom du champ de réception du nom de l'utilisateur

    $userClass = acym_get('class.user');
    $subid = $userClass->save($myUser);

    $subscribe = array(3,4,5); // indiquez ici les id de vos listes de diffusion séparées par une virgule (3,4,5)…
    $newSubscription = array();
    if(!empty($subscribe)){
    $userClass->subscribe($subid, $subscribe);
}

Veillez à bien adapter ce script aux noms de vos champs et aux ID's de vos listes de diffusion. Enregistrez les modifications et sortez des options avancées du formulaire. Enregistrez votre formulaire une dernière fois par sécurité et testez-le.

Vous devriez pouvoir, si la case souscription est cochée, enregistrer un nouvel utilisateur dans vos listes de diffusion.

Si le formulaire ne fonctionne pas, le script n'est pas correctement formulé, vérifiez les ID's des listes de diffusion, elle doivent parfaitement correspondre à vos listes réelles. Si une ID de liste est insérée alors que la liste n'existe pas, le script n'agira pas.

Si vous supprimez une de vos listes ou en ajoutez une nouvelle, il sera nécessaire d'adapter le script.

Si vous supprimez la case à cocher du formulaire et la ligne if(!ff_getSubmit('souscription')) return; de votre script, l'initiateur du formulaire serait immédiatement inscrit dans vos listes. Question RGPD, je pense que ce n'est pas une bonne solution, veillez donc à bien laisser cette case si le formulaire ne sert pas UNIQUEMENT à s'abonner à vos lettres d'info mas s'agit d'un formulaire tiers (inscription au site, contact, etc.

À l'attention des utilisateurs d'AcyMailing 5

Pour les utilisateurs d'AcyMailing 5, le script à intégrer est différent. il doit être comme suit :

$this->execPieceByName('ff_InitLib'); 
	
	if(!ff_getSubmit('subscribeme')) return;
	include_once(rtrim(JPATH_ADMINISTRATOR,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_acymailing'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php');

	$myUser = new stdClass();
	$myUser->email = strip_tags(ff_getSubmit('email_field')); // Remplacez email_field par le nom réel de votre champ email. $myUser->name = strip_tags(ff_getSubmit('name_field'));// Remplacez name_field par le nom réel de votre champ nom. 

	$subscriberClass = acymailing_get('class.subscriber');
	$subid = $subscriberClass->save($myUser);

	$subscriberClass->sendConf($subid); // Envoi de l'e-mail de confirmation si activé dans le paramètre d'acyMailing

	$subscribe = array(3,4,5); //Les ID's de vos listes séparées par une virgule
	$newSubscription = array();
	if(!empty($subscribe)){ foreach($subscribe as $listId){
		$newList = array();
		$newList['status'] = 1;
		$newSubscription[$listId] = $newList;
		}
	}
	$subscriberClass->saveSubscription($subid,$newSubscription);

Merci à Alexandre et Remi d'Acyba pour leur coup de main à adapter le script à la version 6 d'AcyMailing.

Vous avez trouvé cet article intéressant ?
N'hésitez pas à l'évaluer en haut de page Je vous en remercie d'avance.

 Ajouter un commentaire
En utilisant ce formulaire de commentaires, vous acceptez que les informations demandées soient enregistrées, affichées ci-dessous et utilisées pour un éventuel contact (dans ce cas, n'oubliez pas de renseigner votre e-mail). L'adresse e-mail n'est jamais affichée aux visiteurs.