THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


En ajoutant la boucle conditionnelle pour prendre en compte les produits sans déclinaison...je m'aperçois que tout marche !!!

Voici le code du formulaire panier

<form action="#URLPANIER" method="post" name="formpanier#ARTICLE" id="formpanier#ARTICLE">
                	<input type="hidden" name="article" value="#ARTICLE" />
                	<input type="hidden" name="action" value="modifier" />			
                    <!-- -->
                    <T_STOCK>
                        <THELIA_DECVAL2 type="DECVAL" article="#ARTICLE" declinaison="#DECLINAISON_ID" ref="#REF">
                            <THELIA_stockprod type="STOCK" article="#ARTICLE" produit="#ID" declinaison="#DECLINAISON">
                                <select name="quantite" size="1" class="zoneDeSaisie" onchange="document.formpanier#ARTICLE.submit()">
                                <THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
                                <option value="#NUM" #SELECTED style="width:20px;">#NUM</option>
                                </THELIA_quantite>
                                </select>
                            </THELIA_stockprod>
                        </THELIA_DECVAL2>
                    </T_STOCK>
                        <THELIA_stockprod type="STOCK" produit="#ID" declinaison="1" article="#ARTICLE">
                        <select name="quantite" size="1" class="zoneDeSaisie" onchange="document.formpanier#ARTICLE.submit()">
                        <THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
                        <option value="#NUM" #SELECTED style="width:20px;">#NUM</option>
                        </THELIA_quantite>
                        </select>
                    	</THELIA_stockprod>
                    <//T_STOCK>
                    </form>

et formulaire page produit

<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 #CHAPO :
                    <select name="declinaison#ID" >
                    <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT" stockmini="1">
                    <option value="#ID">#TITRE</option>
                    </THELIA_DECLIDISP>        
                    </select></p>
                    </THELIA_DECLI>
                    </T_DECLI>
                    <!--aucune déclinaison ecrire ici      --> 
                    <//T_DECLI>
                    
                    <T_sistock>
                    <THELIA_sistock type="PRODUIT" ref="#REF" stockmini="1">
                    <!-- Bouton panier si stock > 1 -->
                    <input type="image" src="admin/gfx/bt_ajout_panier.png" border="0" />
                    </form>

Last edited by jeep05 (27-04-2009 19:18:48)

Offline


Bonjour
j'ai lu avec intéret ce post et notamment les remarques d'Ottoroots sur la limitation de thélia / à la combinaisons de déclinaison entre elles (et la gestion du stock).

Ottoroots penses tu que cette limitation (ainsi que celle portant sur des combinatoires impossibles entre valeurs de déclinaisons) puisse etre levée (dans un horizon d'attente "raisonnable") ? J'avoue que dans mon cas, cette borne est vraiment trés problematique, mais comme tu as l'air de t'interesser à la question et que tu parlais de "quelques semaines de patience"... peut etre y a t-il du nouveau ?

en tout cas merci de ton implication active sur le forum (et pour ton petit guide que je commence à lire)

Last edited by Madrilene (11-08-2009 10:19:32)

Offline


Bonjour à tous, juste pour savoir s'il y avait du nouveau sur ce problème de stock par déclinaison (surtout dans le panier) ou si la bidouille du fichier boucle est toujours nécessaire ?

Merci !

Offline


Malheureusement, je crois bien que oui, il faut toujours bidouiller le code source.

Je suis en train de faire la manip, et j'ai un problème (plusieurs en fait, mais je ne vais parler que d'un à la fois...)

Ok pour les modifs dans boucle.php, tout va bien, et DECVAL me renvoie l'ID, je suis content.
Ok pour avoir le stock avec une déclinaison, c'est parfait.

Mon souci commence lorsque je voudrais gérer aussi les produits sans déclinaison.

