Jump to content

Interdire l'achat à un groupe


Recommended Posts

Bonjour,

 

Tout est dans le titre, j'aimerai interdire l'achat à un groupe de client. Il peut consulter le produit mais pas accéder au bouton "Ajouter au Panier".

Il y a t'il une procédure dans un Template à rajouter ?

Merci d'avance.

Link to comment
Share on other sites

Une idée :

If le visiteur fait partie du groupe "limité"

them rendre tous les produits Available_for_order =false

Le prix est affiché et le bouton ajouté au panier est grisé.

else le visiteur ne fait pas partie du groupe "limité"

rendre tous les produits Available_for_order = true

Le prix est affiché et le bouton ajouté au panier est actif.

End if

 

Available_for_order = false > disponible à la vente = non

 

    /** @var boolean Product available for order */
   public $available_for_order = true;

Link to comment
Share on other sites

D'accord je vais tester, j'ai tout juste pu savoir la synthaxe pour identifier le groupe du client connecté via $cookie.

Je me mélange un peu les pinceaux pour savoir quel fichier je dois implanter mon code, si c'est le template ou le php (ca m'arrangerai vu que j'ai du mal su le template "smarty".

Je vais tester tout ça dans la soirée et te tenir informer.

 

Merci encore de te préoccuper de mon cas :)

Link to comment
Share on other sites

Quelques infos de plus

 

dans la BD > ps_customer > ps_cutomer_group > id_customer id_group

 

Je me mélange un peu les pinceaux pour savoir quel fichier je dois implanter mon code, si c'est le template ou le php

dans un fichier PHP

• Les classes PHP > dossier classes

• Les controller > front > admin > dossier controller

 

pour les groupes > classes group.php

pour les customer > classes customer.php

 

Je pencherai pour ma part pour un admin ou front controller ;)

Link to comment
Share on other sites

dans un fichier PHP

• Les classes PHP > dossier classes

• Les controller > front > admin > dossier controller

 

pour les groupes > classes group.php

pour les customer > classes customer.php

 

 

Je pencherai pour ma part pour un admin ou front controller

Je te mentirai si je te dis que j'ai compris ces explications... ^^ Mais la je suis un peu paumé pour savoir dans quel fichier et quel module concerne mes modifications

Link to comment
Share on other sites

Hey Zakovu,

 

C'était pourtant pour tenter de t'éclairer sur la structure de PrestaShop :)

et surtout pour que tu saches où se trouvent les fichiers php dans l'arborescence.

donc

les classes sont dans le dossier classes

les controller dans le dossier controller (front et admin)

Le fichier a modifié je ne l'ai pas cherché. Je "pense" que c'est un controller d'admin ^_^

Pour le reste, je te propose des idées, des pistes, des conseils. Une aide, enfin j'espère...

Link to comment
Share on other sites

Oui bien sur, j'apprécie beaucoup ton aide, je ne suis pas en train de raler hein ^^

 

Je comprend mieux où tu veux en venir dans ses dossiers (là j'étais en train de chercher désespérément dans les modules...)

dans AdminCustomersController.php je vois des choses intéressantes.

Je vais me vider un peu l'esprit avant de plonger dedans ^^

Link to comment
Share on other sites

Voici l'algorithme qui correspondrait;

global $cookie;

//On récupère la méthode pour trouver les groupes d'un client

$groups=Customer::getGroupsStatic($cookie->id_customer);

//On teste chaque résultat du tableau

foreach($groups as $group)

{

//Si le client appartient au groupe désiré (ici 3)

if ($group==3)

{

//Bouton AJOUTER AU PANIER ok

}

}

 

Cependant, dans tout ses fichiers, je n'ai pas réussi a trouver l'instruction présent du bouton ajouter au panier.

  • Like 1
Link to comment
Share on other sites

Alors, si je comprend bien, les modifications sont a réaliser sur product-list.tpl, j'ai pu voir où était situé les instructions pour le fameux bouton. En revanche, en quoi sert les fichiers des controllers ? J'ai du mal à comprendre (désolé, j'ai du mal à tout comprendre sur le tas ^^)

Maintenant la difficulté, c'est de convertir le code php de la condition de groupe en langage de templating... je vais pas mal galéré :(

Link to comment
Share on other sites

  • 5 months later...

Bonjour je ne sais pas si c'est d'actualités mais j'ai réussi a cacher le bouton ajouter au panier si l'internaute ne fait pas partie d'un certain groupe.(le prix de l'article reste affiché)

Si ça vous interresse je peux vous donner la démarche.

Link to comment
Share on other sites

Bonjour,

J'ai recruté un prestataire pour y remédier comme je n'avais aucune réponse, mais je pense que ça peut intéressée les personnes qui auront le même soucis. Et ça me permettrait également de savoir comment faire pour une prochaine fois ;)

