THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Affichage du prix au kilo

(16-01-2014 11:55:06)


Salut tout le monde

Existerait-il un moyen simple d'afficher le prix au kilo sur la page produit ?

J'ai deux menus déroulants dont un avec à l'intérieur les quantité et le prix
http://www.nutrixlab.com/musculation-fi … eypro.html

Ce que je souhaiterai faire c'est d'afficher lors du changement de quantité dans le menu déroulant le prix au kilo à coté du prix affiché...!

En sommes un javascript peut être ou un PHP, qui prendrait le prix de vente et qui le diviserait par la quantité c'est possible ça ? ça donnerait quoi ? je nage ...

Merci de votre aide

Offline


Bonjour,

Le prix au kilo n'est pas censé changer en fonction de la quantité, c'est justement tout l'intérêt ^^.
Donc ce que tu veux c'est le prix total pour ce produit fonction de la quantité.

Ici j'opterais plus pour du javascript, en effet, c'est une information qui ne bouleversera pas le comportement de ton site si le javascript  est désactivé.

On peut voir le formulaire concerné ?


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Merci pour ton aide.

voici le formulaire :

   <form action="panier.php" method="post" name="form1">
                <input type="hidden" name="action" value="ajouter" />
                <input type="hidden" name="ref" value="#REF" />
               
                <T_DECLI>
                  <THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE_ID" produit="#ID">
                    <label class="attribsSelect"><span class="panier"> #TITRE :</span> </label>
                    <div id="productAttributes">
                      <select name="declinaison#ID" class="attribute_Flavor">
                        <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT" stockmini="1">
                        <option value="#ID">#TITRE #FILTRE_different(#DECLINAISON||1||<THELIA_stock type="STOCK" produit="#PRODUIT" declidisp="#ID" >
                          #PRIX euros </option>
                          </THELIA_stock>
                          )                           
          			
         		 </THELIA_DECLIDISP>
                      </select>
                    </div>
                  </THELIA_DECLI>
                  </div>
                </T_DECLI>
                <//T_DECLI> <br />
                <input name="input" type="image" src="img/interface/ajouter-panier.gif" />
              </form>

Bon niveau javascript et prog je suis un peu une bille je ne vois même pas par ou commencer en fait

Offline


Il manque le choix de la quantité dans ton code ci-dessus.


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Alexandre,
C'est vrai mais la quantité et le prix s'affichent simultanément dans le meme menu déroulant. Tu peux le voir l'exemple ici

Le truc c'est que lorsque je change de quantité dans le menu déroulant, je voudrais que ça affiche (en plus du tarif), le prix au kilo correspondant aussi...

Ahaah ! .. ca rigole moins wink

Offline


Ok je vois ce que tu veux, ce n'est pas un calcul puisque le prix suivant la quantité (les kilos) n'est pas calculable.
D'ailleurs, si je comprend bien c'est l'identifiant de la déclinaison qui est envoyée dans le champ quantité.

Donc là on va faire un petit mélange de Javascript (Ajax) avec du PHP (des boucles Thelia en fait ce qui va te simplifier la tâche).

Préalablement, il te faut charger jquery soit dans la balise head soit en pied de page :

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.6.2");</script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script>

Ensuite, on va récupérer le changement de valeur de la liste déroulante quantité :

<script type="text/javascript">
/* <![CDATA[ */

$( document ).ready(function() {
  $( ".attribute_Flavor" ).change(function() {
    var id_declinaison1 = $('ul[name=declinaison1] option:selected').val();
    var id_declinaison2 = $('ul[name=declinaison2] option:selected').val();
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: "fond=prix_declinaisons&id_declinaison1=" + id_declinaison1 + "&id_declinaison2=" + id_declinaison2,
      success: function(data) {
        $('#prix_calcule').html(data);
      }
    });
  });
});

/* ]]> */
</script>

Rajouter une div avec l'identifiant prix_calcule à l'endroit de ton choix dans le template :

<div id="prix_calcule"></div>

Et enfin rajouter un fichier template prix_declinaisons.html dans lequel tu calcules ton prix avec les déclinaisons envoyées en paramètre grâce à ces balises :

#ENV{id_declinaison1}
#ENV{id_declinaison2}

Le code Javascript n'a pas été testé.

Edit : rajout des balises

Last edited by alexandre (18-01-2014 00:24:35)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Waou quelle réactivité merci Alexandre !

J'ai a peu prêt tout compris excepté peu être la page template prix_declinaisons.html dont tu me parles (je suis thelia 1.4.x).

