PHP-Astux.info

Tux ce héros (les faits Tux) sur ce site !

Tuto NewsletTux 2 : Compter le nombre d'ouverture des newsletters

Sommaire

  1. Principe d'action
  2. Prérequis et alerte
  3. Le code source
  4. Mise en application

Principe d'action

Lorsque vous envoyez une newsletter, vous n'avez plus aucun contrôle sur les mails : une fois envoyé, le mail est remis au serveur du destinataire et qu'il le lise ou non, que le destinataire existe ou non, vous ne pouvez plus interagir. Les deux seuls types de retours que vous pouvez avoir sont :

Autrement, vous aurez beau parler de la pluie et du beau temps, vous ne savez pas qui vous lit ... Il existe presque une solution pour y remédier qui est détaillée dans ce tutoriel.

Prérequis et alerte

Alerte !

Cette solution, soyons clairs, est très loin d'être la vérité parfaite et absolue. En réalité, elle peut être vraie à 90% ... comme seulement à 10% ! Quel en est l'intérêt, alors, et comment savoir quel est ce fameux taux ?

En réalité, ce taux dépend de deux facteurs. Ce sont justement les prérequis pour installer ce système. Afin de ne pas vous tromper dans l'interprétation des chiffres, il est intéressant de savoir ce qu'on mesure et quels sont les facteurs qui interagissent.

Vous voyez comment le taux peut varier, il est impossible à prédire avec exactitude. Pour les abonnés texte, puisqu'ils n'ont pas d'images, la solution consisterait à les faire cliquer sur un lien, mais vous vous voyez recevoir une newsletter et, systématiquement, devoir cliquer sur un lien afin de faire plaisir aux statistiques du webmaster ? Pour cela, je ne tiendrai pas compte des abonnés Texte dans cette procédure.

En résumé, cette procédure ne concernera que les abonnés au format HTML, et les newsletters envoyées avec un template.

Les prérequis

Les prérequis sont assez simples :

Le code source

Pour répertorier les lectures, je supposerai que vous utilisez au moins la version 2.1.4. de NewsletTux 2, laquelle permet de compter les abonnés texte et HTML lors de chaque envoi.

Pour rappel : faire Lettres d'information > Afficher l'historique d'envoi et, pour chaque lettre envoyée, on a les statistiques : Envoyé(e) à : Texte : X - HTML : Y où X et Y sont 2 nombres.

Code source de la table SQL

Nous allons commencer par créer une table dans la base de données. Nommez-la selon votre préfixe NewsletTux 2 (dans mon exemple : "ntux2_"), ainsi elle sera exportée lors des sauvegardes du script. Voici le code composant cette table :

-- Table : ntux2_countNL
CREATE TABLE ntux2_countNL(
  id_newsletter bigint(20) NOT NULL,
  compteur INT(6) NOT NULL DEFAULT 0

) Type = MyISAM;

2 champs pour cette table, à chaque ID de newsletter correspond un compteur. Ouvrez PHPMyAdmin et copiez/coller ce code dans l'onglet "SQL". Exécutez-le pour créer la table.

Code source du fichier qui assurera les comptes : readNewsletter.php

Ce fichier est à placer dans le même dossier que form-newslettux.php

<?php
	define('NTUX2_ROOT','./'); // ne touchez pas à cette variable (sauf si vous changez l'emplacement du fichier)
	require_once(NTUX2_ROOT.'sql/conn.php');
	require_once(NTUX2_ROOT.'lib/functions_text.php');
	require_once(NTUX2_ROOT.'lib/functions_general.php');
	define('CR', "\n");
	// Reading general config
	$req_config = "SELECT conf_name AS name, conf_value AS value FROM ".DB_PREFIX."config;";
	$config = ExecuteQuery($req_config, __FILE__, __LINE__);
	while ($var = mysql_fetch_array($config))
	{
		define(strtoupper($var['name']),$var['value']);
	};

	$nid = (isset($_GET['nid'])) ? abs(intval($_GET['nid'])) : 0;
	$img = (isset($_GET['img'])) ? Rec($_GET['img']) : '';

	// déjà on teste la validité de la newsletter
	$req_nl = "SELECT sender_id FROM ".DB_PREFIX."newsletters WHERE id='".$nid."';";
	$nl = ExecuteQuery($req_nl, __FILE__, __LINE__);

	if (mysql_num_rows($nl) == 1)
	{
		// il y a bien une newsletter : on incrémente le compteur si existant, sinon on crée le compteur
		$req_compteur = "SELECT compteur FROM ".DB_PREFIX."countNL WHERE id_newsletter='".$nid."';";
		$compteur = ExecuteQuery($req_compteur, __FILE__, __LINE__);

		if (mysql_num_rows($compteur) == 1) // le compteur existe, on le met à jour
			$req_count = "UPDATE ".DB_PREFIX."countNL SET compteur=(compteur+1) WHERE id_newsletter='".$nid."';";
		else // on le crée
			$req_count = "INSERT INTO ".DB_PREFIX."countNL (id_newsletter, compteur) VALUES('".$nid."','1');";

		// quel que soit l'état, on exécute
		ExecuteQuery($req_count, __FILE__, __LINE__);
	};

	// et on envoie l'image
	if ($img != '')
		header("Location: http://votre_site/dossier/".$img); // mettez bien le slash final