Link to comment
Share on other sites

Pas de soucis:

 

Dans le fichier product.tpl

 

j'ai donc ajouté :

{if !$mon_groupe}	
//on affiche rien du tout ou du texte	
{else}
 ///ici le code du bouon

{if (!$allow_oosp && $product->quantity <= 0) OR !$product->available_for_order OR (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}
                        <span class="exclusive">
                            <span></span>
                            {l s='Add to cart'}
                        </span>
                    {else}
                        <p id="add_to_cart" class="buttons_bottom_block">
                         
                            <a class="exclusive button btn_add_cart" href="javascript:document.getElementById('add2cartbtn').click();"> <span>{l s='Add to cart'}  </span></a>
							<input id="add2cartbtn" type="submit" name="Submit" value="{l s='Add to cart'}" />
                            <!--show when "This product is no longer in stock with those attributes but is available with others"-->
                            <span class="exclusive" style="display:none;">
                                <span></span>
                                {l s='Add to cart'}
                            </span>
                        </p>
                    {/if}
                    <!-- quantity wanted -->
					<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) OR $virtual OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
                        
                        <input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
                        <label>{l s='Quantity:'}</label>
                    </p>	

{/if} ///fin du if pour ma condition de groupe (notez que j'ai volontairement choisi de cacher aussi les quantités de produits et pas seulement le bouton aajouter au panier.

Ensuite il faut créer la variable $mon_groupe dans ProductController.php

	//On assigne la variable $cookie
		  global $cookie;
		  //On récupère la méthode pour trouver les groupes d'un client
		  $groups=Customer::getGroupsStatic($cookie->id_customer);
		  //On teste chaque résultat du tableau
		  foreach($groups as $group)
		   {
			//Si le client appartient au groupe désiré (ici 4)
			if ($group==4)
			 {
			  //On créé la variable smarty qui servira de test
			  self::$smarty->assign('mon_groupe','1');
			 //On stoppe la boucle, plus besoin de continuer
			  break;
			 }
		   }

à insérer juste après :

public function init()
	{

Ce code n'est pas de moi je l'ai trouvé dans un autre topic sur le forum mais je n'arrive pas à mettre la main dessus, les remerciements devront aller à cet auteur.

 

Notez qaue je cache le bouton ajouter au panier uniqument dans la fiche produit (dans mon casil n'y a pas le bouton dans product_list ni en page d'accueil car il faut un minimum de 10 produits ce qui désactive ce bouton)

Mais en appliquant cette méthode cela devrait être relativment aisé de le reproduire ailleurs (ce que j'ai fait par exemple dans le my_account.tpl pour afficher un texte selon le groupe)

Edited by zaar (see edit history)
Link to comment
Share on other sites

Attention l'id de mon groupe est 4, il faudra changer cela selon votre config !

//On assigne la variable $cookie
		  global $cookie;
		  //On récupère la méthode pour trouver les groupes d'un client
		  $groups=Customer::getGroupsStatic($cookie->id_customer);
		  //On teste chaque résultat du tableau
		  foreach($groups as $group)
		   {
			//Si le client appartient au groupe désiré (ici 4)
			if ($group==4)
			 {
			  //On créé la variable smarty qui servira de test
			  self::$smarty->assign('mon_groupe','1');
			 //On stoppe la boucle, plus besoin de continuer
			  break;
			 }
		   }
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...