J'ai ajouté les scripts à la page produit.html et j'ai créé cette fameuse page prix_declinaisons.html (et une page prix_declinaisons.php qui appelle le fichier html en question puisque je suis en v 1.4.x).
Puis j'ai insérer le code suivant dans cette page prix_declinaisons.html mais au final .. rien ne se passe lorsque je change dans le menu déroulant.

Il doit certainement manquer quelque chose dans le code que j'ai placé ? 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>

<body>
<div> 
#ENV{id_declinaison1}
#ENV{id_declinaison2} 
</div>
</body>

</html>

Merci et bon week end

Offline


Salut,

Ouais ok donc en fait pour la page prix_declinaisons.html il ne faut pas mettre le doctype ni html et titi quanti.
Ce que va générer cette page doit s'insérer dans la page où il y a les select.
Mais en fait c'est pas important, dans un premier temps remplace tout ça par

test

Peux tu poster le code de la page produit (tu peux épurer si tu sais faire).

EDIT : J'avais pas vu que tu avais posté le tout sur ton site.
Pas besoin du code la page produit du coup.

Last edited by alexandre (18-01-2014 09:58:43)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Voici la version corrigée du code Javascript (testée cette fois-ci) :

<script type="text/javascript">
/* <![CDATA[ */
$( document ).ready(function() {
  $( ".attribute_Flavor" ).change(function() {
	
    var id_declinaison1_valeur = $('select[name=declinaison1] option:selected').val();
    var id_declinaison2_valeur = $('select[name=declinaison2] option:selected').val();
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: { fond: "prix_declinaisons", id_declinaison1: id_declinaison1_valeur, id_declinaison2: id_declinaison2_valeur },
      success: function(data) {
        $('#prix_calcule').html(data);
      }
    });
  });
});
/* ]]> */
</script>

Ensuite, tu as utilisé une classe pour prix_calcule, c'est un id qu'il faut ici :

<div id="prix_calcule"></div>

Enfin, une petite remarque concernant les options du select, tu ne les as pas fermé.

