THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour à tous,

Je cherche à afficher les déclinaisons sur ma page Produits, seulement quand elles sont existantes. Cela n'apparait pas pour l'instant avec mon squelette actuel.

J'ai lu quelques sujets sur le forum, mais tout ce que j'ai trouvé fonctionnait avec une base de stock. Quand le stock est supérieur à zéro, alors la déclinaisons apparaît. Cependant, sur le site que je construis, il n'y aura pas de gestion de stock propre au site.

Sur mes produits, j'ai des stocks qui finissent par être négatifs, mais je m'en fiche car je ne les fait pas apparaître sur le site. Mais pour les déclinaisons, je ne peux pas en faire autant ...

Vous auriez une solution à me proposer ?

Offline


Salut,

c'est ce qu'il y a de plus simple smile.  tu utilises la solution du wiki mais sans boucle conditionnelle et sans paramètre stockmini dans  la boucle declidisp

jb

Offline


Salut et merci de ta réponse. Tu parles de cet exemple du wiki :

http://wiki.thelia.fr/index.php/La_bouc … _et_thelia

Par contre, en virant une boucle conditionnelle et le stockmini, il ne va pas m'afficher également les déclinaisons même lorsqu'elle n'existe pas ?

A noter d'ailleurs que mes déclinaisons ont parfois des prix différents ...

Offline


non je parle plutôt de cet exemple là :

http://wiki.thelia.fr/index.php/Sur_la_page_produits

je ne connaissais pas cette page sur spip l'exemple est mal codé, il fait un usage excessif des boucles conditionnelles et des balises </T_> sont mal placées (à première vue rapide).

Concrètement, sans avoir testé essaye d'adapter ça à SPIP :

<form action="panier.php" method="post">
    <input type="hidden" name="action" value="ajouter" />
    <input type="hidden" name="ref" value="#REF" />
    <THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE_ID" produit="#ID">		                    
      <p> #TITRE :
       <select name="declinaison#ID" >
        <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT">
            <option value="#ID">#TITRE</option>
          </THELIA_DECLIDISP>
		                        
        </select>
    </THELIA_DECLI>
      </p>
<input type="submit" />
</form>

Last edited by ottoroots (22-05-2009 16:43:58)

Offline


Nan, mais je ne suis pas sur Spip, donc ça me va très bien ce qui est fait pour Thélia, merci smile Je vais jeter un oeil ...

Offline


Pour virer la condition dans la boucle, je vire simplement le texte "aucune déclinaison" entre :

    </T_DECLI>
               
      Aucune déclinaison
                   
    <//T_DECLI>

C'est ça ?

Offline


Oui


Aide les autres, ils t'aideront en retour.

Offline


Ok alors ça ne va pas, parce que du coup, il m'affiche les déclinaisons même quand elles n'existent pas pour un produit.

Je vais tenter d'expliquer mon besoin :

J'aimerai que s'affiche les déclinaisons uniquement pour les produits qui en ont véritablement. Cependant, nous n'utilisons pas la gestion de stock de Thélia. Donc, là ça devient complexe à gérer. Si je mets "1" dans chaque déclinaison existante pour un produit, il va devenir zéro à la première commande ... Y'a pas un code, quelque chose, pour donner un nombre infini en stock ?

J'ai un autre soucis, mais on pourra en parler après.

Merci smile

Offline


Fais voir ton code entier stp wink


Aide les autres, ils t'aideront en retour.

Offline


Et voilà :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
#INCLURE "thelia0002/inc/get_copyleft.html"

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><THELIA_PROD type="PRODUIT" ref="#PRODUIT_REF">#TITRE</THELIA_PROD> > #RUBRIQUE_NOM > ::catalogue:: > #VARIABLE(nomsite)</title>


#INCLURE "thelia0002/inc/get_thelia0001meta.html"
#INCLURE "thelia0002/inc/get_thelia0001css.html"
#INCLURE "thelia0002/inc/get_thelia0001javascript.html"

</head>