La boucle conditionnelle proposée ci-dessus par jeep05 ne marche pas chez moi (même en la renommant pour correspondre à une boucle thelia, en l'occurrence celle du DECVAL)

La lecture du forum me permet de penser que c'est parce qu'elle est imbriquée dans une autre boucle conditionnelle (T_CONTENU_PANIER qui teste si le panier est vide ou non et englobe l'ensemble du code panier comme dans le template).

D'où une question : comment faire? faut-il faire deux fichiers paniervide.html et panier.html ?

Offline


J'ai l'amorce d'une solution à mon problème. Et besoin d'aide ;-)

En utilisant des filtres, j'arrive presque à ce qu'il me faut

<form action="#URLPANIER" method="post" name="formpanier#ARTICLE" id="formpanier#ARTICLE">
                      <input type="hidden" name="article" value="#ARTICLE" />
                      <input type="hidden" name="action" value="modifier" />
                      <select name="quantite" size="1" onchange="document.formpanier#ARTICLE.submit()">
                      #FILTRE_vide(#DECVAL||
						<THELIA_DEC type="DECVAL" article="#ARTICLE"  ref="#REF">
							<THELIA_stock1 type="STOCK" article="#ARTICLE" produit="#ID" declidisp="#DECLIDISP">
								<THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
									<option value="#NUM" #SELECTED>#NUM</option>
								</THELIA_quantite>
							</THELIA_stock1>
						</THELIA_DEC>
						)
						<!-- ||si pas de déclinaison
						<THELIA_quantiteSansDecli type="QUANTITE" article="#ARTICLE">
                        <option value="#NUM" #SELECTED >#NUM</option>
                        </THELIA_quantiteSansDecli> -->
                      
					  </select>
                </form>

Seulement, voilà, il me faudrait un filtre_videsinon(), quelqu'un peut m'aider à coder ça? (je suis nul en php)
Par ailleurs, le filtre_vide semble me donner le résultat inverse de celui qui est décrit dans le wiki, mais ça, ce n'est pas un souci.

Offline


Bonjour,

Et en utilisant le filtre diffsinon, tu peux arriver à ce que tu souhaites.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Excellent! ça a l'air de marcher.

voici le code que j'ai utilisé

<form action="#URLPANIER" method="post" name="formpanier#ARTICLE" id="formpanier#ARTICLE">
                      <input type="hidden" name="article" value="#ARTICLE" />
                      <input type="hidden" name="action" value="modifier" />
                      <select name="quantite" size="1" onchange="document.formpanier#ARTICLE.submit()">
                    
					  #FILTRE_diffsinon(#DECVAL||||
						<THELIA_DEC type="DECVAL" article="#ARTICLE"  ref="#REF">
							<THELIA_stock1 type="STOCK" article="#ARTICLE" produit="#ID" declidisp="#DECLIDISP">
								<THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
									<option value="#NUM" #SELECTED>#NUM</option>
								</THELIA_quantite>
							</THELIA_stock1>
						</THELIA_DEC>
						||
						<THELIA_quantiteSansDecli type="QUANTITE" article="#ARTICLE">
                        <option value="#NUM" #SELECTED >#NUM</option>
                        </THELIA_quantiteSansDecli> 
						)
					  </select>
                </form>

Offline


Salut,

suite mise à jour Thelia j'avais écrasé le fichier boucles.php
Je viens de m'en apercevoir car la modif de ce post ne fonctionnait plus !

Du coup je récapitule

MODIFICATION fichier : fonctions/boucles.php

else $valeur = $tperso->valeur;
            
            $tprod= new Produit();
            $tprod->charger($ref);
                
            $temp = str_replace("#DECLITITRE", "$tdeclinaisondesc->titre", $texte);
            $temp = str_replace("#DECLINAISON", "$tdeclinaisondesc->declinaison", $temp);
            $temp = str_replace("#REF", "$ref", $temp);    
            $temp = str_replace("#ARTICLE", "$article", $temp);    
            $temp = str_replace("#VALEUR", "$valeur", $temp);    
            $temp = str_replace("#DECLIDISP", "$tdeclidispdesc->declidisp", $temp);
            
            $temp = str_replace("#ID", "$tprod->id", $temp);
            
            $res .= $temp;

MODIFICATION PAGE PANIER