Last edited by alexandre (20-01-2014 11:45:04)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Me revoilà et c'est parti j'inclus ton javascript corrigé dans la page produit voici le code de cette (tu vas pleurer c'est sûr, navré)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	
      
    <head>
    
	#INCLURE "meta.html"

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.6.2");</script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script>

<script type="text/javascript">
/* <![CDATA[ */
$( document ).ready(function() {
  $( ".attribute_Flavor" ).change(function() {
	
    var id_declinaison1_valeur = $('select[name=declinaison1] option:selected').val();
    var id_declinaison2_valeur = $('select[name=declinaison2] option:selected').val();
	$.ajax({
      type: "GET",
      url: 'index.php',
	  data: { fond: "prix_declinaisons", id_declinaison1: id_declinaison1_valeur, id_declinaison2: id_declinaison2_valeur },
      success: function(data) {
        $('#prix_calcule').html(data);
      },
    });
  });
});
/* ]]> */
</script>

<link href="styles.css" rel="stylesheet" type="text/css" />
	
</head>
<body>

<!-- wrapper & subwrapper -->
	
<div id="wrapper">
	<div id="subwrapper">
	
	#INCLURE "entete.html"
		
<!-- chemin -->	
	 
		<div id="chemin">
		
		<a href="index.php" class="LIEN_chemin">Accueil boutique</a> > 
		<THELIA_chemrub type="CHEMIN" rubrique="#RUBRIQUE_ID">
		
		<THELIA_rubdetchem type="RUBRIQUE" id="#ID">
		<a href="#REWRITEURL" class="LIEN_chemin">#TITRE</a> >
		</THELIA_rubdetchem>
		</THELIA_chemrub> 

		<THELIA_rubcour type="RUBRIQUE" id="#RUBRIQUE_ID">
			<a href="#REWRITEURL" class="LIEN_chemin">#TITRE</a> >
		</THELIA_rubcour>
		
		#PRODUIT_NOM 

		
		</div>
					
<!-- contenu -->
	
		<div id="content">
		
		#INCLURE"menu.html"
		
			<div id="contenu">
			<THELIA_PROD type="PRODUIT" ref="#PRODUIT_REF"> 
	
    
            <table width="100%" border="0">
              <tr>
                <td width="0">&nbsp;</td>
                <td width="26%" valign="top">  
                
             
             <table width="150" border="0" cellpadding="0" cellspacing="0">
             

             
  <tr>
    <td width="153" valign="top">
    
     <THELIA_img type="IMAGE" num="1" produit="#ID" largeur="300">
			 	<a href="#" onclick="window.open('imgpop.php?ref=#PRODUIT_REF&amp;id_image=#ID', '', 'toolbar,width=600,height=840')">
				<img src="#FICHIER"  alt="#PRODTITRE" title="#PRODTITRE" border="0" class="contourImage"  id="photozoom" /></a>		   
				</THELIA_img>
    
    <p>&nbsp;</p>
    </td>
  </tr>
  <tr>
    <td valign="top"> 
    <img src="img/interface/apartir.gif" width="52" height="7" />
  
    <br /></td>
  </tr>
  <tr>
    <td>  <div class="prixProduit">
					  #PRIX &euro;
         </div>
         
        
         
         </td>
  </tr>
</table>
 <div id="prix_calcule">Prix kilo: </div>          
                
           
               
        
   <div id="productAttributes">
    
<form action="panier.php" method="post" name="form1">
<input type="hidden" name="action" value="ajouter" />
<input type="hidden" name="ref" value="#REF" />

        <T_DECLI>
        

    	<THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE_ID" produit="#ID">
                         
     	  <label class="attribsSelect"><span class="panier"> #TITRE :</span> </label> 
         <div id="productAttributes">
         

 				<select name="declinaison#ID" class="attribute_Flavor"> 

        		 <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT" stockmini="1">
           
                         
                            <option value="#ID">#TITRE #FILTRE_different(#DECLINAISON||1||<THELIA_stock type="STOCK" produit="#PRODUIT" declidisp="#ID" >#PRIX euros </option> </THELIA_stock>)                           
                          
          			
         		 </THELIA_DECLIDISP>
				</select> 
         </div> 

         
       </THELIA_DECLI> 
       
       </div>
       
          
    </T_DECLI>
                
          
    <//T_DECLI>
    
       <br />
   
   
  <input name="input" type="image" src="img/interface/ajouter-panier.gif" />
</form>    
             
          
       
                
                
                
                </td>
                <td width="3%">&nbsp;</td>
                <td width="60%">
                <div class="titrePage">
				<h2>#TITRE</h2>
			  </div>
             
             <div class="chapoProduit">
						#CHAPO
						</div>
				 		<div class="descriptionProduit">
						#DESCRIPTION
						</div>
                        <div class="postscriptum">#POSTSCRIPTUM </div>
                        <br />
             
             
              </td>
              </tr>
              <tr>
                <td width="0">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td width="0">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>
                
                <!-- Retour à la page précédente -->	

				<div id="pages">
				<THELIA_PAGEPREC type="PAGE" rubrique="#RUBRIQUE_ID" caracteristique="#CARACTERISTIQUE_ID" caracdisp="#CARACTERISTIQUE_DISP" num="9" typeaff="0">
				<a href="rubrique.php?id_rubrique=#RUBRIQUE_ID&page=#PAGE_PREC" class="LIEN_pages">Page pr&eacute;c&eacute;dente</a>
				</THELIA_PAGEPREC>
                
				</div>
                
                </td>
              </tr>
            </table>
        
            <THELIA_stock type="PRODUIT" ref="#REF" stockmini="1">
              
      </THELIA_stock>
                        
					</div> 
				</div>
                
                
			</THELIA_PROD>
            
			  </form>
                        	
                            

                
			</div>
			#INCLURE "pied.html"
		
	
    
	#INCLURE "signature.html"
    
</div>
</body>
</html>

j'ai bien remplacé dans cette page la classe par un id aussi <div id="prix_calcule"></div>


Ensuite petite vérification de ma page prix_declinaisons.php qui appelle bien la page prix_declinaisons.html (et qui prenne en charge le PHP)

<?php
	$fond="prix_declinaisons.html";
	$parsephp=1; 
	$pageret=0;
	include("fonctions/moteur.php");
?>

Sur ma page "prix_declinaisons.html" j'ai bien tout supprimé et je n'ai laissé que "test"

test

Mais rien ne se passe... Y'a encore l'histoire de la balise Select mais pour moi elle bien est fermée,  non ? Ca ne peut pas venir de là à priori ?. Je sèche, faut que j'arrête de penser je crois.

Offline


Bonjour,

1. Pour le champ option manquant c'est pour la première déclinaison que ça pose soucis, remplaces :

<option value="#ID">#TITRE #FILTRE_different(#DECLINAISON||1||<THELIA_stock type="STOCK" produit="#PRODUIT" declidisp="#ID" >#PRIX euros </option> </THELIA_stock>)

par :

<option value="#ID">#TITRE #FILTRE_different(#DECLINAISON||1||<THELIA_stock type="STOCK" produit="#PRODUIT" declidisp="#ID" >#PRIX euros</THELIA_stock>)  </option>

2. Comment gères tu la combinaison des déclinaisons ? La combinaison de la saveur avec les kilos ? Maintenant que je vois ton code je ne suis pas certain que tu te sois occupé de ce point là.

3. Mon code semble bien marcher sur ton site, par contre, le template n'est pas trouvé :

http://www.nutrixlab.com/index.php?fond … clinaisons

Comme tu es sur une veille version de Thelia on va remplacer donc par :

http://www.nutrixlab.com/prix_declinaisons.php

Mais effectivement si tu sélectionnes 2kilos le prix change.

Le code pour Thelia 1.4 :

<script type="text/javascript">
/* <![CDATA[ */
$( document ).ready(function() {
  $( ".attribute_Flavor" ).click(function() {
	
    var id_declinaison1_valeur = $('select[name=declinaison1] option:selected').val();
    var id_declinaison2_valeur = $('select[name=declinaison2] option:selected').val();
    $.ajax({
      type: "GET",
      url: 'prix_declinaisons.php',
      data: { id_declinaison1: id_declinaison1_valeur, id_declinaison2: id_declinaison2_valeur },
      success: function(data) {
        $( '#prix_calcule' ).html( data );
      }
    });
  });
});
/* ]]> */
</script>

Last edited by alexandre (20-01-2014 11:48:07)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Merci encore de ton aide Alexandre, maintenant c'est presque tout bon, le prix change lorsque l'on change la quantité :
(ça s'affiche sous le prix en orange)
http://www.nutrixlab.com/musculation-fi … y-egg.html

Le Hic c'est que le chiffre affiché ne correspond pas au prix divisé par la quantité. J'ai l'impression que ça retourne le numéro du champ correspondant au prix et non le prix lui même...

Sa passe nickel sous Safari, et FireFox par contre sous Chrome les prix ne se changent pas bizarre.

Last edited by gzmo26 (20-01-2014 14:05:50)

Offline


Sous Chrome je n'ai pas de soucis.

Concernant le prix, on ne l'a pas encore déterminé.
J'attendais que la partie Javascript fonctionne.

Donc pour déterminer le prix tu vas utiliser les boucles Thelia.
Normalement pour ça tu n'as pas besoin de moi.


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Merci pour tes conseils alexandre, ça fait bien plaisir d'avoir de l'aide de la communauté.
Je vais donc essayer de mettre les boucles dans la page prix_declinaison.html

Merci encore
A bientôt

Offline


De rien, tu n'as pas répondu pour la combinaison des déclinaisons ?


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Et bien dans le Back Office je renseigne "Gestion des déclinaisons" avec des champs saveurs (qui n'influent pas sur le tarifs) et des champs Quantité qui ajoutent X euros au tarif du prix initial.

Un pot de protéine de 1 Kg est au de 30€ par exempte dans les caractéristiques produit du B.O et ensuite j'indique la plus-value dans les champs Quantité s'il y plusieurs poids (quantité) possible.

Donc référence unitaire au kilo qui serait de 30 € si je veux connaitre le prix de deux kilo je renseigne +20 € dans Gestion de Déclinaisons

La boucle Thélia vient bien en lieu et place de ton code ?

#ENV{id_declinaison1}
#ENV{id_declinaison2}

Offline


#ENV{id_declinaison1} et #ENV{id_declinaison2} sont en fait les identifiants de la boucle DECLIDISP.

Donc ça devrait donner quelque chose comme ça :

<THELIA_DECLI type="DECLINAISON" id="2">
    <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" id="#ENV{declinaison2}">
        #PRIX euros
    </THELIA_DECLIDISP>
</THELIA_DECLI>

A adapter et paufiner selon tes besoins.

Par contre comme tu as une gestion des stocks, même si une déclinaison n'agit pas sur le prix elle agit sur les stocks, d'où la nécessité de passer par un plugin comme combidecli par exemple.

Last edited by alexandre (20-01-2014 15:06:30)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Pardon :

Ce n'est pas #ENV{declinaison2} mais #ENV{id_declinaison2}


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


malheureusement ça ne change pas grand chose le résultat m'affiche : #PRIX euros
Je creuse encore …

Offline


Oui, c'est normal en fait, la balise declidisp n'a pas de balise PRIX.

Il manque la boucle stock.

<THELIA_DECLI type="DECLINAISON" id="2">
    <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" id="#ENV{id_declinaison2}">
        <THELIA_stock type="STOCK" produit="#PRODUIT" declidisp="#ID">
            #PRIX euros
        </THELIA_stock>
    </THELIA_DECLIDISP>
</THELIA_DECLI>

Last edited by alexandre (20-01-2014 17:33:41)


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert