EcommerceDEV. Développement, optimisation et sécurisation des sites de commerce électronique.
arrowAccueil arrow Programmation arrow J2EE/Java(script) arrow Créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics
Jeudi 15 mai 2008
Nom d'utilisateur     Mot de passe      Conserver       Mot de passe perdu ? 
Menu
Accueil
A propos du site
Carte du site
Moteur de recherche
Nouvelles
Contactez-nous
Evénements
Lettres de nouvelles
- - - - - - -
Analyse
Conception
Optimisation
Programmation
Sécurité
Produits/Services
mar 04 2006
Créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 1
FaibleMeilleur 
Programmation - ASP/.Net/PHP
Ecrit par Kamal AOUDA   
04-03-2006
Créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics

Publicité en ligne : créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics et d’arrêter l’affichage d’une annonce publicitaire donnée lorsque le nombre d’impressions de cette annonce dépasse une limite maximale.

A l’état brut le server side control Adrotator ne permet pas de comptabiliser le nombre de fois qu’une annonce publicitaire a été cliquée. De même il ne permet pas d’arrêter l’affichage d’une annonce publicitaire lorsqu’elle fait l’objet d’un certain nombre d’impressions.


Dans cet article, Wim Hollebrandse décrit un programme qui permet de prendre en charge les fonctionnalités ci-dessus décrites. Une base de données SQL Server est utilisée pour récupérer les informations relatives à chaque annonce publicitaire et faire le suivi du nombre unitaire d’impressions.

Vous pouvez télécharger le code source de ce programme en cliquant sur ce lien.

Le programme proposé repose sur deux user controls. Le premier est responsable de l’affichage dynamique des annonces publicitaires tandis que le deuxième fait le comptage du nombre de clicks. Bien sûr il est tout à fait possible d’utiliser un seul contrôle pour effectuer ces deux tâches (il s’agit d’un choix personnel de l’auteur du code mais à sa place j’aurais fusionné les deux objets pour éviter aux programmeurs d’appeler plusieurs classes pour effectuer des tâches aussi simples).

Structure de la table Adcompaign

Une seule table permettra de stocker les informations requises pour gérer les annonces publicitaires. Nous n’allons décrire ci-dessous que certains champs dont les libellés pourraient prêter à confusion.

ImpressionLimit – nombre maximum d’impressions par annonce.
StartCampaign – date de début d’affichage de l’annonce publicitaire. L’annonce ne sera pas publiée antérieurement à cette date.
CampaignCompleted – ce champ sera mis à jour lorsque le nombre total d’impressions par annonce est atteint.
Impressions – fait le comptage du nombre d’impressions au fur et à mesure.
ClickThroughs – nombre de clics.
AdPosition – texte libre permettant d’indiquer la position de l’annonce publicitaire.
Enabled – variable pour indiquer si l’annonce doit être affichée (1) ou pas (0).
AdGuid – un Guid permettant à chaque annonceur d’accéder aux statistiques de ses annonces.

AdCampaign.ascx

AdCampaign usercontrol est responsable de l’affichage des annonces

<%@ Control Language="c#" AutoEventWireup="false" Codebehind="AdCampaign.ascx.cs" Inherits="TestAdCampaign.AdCampaign" %>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><span runat="server" id="spanAd"></span></td>
</tr>
</table>

Les propriétés d’AdCampaign telles que définies dans le fichier sous-jacent AdCampaign.ascx.cs sont lues et modifiées via des spécificateurs d’accès (setters, getters) :

private string position="";
public string Position
{
get { return this.position; }
set { this.position = value; }
}

private string redirectpage="";
public string RedirectPage
{
get { return this.redirectpage; }
set { this.redirectpage = value; }
}

private string appconnectionkey="";
public string AppConnectionKey
{
get { return this.appconnectionkey; }
set { this.appconnectionkey = value; }
}

La propriété Position permettra de récupérer de la base de données seulement les annonces qui ont une taille d’affichage déterminée (cela évitera l’affichage d’une annonce 125x125 dans un espace réservé à une annonce 468x60).

La page de redirection ne mène pas vers le site de l’annonceur mais plutôt vers une page intermédiaire sur laquelle se trouve le deuxième contrôle AdClickThru.ascx qui permet de comptabiliser le nombre de clics.

AppConnectionKey stocke les paramètres de connexion à la base de données (connection string). Cette valeur est liée à celle qui se trouve dans le fichier web.config.

La plus grosse partie du code du contrôle AdCampaign se trouve dans l’événement Page_Load et dans la méthode ServeAd().

