webleads-tracker

Reduire l'accès au panier aux seuls inscrits du site

Sylvain Ferré
Bonjour.

sur le site http://www.dynamicmixers.com/ il y a un panier et la possibilité de commander en ligne uniquement si vous votre inscription est validée et que vous faites partie du groupe "revendeurs".

Ainsi quand on est loggé sur le site cela ne pose pas de problème. En revanche si un visiteur n'est pas encore inscrit et a le "malheur" d'ajouter un produit au panier, il a droit à une grosse fenêtre "div" qui reprend la famille du catalogue en cours au lieu de l'ajout normal du produit dans le panier.

Ma question est la suivante :
Comment faire pour que tout nouvelle utilisateur qui clique le bouton "ajouter au panier" soit invité à créer un compte client avant de pouvoir utiliser le panier et ajouter des articles au panier et passer une commande sur le site ?

Merci et bonne journée.

Jérémie [Medialibs]
Bonjour,

Je pense que cela peut être fait facilement. Pour cela, il faudrait que par défaut, le lien d'ajout au panier soit masqué en CSS (display:none). Dans le template qui permet l'affichage du panier, il faudrait ajouter un petit morceau de javascript qui affiche le lien "Ajouter au panier".
Ainsi, par défaut, le lien n'est pas affiché. Si on est authentifié en tant que client simple, la boite panier ne s'affiche pas (contextualisation au groupe) et donc le lien ne s'affiche toujours pas. Enfin si l'utilisateur est authentifié en tant que membre du bon groupe, la boîte s'affiche et donc le javascript est appelé et le lien s'affiche aussi.

Magique... CQFD... DOM est ton ami

A bientôt

Jérémie
Directeur du Labo R&D
Medialibs

Sylvain Ferré
Effectivement et c'est bien ce que je pensais...
Il faut du java mais comme "i don't speak java ! (read only)"

Comment se rédige ce java ? je vois bien le fonctionnement ou l'on test une variable ou un cookie... en flash c'est "fatosh" mais commeje suis une vrai buse en java...

En Action Script cela donne quelque chose comme ça...

onClipEvent (load) {
if (_root.loggedUser == true) {
this.addToCartBox._visible = true;
this.createAccountBox._visible = false;
} else {
this.addToCartBox._visible = false;
this.createAccountBox._visible = true;
}
}

Ya t'il un traducteur Flash / Java dans l'assistance ?
Thank you.

Jérémie [Medialibs]
Oulala malheureux... je parle de Javascript et surtout pas de l'ignoble Java ;-)

Pour commencer, il faut ajouter une balise script :

<script type="text/javascript">
<!--
 
//-->
</script>


Le commentaire HTML dans ces balises permet d'être valide XHTML.

Ensuite, il faut s'assurer que le lien "ajouter au panier" est dans un élément possédant un attribut id. Ca peut être son parent (un span ou un div) ou lui même (le lien). On va continuer avec l'exemple suivant :

<a id="add2cartLink" ...>Ajouter au panier</a>


Il faut maintenant faire un peu de DOM. Pour commencer, on va tester l'existence de l'élément "add2cartLink" dans la page.

document.getElementById('add2cartLink')


Ce petit morceau de DOM permet d'obtenir l'objet "Lien Ajouter au panier". Il faut maintenant le rendre visible. On va donc jouer sur le style "display" de ce lien. Pour cela, il suffit d'ajouter le javascript suivant :

document.getElementById('add2cartLink').style.display='block'


Et voilà le lien s'affiche...

Pour résumer, voici un exemple complet de Javascript permettant l'affichage d'un élément possédant un attribut id "add2cartLink".

<script type="text/javascript">
<!--
  if(document.getElementById('add2cartLink')){
    document.getElementById('add2cartLink').style.display='block';
  }
//-->
</script>


Attention : si le javascript est appelé avant la création de la fiche produit, l'élément add2cartLink ne pourra pas être trouvé. Il faudra l'exécuter sur l'évènement onload de la page.

Je pense qu'il faudra organiser des formations javascript ;-)

A bientôt

Jérémie
Directeur du Labo R&D
Medialibs

Sylvain Ferré
C'est bien plus clair pour moi maintenant.
Mais avant de tout casser (4 heures avant de partir en vacances ce serait bête) voici ce que je compte faire. Merci de me dire si je me trompe.

La seule différence entre le source de la page HTML quand on est logué ou non c'est l'ajout de la zone qui affiche le nom de l'utilisateur.
Je pense ajouter un ID à cette partie dans le template BOXLOGIN.HTML ainsi...

<p class="logged">...</p>


sera transformé en...

<p class="logged" id="logged_user">...</p>


Dans ma fiche produit j'ai un <div id="buy"> qui entoure le bouton d'ajout au panier. Je pense agir sur cette éléments dans la feuille CSS en indiquant.

#buy { display : none; }


Maintenant je vois que la zone "Tools" arrive après la fiche produit dans la source HTML. Je dois donc normalement pouvoir placer le javascript à la fin de mon template BOXLOGIN.HTML pour qu'il s'execute sans passer par un onLoad sur le .

<script type="text/javascript">
<!--
  if(document.getElementById('logged_user')){
    document.getElementById('buy').style.display='block';
  }
//-->
</script>


Voila.
Maintenant si on Refresh la page, est ce que j'ai bon ou alors j'ai tout pété ?

Merci de ton aide Jérémie.
Bonne journée.

Jérémie [Medialibs]
Le code me parait correct. Par contre, le problème c'est que toute personne authentifiée verra alors le lien "Ajouter au panier". Or ce que tu voulais à l'origine c'est que seul les personnes authentifiées ET étant membre d'un groupe défini aient accès au panier. C'est pour cette raison que j'avais placé le javascript dans le template de la boîte panier. Celle-ci n'est affichée que pour les membres du groupe.

A bientôt

Jérémie
Directeur du Labo R&D
Medialibs