?>

ATTENTION : vous devez renseigner dans ce fichier l'URL de votre site ainsi que le dossier où se trouve l'image à l'avant dernière ligne. C'est très important pour la sécurité de vos pages !

Chaque fois qu'on appellera ce fichier avec ?nid=30&img=toto.jpeg alors le compteur de la newsletter n°30 sera incrémenté et l'image toto.jpeg sera chargée ... Notre "espion" est prêt ;-)

Le template HTML

Comme je le disais plus haut, qu'il soit dynamique (.php) ou statique (.html), cela importe peu. L'idée est juste de cacher une image en appelant le fichier readNewsletter.php, lequel juste avant de donner l'image dans le mail reçu, incrémentera le compteur !

Voici un exemple de template tout bête, je vous laisse le soin d'observer l'image du header et de l'adapter à votre template :

<html>
<head>
	<title>Newsletter PHP-Astux</title>
</head>
<body>
<center><img src="http://www.php-astux.info/newslettux2/readNewsletter.php?nid=50&img=header.png" alt="" height="160" width="900"></center>
--NEWSLETTUX--
--FOOTER--
</body></html>

Vous remarquerez que la source de l'image (<img src="...">) n'est pas une image, mais justement notre fichier readNewsletter.php ! Je lui envoie en paramètres l'ID de ma newsletter ainsi que le nom de l'image que je veux afficher au final.

Dans le fichier readNewsletter.php correspondant, à l'avant dernière ligne, j'aurai mis au préalable : header("Location: http://www.php-astux.info/newslettux2/img/".$img); puisque mon fichier header.png s'y trouve.

Mise en application chronologique

Seul hic, qui n'est pas nativement possible sous NewsletTux 2 au moment où j'écris ces lignes : lorsqu'on rédige la newsletter, celle-ci n'est pas enregistrée en base de données (forcément, elle n'a pas été envoyée) et donc, de ce fait, ne dispose pas d'ID. Pour appliquer cette méthode, vous DEVEZ enregistrer au préalable votre newsletter en tant que brouillon, pour qu'elle récupère un ID dans la base de données. Une fois que vous l'avez enregistrée, allez dans vos brouillons, puis éditez votre brouillon (en vue de l'envoyer) : vous verrez dans l'URL de votre navigateur une adresse du type http://...votre_site.../newslettux2/admin/write.php?act=write&to=subscribers&draft=123 : dans draft=XXX, XXX est l'ID de votre newsletter !

Partant de là, vous pouvez mettre à jour votre template ... Et compter qui aura ouvert votre newsletter avec téléchargement de la fameuse image !

En effet, à chaque fois qu'un lecteur ouvrira votre newsletter, dès qu'il téléchargera l'image "header.png" il incrémentera le compteur !

En résumé, dans l'ordre :

  1. Vous créez la future newsletter, que vous mettez en brouillon
  2. Vous allez dans Ecrire > Mes brouillons et au survol du crayon, lisez le draft=XXX dans le lien : c'est l'ID de la newsletter/brouillon
  3. Vous reportez le ?nid=XXX dans votre template
  4. vous téléchargez votre template
  5. Vous ouvrez en édition votre brouillon, puis vous envoyez votre newsletter en ayant bien entendu sélectionné le bon template !

Quelques derniers points :

Pour votre confort

Pour votre confort, je créerai très prochainement un module qui vous affichera ces chiffres directement dans l'administration de NewsletTux 2. D'ici là, vous pouvez aller voir dans votre base de données le fameux compteur ...