Rotation de bannières publicitaires à affichage aléatoire

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Rotation de bannières publicitaires à affichage aléatoire

  • Par Emacs
  • 9 commentaires
  • 17492 lectures
  • RSS -  Atom

Le script suivant permet de réaliser un gestionnaire de bannières à affichage aléatoire. Une bannière est affichée après avoir été tirée au sort aléatoirement parmi les autres enregistrées. Le principe est donc extrêmement simple.

Afin de rendre la compréhension et la lecture aisées de ce tutoriel, nous suivrons la méthode présentée par le plan suivant :

  1. Structures de données nécessaires
  2. Détermination de la clé tirée au sort
  3. Affichage de la bannière retenue
  4. Le script final
  5. Conclusion

Structures de données nécessaires

Pour réaliser ce script, nous devrons utiliser deux structures de données. La première est un tableau associatif à deux dimensions (type structuré) et une variable classique (type primitif) de type Integer (nombre en français). Nous stockerons dans ce tableau associatif 4 informations :

  • la clé de la bannière (clé du premier tableau)
  • le lien vers le site (index 0 du second tableau)
  • le lien vers la bannière du site (index 1 du second tableau)
  • une courte description du site (index 2 du second tableau)

La variable quant à elle sera initialisée à 1 par défaut au cas où la valeur aléatoire échoue. Cette valeur permettra donc d'afficher les informations du tableau où la clé est 1 (première bannière enregistrée). Sinon elle stockera une clé existante du tableau prise au hasard.

Détermination de la clé prise au hasard

Je suis persuadé que la plupart des webmasters débutants auraient choisi d'utiliser une solution ancestrale sélectionnant une valeur comprise entre 1 et la taille du tableau. Cela implique l'utilisation simultanée des fonctions rand() et sizeof() [ ou count() ].

J'en vois déjà venir se plaindre et me dire "Que faire alors ? Cette solution marche très bien !". Oui je suis d'accord, cela fonctionne parfaitement. Mais il faut savoir que PHP fournit bon nombre de fonctions natives que l'on a tendance à laisser de côté. Il n'est donc pas nécessaire de réinventer la roue !

C'est pourquoi nous utiliserons la fonction array_rand() qui se charge de sélectionner une valeur au hasard dans un tableau. L'avantage ici pour les développeurs est de ne pas s'exposer au risque de prendre une valeur qui n'existe pas (c'est à dire en dehors des limites du tableau) dans la structure de données.

D'un point de vue syntaxe, la fonction prend deux paramètres. Le premier est obligatoire, contrairement au second. Le premier argument est le tableau dans lequel on doit extraire une valeur et le second le nombre de valeurs aléatoires à retirer. Par défaut, cette valeur est de 1, d'où le côté facultatif.

Affichage de la bannière sélectionnée

Pour afficher la bannière sélectionnée, il suffit de lancer une bête instruction echo() pour générer le code html d'un lien et d'une image. Pour cela, nous passerons comme clé du premier tableau la variable $choix et les numéros d'index de chaque élément du second tableau.

Le script final

Script complet de la rotation de bannières
<?php
/****************************************************
Tableau associatif des bannieres et banniere choisie
*****************************************************/
$tabBannieres = array(
1 => array('http://www.site1.com','http://www.site1.com/banniere.gif','Description 1'),
2 => array('http://www.site2.com','http://www.site3.com/banniere.gif','Description 2'),
3 => array('http://www.site3.com','http://www.site3.com/banniere.gif','Description 3')
);
/****************************************************
Détermination de la banniere à afficher
*****************************************************/
$choix = 1;
$choix = array_rand($tabBannieres, 1);
/****************************************************
Affichage des bannieres
*****************************************************/
echo '<a href="', $tabBannieres[$choix][0] ,'" title="', $tabBannieres[$choix][2] ,'">';
echo '<img src="', $tabBannieres[$choix][1] ,'" alt="', $tabBannieres[$choix][2] ,'" />';
echo '</a>';
?>

Conclusion

C'est un script à la fois très simple et très utile qui présente synthétiquement le principe de fonctionnement d'une telle application. De part sa simplicité, ce code est facilement maintenable et intégrable à vos applications web.



Les commentaires

1. Par rocawear le 21/02/2008 02:21

Merci pour ce super tutoriel, c'est très bien rédigé !

2. Par Tristan le 06/03/2008 01:16

Bonsoir,

J'ai essayé votre code php pour la gestion aléatoire de 51 de mes bannières mais cela ne fonctionne pas. J'ai essayé avec 3 bannières et ça marchait. Comment faire pour que la boucle supporte plus de 3 bannières?

Merci d'avance,
Tristan

3. Par Liath le 11/04/2008 10:17

Peut etre rajouter des lignes :
4 => array('LIEN4', 'IMAGE4';
5 => array('LIEN5', 'IMAGE5';
...
51 => array('LIEN51', 'IMAGE51';

4. Par zakor le 23/04/2008 15:19

Bonjour, merci pour ton tuto vraiment sympa.
Par contre 2 questions si tu me le permets:
Puis je le faire fonctionner avec des fichiers
swf si oui comment?
Est ce possible de mettre en place un changement d'affichage (exemple toutes les 60sc) en plus ?
Merci d'avance

5. Par Furious le 09/05/2008 16:21

En tout cas c'est un très bon tutoriel merci !

Il manquerait juste un tutoriel sur comment tracker cette bannière n'est-ce pas ?

6. Par Emacs le 09/05/2008 17:11

C'est-a-dire ? Faire des stats sur la bannière ? (nb affichages, nb clics...) ?

7. Par Liste annuaire le 26/07/2008 19:30

Bravo pour le tutoriel très bien rédige et juste en plus! Je vais ce script clair et simplifié sur mon site!

8. Par Koni le 21/04/2009 14:43

J'ai intégré le code pour l'affichage de bannières et cela marche très bien. Seul petit problème, les bannières m'apparaissent avec une bordure mauve que je n'ai pas intégré comment est-ce possible de l'enlever?
Merci d'avance pour vos commentaires

9. Par niko le 08/08/2009 20:01

Merci pour ce tuto ,un exemple utile pour la fonction array_rand()