<body>
<!-- Page -->
<div id="Page">

	<!-- Entete -->
	<!-- Entete -->
    #INCLURE "thelia0002/inc/get_entete_catalogue.html"
	<!-- /Entete -->
    
	<!-- Sous Menu - Hierarchie -->
	#INCLURE "thelia0002/inc/get_hierarchie.html"
	<!-- /Sous Menu - Hierarchie -->
    
    <!-- Contenant -->
    <div id="ContenantCentraleProduit">
    
    <!-- Cartouche rub en cours gauche -->
    <div class="RubriqueEnCoursGauche">
    
    <div class="RubriqueEnCoursGaucheTitre"><strong>
	  <T_niv1>
	  <THELIA_niv1 type="CHEMIN" rubrique="#RUBRIQUE_ID" niveau="1">
		#TITRE
	  </THELIA_niv1>
	  </T_niv1>
	  	#RUBRIQUE_NOM
	  <//T_niv1>
	</strong>
    
    <THELIA_rub type="RUBRIQUE" id="#RUBRIQUE_ID">
    <div class="RubriqueEnCoursGaucheLogoRub" <THELIA_IMAGE type="IMAGE" num="1" rubrique="#ID">style="background: url(#GRANDE) no-repeat right top;"</THELIA_IMAGE>>    </div>
    </THELIA_rub>
    
    <THELIA_rub type="CHEMIN" rubrique="#RUBRIQUE_ID" niveau="1">
    <div class="RubriqueEnCoursGaucheLogoRub" <THELIA_IMAGE type="IMAGE" num="1" rubrique="#ID">style="background: url(#GRANDE) no-repeat right top;"</THELIA_IMAGE>>    </div>  
    </THELIA_rub>
    
    </div>
    
    <div class="RubriqueEnCoursGaucheListeSousRub">
    <strong class="normal">::les_rubriques::</strong>
      <ul>
	  
	      <T_rub0>
		  
            <THELIA_rub0 type="CHEMIN" rubrique="#RUBRIQUE_ID" niveau="1">
					
        	    <THELIA_rub1 type="RUBRIQUE" parent="#ID">
				   <THELIA_rubsel type="RUBRIQUE" id="#ID" courante="1">
            	    <li><a href="#URL" class="selected">#TITRE</a></li>
				   </THELIA_rubsel>
				   <THELIA_rubpassel type="RUBRIQUE" id="#ID" courante="0">
            	    <li><a href="#URL">#TITRE</a></li>
				   </THELIA_rubpassel>
				   	
       			</THELIA_rub1>
           
			</THELIA_rub0>
        
		</T_rub0>
		
       	    <THELIA_rub2 type="RUBRIQUE" parent="#RUBRIQUE_ID">
           	    <li><a href="#URL">#TITRE</a></li>
     		</THELIA_rub2>
            
		<//T_rub0>
		
		
		</ul>
    </div>
        
        
    </div>
    <!-- /Cartouche rub en cours gauche -->
    
    <!-- Cartouche rub en cours droite -->
    <div class="ProduitDroite">
    
	
	
    <THELIA_PROD type="PRODUIT" ref="#PRODUIT_REF">
		
	<form action="panier.php" method="post">
    <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">
		                    
      <p> #TITRE :
        <select name="declinaison#ID" >
          <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT">
            <option value="#ID">#TITRE</option>
          </THELIA_DECLIDISP>
		                        
        </select>
    </THELIA_DECLI>
      </p>
    </T_DECLI>
                                    
    <//T_DECLI>
      <input type="image" src="bt_ajout_panier.png" border="0" /></a>
	</form>



    <div class="ProduitsDetail">
    	<ul>
        	<li class="TitreProduit">#TITRE</li>
            <li class="DescriptifProduit"><strong>::produit_reference::</strong> #REF</li>
            <li class="DescriptifProduit"><strong>::produit_descriptif::</strong> #DESCRIPTION</li>
            <THELIA_CARACTITRES type="CARACTERISTIQUE" produit="#ID" affiche="1">
            <li class="DescriptifProduit"><strong>#TITRE :</strong><br />
            <THELIA_CARACVALEURS type="CARACVAL" caracteristique="#ID" produit="#PRODUIT">
            #VALEUR,
            </THELIA_CARACVALEURS>
            </li>
            </THELIA_CARACTITRES>
            <T_PROMO>
            <THELIA_PROMO type="PRODUIT" ref="#PRODUIT_REF" promo="1">
            <li class="PrixProduit">::produit_prix_promo::<strong> #PRIX2 €</strong></li>
            </THELIA_PROMO>
            </T_PROMO>
            <li class="PrixProduit">::produit_prix::<strong> #PRIX €</strong></li>
            <//T_PROMO>
            <li class="Livraison"></li>
            <li class="BtnPanier"><a href="panier.php?action=ajouter&ref=#REF">::ajouter::</a></li>
            
		</ul>
    </div>
            
    <div id="ProduitsImg">
        
        <div id="large">
        <div id="Filigranne"></div>
    <THELIA_img type="IMAGE" num="1" produit="#ID" largeur="400">
         	<img src="#GRANDE" alt="#PRODTITRE" title="#TITRE" border="0" />
        </THELIA_img>
        </div>

        <ul id="thumbnail">
        <THELIA_img type="IMAGE" num="15" produit="#ID">
        	<li><a href="#GRANDE" title="#TITRE">#COMPT</a></li>         
        </THELIA_img>
        </ul>
    </div>

    </div>
    
    </THELIA_PROD>
    <!-- /Cartouche rub en cours droite -->
    
    <div class="EffaceurGaucheDroite"></div>
    
    </div>
    <!-- /Contenant -->
    
    <!-- Pied -->
    #INCLURE "thelia0002/inc/get_pied_catalogue.html"
    <!-- /Pied -->
    