private void Page_Load(object sender, System.EventArgs e)
{
SqlConnection cnn = new SqlConnection(ConfigurationSettings.AppSettings[this.appconnectionkey]);
SqlCommand cm = new SqlCommand("p_SelectIDsByAdPosition",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@AdPosition",this.position);
cnn.Open();
SqlDataAdapter da = new SqlDataAdapter(cm);
DataSet ds = new DataSet();
da.Fill(ds);
// do some clean up
da.Dispose();
cm.Dispose();
cnn.Close();
int rows = ds.Tables[0].Rows.Count;
if (rows>0)
{
Random r = new Random();
// serve random ad from the results in the dataset
this.ServeAd(Convert.ToInt32(ds.Tables[0].Rows[r.Next(0,rows)]["ID"]),cnn);
}
// .. and more clean up
ds.Dispose();
cnn.Dispose();
}

La portion de code reproduite ci-dessous permet de récupérer les informations à partir de la base de données.

private void ServeAd(int ID,SqlConnection cnn)
{
StringBuilder sb = new StringBuilder();
SqlCommand cm = new SqlCommand("p_ServeAdByID",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@ID",ID);
cnn.Open();
SqlDataReader dreader = cm.ExecuteReader();
if (dreader.Read())
{
sb.Append("<a href='"+this.redirectpage+"?"+ID.ToString()+"'>");
sb.Append("<img src='"+dreader["AdImageURL"].ToString()+"' ");
if (!Convert.IsDBNull(dreader["ImageWidth"]))
{
sb.Append("width='"+dreader["ImageWidth"].ToString()+"' ");
}
if (!Convert.IsDBNull(dreader["ImageHeight"]))
{
sb.Append("height='"+dreader["ImageHeight"].ToString()+"' ");
}
sb.Append("border='0'></a>");
this.spanAd.InnerHtml = sb.ToString();
}
// clean up
dreader.Close();
cm.Dispose();
cnn.Close();
}

AdClickThru.ascx

Ce deuxième contrôle n’a pas d’interface graphique. Il reçoit les paramètres de l’annonce publicitaire via la page de redirection décrite préalablement. Voici les deux principales méthodes de ce contrôle :

private void Page_Load(object sender, System.EventArgs e)
{
// Querystring should contain the AdCampaign's Primary Key value
if (Request.QueryString!=null)
{
try
{
int AdID = Convert.ToInt32(Request.QueryString[0]);
this.IncrementClickThruAndRedirect(AdID);
}
catch (InvalidCastException)
{
// too bad - Request.QueryString[0] can't be converted to an int
}
}
}


private void Page_Load(object sender, System.EventArgs e)
{
// Querystring should contain the AdCampaign's Primary Key value
if (Request.QueryString!=null)
{
try
{
int AdID = Convert.ToInt32(Request.QueryString[0]);
this.IncrementClickThruAndRedirect(AdID);
}
catch (InvalidCastException)
{
// too bad - Request.QueryString[0] can't be converted to an int
}
}
}

IncrementClickThruAndRedirect exécute une procédure stockée

private void IncrementClickThruAndRedirect(int ID)
{
SqlConnection cnn = new SqlConnection(ConfigurationSettings.AppSettings[this.appconnectionkey]);
SqlCommand cm = new SqlCommand("p_IncrementClickThru",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@ID",ID);
cnn.Open();
// get result, should contain redirect Url, but could be null...
object oUrl = cm.ExecuteScalar();
// do some clean up first
cm.Dispose();
cnn.Close();
cnn.Dispose();
// make sure it's not null
if (oUrl!=null)
{
string redirectUrl = oUrl.ToString();
// now redirect
Response.Redirect(redirectUrl,true);
}
}

Interfaces

Deux pages ASP.net sont utilisées dans cette application.

default.aspx

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="TestAdCampaign.WebForm1" %>
<%@ Register TagPrefix="Wimdows" TagName="AdCampaign" Src="AdCampaign.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Test AdCampaign ASP.NET UserControls</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<Wimdows:AdCampaign Position="TOP468x60" id="AdCampaign1" RedirectPage="redirect.aspx" AppConnectionKey="conn" runat="server"></Wimdows:AdCampaign>

<br>

<Wimdows:AdCampaign Position="LEFT125x125" id="Adcampaign2" RedirectPage="redirect.aspx" AppConnectionKey="conn" runat="server"></Wimdows:AdCampaign>
</form>
</body>
</HTML>

redirect.aspx

<%@ Page language="c#" Codebehind="redirect.aspx.cs" AutoEventWireup="false" Inherits="TestAdCampaign.redirect" %>
<%@ Register TagPrefix="Wimdows" TagName="AdClickThru" Src="AdClickThru.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>redirect</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="frmredirect" method="post" runat="server">
<Wimdows:AdClickThru id="AdClickThru1" AppConnectionKey="conn" runat="server"></uc1:AdClickThru>
</form>
</body>
</HTML>
 

Dernière mise à jour : ( 14-03-2006 )
< Précédent   Suivant >
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles

Cet ouvrage montre comment tirer parti de l'offre Java-XML d'Oracle, tant au niveau de la base de données Oracle8i (drivers JDBC, conteneur EJB, ORB Corba, XSQL...), que des produits associés, outils XML-XSLT, JDeveloper, Oracle9i Application Server, etc.


L'ouvrage insiste tout particulièrement sur les problèmes d'intégration de ces technologies, de design des architectures et de scalabilité des applications. II est illustré de nombreux exemples de code et de deux études de cas, une application e-commerce construite à l'aide d'EJB et un serveur de documents XML multithread.

 

Références

 

Lien sur le site d'Amazon.

Fréderic Berque, Serge Frezefond, Ludovic Sorriaux

Titre : Java, XML et Oracle
Éditeur : Eyrolles
Collection : Solutions Développeurs
Parution : mars 2001
634 pages
ISBN : 2-212-09149-4
EAN13 : 9782212091496

Moteur de recherche
Recommander ce site
Collaboration
Téléchargements
Derniers événements
Aucun événement
Sondages

En Java, quelle la meilleure technique pour programmer un panier d’achat ?

  
Blogs Ecommerce
Blog de capitaine commerce
top

Ce site a été crée avec le CMS Mambo. Un logiciel gratuit disponible sous licence GPL.

Copyright Ecommerce DEV 2006.

Hosted by SiteGround