<form action="#URLPANIER" method="post" name="formpanier#ARTICLE" id="formpanier#ARTICLE">
                	<input type="hidden" name="article" value="#ARTICLE" />
                	<input type="hidden" name="action" value="modifier" />                    
                    <T_DECVAL2>
                        <THELIA_DECVAL2 type="DECVAL" article="#ARTICLE" declinaison="#DECLINAISON_ID" ref="#REF">
                            <THELIA_stockprod type="STOCK" article="#ARTICLE" produit="#ID" declinaison="#DECLINAISON">
                                <select name="quantite" size="1" class="zoneDeSaisie" onchange="document.formpanier#ARTICLE.submit()">
                                <THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
                                <option value="#NUM" #SELECTED style="width:20px;">#NUM</option>
                                </THELIA_quantite>
                                </select>
                            </THELIA_stockprod>
                        </THELIA_DECVAL2>
                    </T_DECVAL2>
                        <THELIA_stockprod2 type="STOCK" produit="#ID" declinaison="1" article="#ARTICLE">
                        <select name="quantite" size="1" class="zoneDeSaisie" onchange="document.formpanier#ARTICLE.submit()">
                        <THELIA_quantite type="QUANTITE" article="#ARTICLE" max="#VALEUR">
                        <option value="#NUM" #SELECTED style="width:20px;">#NUM</option>
                        </THELIA_quantite>
                        </select>
                    	</THELIA_stockprod2>
                    <//T_DECVAL2>
                    </form>

MODIFICATION PAGE PRODUIT

<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 #CHAPO :
                    <select name="declinaison#ID" >
                    <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT" stockmini="1">
                    <option value="#ID">#TITRE</option>
                    </THELIA_DECLIDISP>        
                    </select></p>
                    </THELIA_DECLI>
                    </T_DECLI>
                    <!--aucune déclinaison ecrire ici      --> 
                    <//T_DECLI>
                    
                    <T_sistock>
                    <THELIA_sistock type="PRODUIT" ref="#REF" stockmini="1">
                    <!-- Bouton panier si stock > 1 -->
                    <input type="image" src="admin/gfx/bt_ajout_panier.png" border="0" />
                    </form>

Offline


dans la dernière version de Thelia (1.5.0) 

J'ai trouvé cette solution pour la page produit  (inspiré de celle de jeep05) :

si le stock général est a 0 ça affiche : actuellement indisponible

si le stock général et supérieur à 0 (sans déclinaison) ca affiche l'ajout panier

si déclinaison avec un stock par déclinsaison alors ça affiche la liste des attribut de déclinaison qui ont un stock et le bouton ajout panier.

En gros ca permet de pas avoir de déclinaison sans stock et de pouvoir quand meme afficher un produit qui n'a pas de déclinaison tout en gérant les stocks

<form action="?fond=panier" method="post">
<input type="hidden" name="action" value="ajouter" />
<input type="hidden" name="ref" value="#REF" />
<T_sistock>
 <T_DECLI>
  <THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE_ID" produit="#ID" stockmini="1">
   <p>#TITRE:
    <select name="declinaison#ID" >
    <THELIA_DECLIDISP type="DECLIDISP" declinaison="#ID" produit="#PRODUIT" stockmini="1">
     <option value="#ID">#TITRE</option>
    </THELIA_DECLIDISP>  
   </select></p>
  </THELIA_DECLI>
  <br />
 </T_DECLI>
  <!--aucune déclinaison ecrire ici --> 
 <//T_DECLI>
 <THELIA_sistock type="PRODUIT" ref="#REF" stockmini="1">
  <!-- Bouton panier si stock > 1 -->
  <input type="image" src="template/images/charte/bt_ajout_panier.png" border="0" />
 </THELIA_sistock>
</T_sistock>
  Actuellement indisponible !
<//T_sistock>	                    
</form>

Offline