</div>
<!-- /Page -->
</body>
</html>

Offline


Il me semble qu'il faut incorporer le stockmini="1" sinon tu auras forcément tout hmm

Last edited by Elyos (22-05-2009 17:50:41)


Aide les autres, ils t'aideront en retour.

Offline


Donc, le client sera obligé de maintenir une gestion de stock pour que ça fonctionne ? Je ne peux pas faire en sorte que lorsque le client commande, ce produit ne soit pas décompté du stock ?

Offline


Re,

Effectivement.. en creusant un peu le moteur je me rend compte que le paramètre d'entrée "produit" de la boucle "declidisp" ne fonctionne qu'avec le paramètre stockmini. Si ce dernier n'est pas renseigné "produit" est ignoré.... Doit y avoir une solution....

Offline


essaye un truc comme ça :

<THELIA_PROD type="PRODUIT".....>
<THELIA_DEC  type="DECLINAISON" produit="#ID">
<THELIA_DECLISP type="DECLIDISP" produit="#PRODUIT" declinaison="ID">
<THELIA_STOCK type ="STOCK" produit="#PRODUIT" declinaison="#ID" declidisp="#DECLIDISP">
#DECLIDISP
</THELIA_DECLISP>
</THELIA_DEC>
</THELIA_PROD>

dis-moi ce que ça sort.

Offline


bon c'est encore moi... A force de creuser je vais finir par trouver du pétrole...

la boucle "declinaison"* a cela de particulier qu'elle accepte un paramètre d'entrée "produit" mais que ce paramètre "glisse" jusqu'au paramètre de sortie #PRODUIT sans impacter la requête de la boucle.... Donc :

1° Normalement la boucle <THELIA_DEC> ci-dessus devrait être inutile
2° le paramètre de sortie "declinaison" de <THELIA_DECLISP> n'aurait donc plus lieu d'être
3° la valeur de son paramètre produit deviendrait produit="#ID"
4° Les valeurs de #DECLIDISP dans "stock"sont normalement des ID => à transformer par une boucle declidisp.

Je ne teste rien je suppute par la lecture du moteur.


jb

* et la boucle declidisp aussi d'ailleurs si pas de stockmini... ici on va néanmoins en avoir besoin pour transmettre à la sous-boucle suivante (stock) l'ID de ce produit.