Je reviens sur ce post, car je n'ai pas non plus trouvé de solution. Je récapitule le pb (c'est un ex. bien sûr) :
- un article a un stock de 3. Je l'ajoute à mon panier.
- dans la page panier, je peux sélectionner une quantité supérieure à 3 pour cet article. Or, si je n'en ai réellement pas plus de 3 dans mon stock, celui-ci se retrouve en négatif. De plus, je suis bien incapable d'honorer ma commande (puisque mon stock était juste et que je n'avais pas plus de 3 articles).
La question est : comment récupérer dans le panier les stocks réels du produit, de façon à ce que le client ne puisse pas commander plus d'articles que j'en ai ?
Petite précision : j'utilise combidecli car j'ai de nombreuses déclinaisons à gérer.
A.


v. 1.5.4 - v 2.3.4 - v 2.4.3

Offline


La boucle "QUANTITE" de combidecli permet de récupérer sur la page panier le stock disponible.


OpenStudio Toulouse

Offline


C'est ce que je croyais, mais ça ne fonctionne pas. J'ai bien un stock de 3 mais dans le panier, la quantité commandable est 5. Pourtant, j'utilise la boucle du readme

<select name="quantite" size="1" onchange="document.formpanier#ARTICLE.submit()">
	                      <THELIA_quantite type="COMBIDECLI" boucle="QUANTITE" article="#ARTICLE">
		                      <option value="#NUM" #SELECTED>#NUM</option>
	                      </THELIA_quantite>
	                      </select>

J'ai bien sûr essayer en faisant une boucle stock plutôt que quantité, mais ça n'est pas mieux.
En fait, en y regardant de plus près, je n'ai pas activé les combinaisons sur cet article en particulier, car il n'a qu'une déclinaison (déclinaison de couleur). Je suppose que c'est ce qui pose le problème. J'ai essayé d'activer les combinaisons, même si je n'ai qu'une déclinaison, mais du coup, j'ai une quantité de 8 dans mon panier pour l'article bleu (au lieu de 3 attendu car j'ai un stock de 5 en vert et de 3 en bleu).
Est-ce qu'il faut faire une boucle conditionnelle ?


v. 1.5.4 - v 2.3.4 - v 2.4.3

Offline


Quel est le détail exact des stocks par déclinaison et déclinaison combinée sur cet article ?


OpenStudio Toulouse

Offline


Sur cet article, j'ai une seule déclinaison qui s'appelle "couleur". Le stock en bleu est 3 et le stock en vert est 5. Du coup, je n'ai pas activé la combinaison de déclinaisons, vu que je n'ai qu'une déclinaison.
J'ai d'autres articles avec des tailles et dans ce cas, j'active la combinaison des déclinaisons (couleur et tailles). Et là, la boucle quantité fonctionne.


v. 1.5.4 - v 2.3.4 - v 2.4.3

Offline


Je comprends mieux. Il semblerait donc que la boucle quantité de combidecli ne fonctionne pas correctement sur des produits où les combinaisons de déclinaisons ne sont pas activées ?


OpenStudio Toulouse

Offline


oui, ça a bien l'air d'être le problème.


v. 1.5.4 - v 2.3.4 - v 2.4.3

Offline


Je crois que j'ai trouvé le bug. Peux tu remplacer, dans le fichier Combidecli.class.php, à la ligne 865 :

			else

par

			else if ($article !== false) {
				// Dans le panier, déterminer quelle est la declidisp choisie pour cette declinaison
				$art = $_SESSION['navig']->panier->tabarticle[$article];

				foreach($art->perso as $perso) {
					if ($perso->declinaison == $declinaison) {

						$stock = new Stock();

						if ($stock->charger($perso->valeur, $art->produit->id))
						{
							$surplus += $stock->surplus;
							$stockproduit += $stock->valeur;

							$utiliser_stock_produit = false;
						}

						break;
					}
				}
			}
			else

Dis moi ensuite si ton problème est résolu. Merci d'aider au debug smile


OpenStudio Toulouse

Offline


Bonjour Roadster31,
Super, ça marche. J'ai testé avec plusieurs types d'articles (avec et sans combinaisons) et ça fonctionne. Les quantités sont bien limités à mon stock, dans tous les cas de figure.
Merci beaucoup !
A.


v. 1.5.4 - v 2.3.4 - v 2.4.3

Offline


Merci pour ton retour, je met à jour le plugin.


OpenStudio Toulouse