Last edited by ottoroots (22-05-2009 19:17:29)

Offline


Et en filtrant pour vérifier qu'il existe bien une valeur dans la déclinaison ?


Aide les autres, ils t'aideront en retour.

Offline


le problème vient de l'organisation des tables dans la base : au niveau des déclinaisons c'est plutôt complexe : "declinaison" et "declidisp" ne font pas référence à des produits. En fait seule les tables "exdecprod" (les declidisp désactivées pour un produit) et "stock" rattachent une declidisp à un produit et en natif la boucle declidisp prend en compte le paramètre d'entrée "produit" que si il est couplé à "stockmini" (je me répète...). Bref c'est un peu verrouillé. Je me vois mal refaire une boucle declidisp en plugin mais bon c'est une piste. Jvé voir...

Last edited by ottoroots (23-05-2009 00:40:05)

Offline


Bon, en fait, il y a une solution triviale au problème initial :

si tu utilises le code du wiki et que tu mets stockmini="-100000" par exemple, tu n'as plus besoin de te soucier du stock réel jusqu'à ce qu'il atteigne.... -100000. J'ai pas essayé avec -10000000000 mais peut-être que ça passe. En tout cas, tu peux mettre un stockmini négatif et ainsi voir affichées les déclidisp activées pour ce produit, indépendamment du niveau de leur stock (enfin presque...)

La solution certainement la plus simple à ta demande.

vé me coucher moi.

jb

Offline


Merci à vous ! Désolé, je me suis absenté hier. Je vais regarder vos solutions et vous tiens au courant. Quoiqu'il en soit, merci de vous être intéressé à mon prob smile

Offline


ottoroots wrote:

Bon, en fait, il y a une solution triviale au problème initial :

si tu utilises le code du wiki et que tu mets stockmini="-100000" par exemple, tu n'as plus besoin de te soucier du stock réel jusqu'à ce qu'il atteigne.... -100000. J'ai pas essayé avec -10000000000 mais peut-être que ça passe. En tout cas, tu peux mettre un stockmini négatif et ainsi voir affichées les déclidisp activées pour ce produit, indépendamment du niveau de leur stock (enfin presque...)

La solution certainement la plus simple à ta demande.

vé me coucher moi.

jb

Alors le stockmini, c'est cool, ça résout le prob du stock. Sauf que ... Si un nouveau produit est créé, et qu'il n'a pas ces déclinaisons, elles apparaîtront néanmoins à cause du stockmini = "-100000".

C'est vraiment chaud, et je suis étonné que cela ne soit pas pris en compte. Remarque, je pourrai faire l'inverse, mettre des chiffres énormes en stock, genre 100 000 pour chaque déclinaison. Quand ce produit ne se vend plus, il suffit de le remettre à zéro tout simplement ...

Offline


Hello,

quand tu créées un nouveau produit, tout dépend de la rubrique de rattachement : si ta rubrique possède la declinaison "couleur", le nouveau produit rattaché à cette rubrique porte bien la déclinaison "couleur". Pour les declidisp (bleu, jaune, rouge..) de cette déclinaison, ils seront activés par défaut pour ce produit. Si le produit ne possède pas une ou plusieurs declidisp (ex : le nouveau produit n'existe pas en rouge), il faut désactiver le rouge lors de la création du nouveau produit.

Je ne vois pas ce qui cloche à cet endroit...

En fait, je ne sais pas bien pourquoi, je dois revoir tout mon raisonnement, mais un nouveau test aujourd'hui sur base neuve avec la boucle du Wiki par défaut et sans paramètre stockmini dans la boucle declidisp (mais paramètre "rubrique" dans la boucle déclinaison), ça fonctionne très bien... c'est le paramètre rubrique de la boucle "déclinaison" qui est important ici... Je n'ai plus de stockmini et mes déclinaisons et declidisp associées remontent très bien : si on les désactive dans le BO elles ne sont plus disponibles et inversement. le stock se gère tout seul en roue libre (il devient négatif sans conséquence).

J'ai encore du travail pour maîtriser pleinement les déclinaisons... Mais j'avance smile


@+

Offline


ottoroots wrote:

Hello,

quand tu créées un nouveau produit, tout dépend de la rubrique de rattachement : si ta rubrique possède la declinaison "couleur", le nouveau produit rattaché à cette rubrique porte bien la déclinaison "couleur". Pour les declidisp (bleu, jaune, rouge..) de cette déclinaison, ils seront activés par défaut pour ce produit. Si le produit ne possède pas une ou plusieurs declidisp (ex : le nouveau produit n'existe pas en rouge), il faut désactiver le rouge lors de la création du nouveau produit.

Je ne vois pas ce qui cloche à cet endroit...

Voilà comment je créé mes déclinaisons :

Gestion du catalogue / Les déclinaisons

De là, quand je créé une déclinaison que l'on va appeler "coloris", je ne peux pas l'attribuer à une rubrique ?

Sur le site que je fais, voilà comment ça fonctionne :

Nous avons créé une déclinaison "coloris" qui contient plusieurs coloris. Le site contient plusieurs catégories : "linge de maison", "linge de lit", etc. La plupart des modèles vendus sont des modèles à motifs, donc le coloris on s'en fout. Mais pour certains, par exemple, une taie d'oreiller unie, nous allons avoir besoin de déclinaison colorie. Tu me suis ?

Offline


ok.

Tu utilises les déclinaisons à bon escient.

Par défaut si tu crées une déclinaison elle est active dans toutes les rubriques, sous-rubriques...
Si tu as des rubriques pour lesquelles tu n'auras pas besoin de "coloris", dans aucun produit de la rubrique, tu désactives la déclinaison au niveau de la rubrique de rattachement.
Pour les rubriques susceptibles de contenir un produit avec "coloris" tu laisses "coloris" actif au niveau de la déclinaison.

Quand tu créés un produit dans ces catégories, tu paramètres l'activation/désactivation des déclidisp pour chaque produit. ainsi si dans linge de maison tu n'auras pas de coloris unis tu agis au niveau de la rubrique.

Par défaut dans Thélia tout est activé à la création :
1° si tu créés une déclinaison, elle est active dans toutes les rubriques
2° si tu créés une declidisp elle est active dans tous les produits qui ont la déclianaison.
3° si tu créés un produit dans une rubrique avec déclinaison, les declidisp de cette déclinaison sont activées pour ce nouveau produit.

Modifier ce comportement est possible

Dans un post récent de ce forum j'explique où modifier légèrement le moteur pour les 2 premiers cas. Le 3ième ne doit pas être plus sorcier....
Faut juste avoir envie de toucher au code ce que je ne te conseille pas.

Offline


Super, je n'avais pas vu (en fait, j'avais vu mais oublié) que l'on pouvait virer des déclinaisons pour certaines rubriques. Ca c'est cool déjà, merci :-)

L'unique problème de Thélia est peut-être son manque de documentation, sa force, par contre, c'est vous. Ces deux derniers jours, j'ai reçu une aide vraiment incroyable de plusieurs membres du forum.

Maintenant, mon dernier soucis, c'est d'intégrer pleinement les déclinaisons dans mon squelette. A l'heure actuelle, les déclinaisons apparaisse dans une liste déroulante. Par contre, que j'en sélectionne un ou l'autre au moment de la commande dans la page produit n'influe aucunement sur ma commande (le coloris n'est pas pris en compte et le prix ne change pas (j'ai un surplus sur certains coloris)).

Offline


Tu dois utiliser un <submit> pour mettre au panier et non le lien mis par défaut.

Ensuite, normalement, pour voir dans le panier la déclinaison et sa valeur sélectionnée tu utilises le tag #DECTEXTE dans ta boucle panier.

Pour le surplus c'est plus embêtant. Normalement encore, le prix est modifié par le chargement d'un produit dans le panier. Peux-tu me montrer l'url générée par ton formulaire ?