THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

J'ai un soucis avec une boucle conditionnelle, j'en ai déjà mis en place une pour gérer le style d'affichage des produits à l'intérieur de mes catégories, là où j'en ai besoin d'une seconde, c'est pour afficher la possibilité d'ajouter directement au panier un produit qui ne comporterait pas de déclinaisons à seléctionner.

J'utilise donc ce code (à l'intérieur d'une boucle conditionnelle donc):

<THELIA_nouveautes type="PRODUIT" aleatoire="1" num="20" rubrique="#RUBRIQUE_ID">
					<T_dec>
					
						<THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE" produit="#ID">
							
								<!-- #ID -->
								
						</THELIA_DECLI>
						
					</T_dec>
					
						<span class="ajouter"><a href="#PANIER"><img src="cw/images/cad.png" alt="Ajouter au caddie" height="22" width="23" /></a></span>

					<//T_dec>
</THELIA_nouveautes>

... Dans la page résultant de ce code, on trouve :

					<T_dec>

					

						<BTHELIA_DECLI type="DECLINAISON" rubrique="50" produit="72">							

								<!-- #ID -->

								

						</BTHELIA_DECLI>

						

					</T_dec>

					

						<span class="ajouter"><a href="panier.php?action=ajouter&ref=32121324"><img src="cw/images/cad.png" alt="Ajouter au caddie" height="22" width="23" /></a></span>



					<//T_dec>

La boucle ainsi que la condition n'ont apparement pas été parsés (ou à moitié? quid du "B" rajouté en début d'intitulé de la boucle).. pourtant la rubrique et l'ID du produit ont bien été passés en paramètre, donc la première boucle est passée avec succès.

Merci d'avance !

Last edited by bob (29-05-2007 23:50:59)

Offline


J'ai le même problème.

C'est un bug manifeste. Tu as regardé si le bugtracker le mentionnait déjà ?

Offline


Je viens de le mettre dans le bugtracker.

Offline


Je pense qu'il y a une erreur dans la nom de la boucle.
Le code ci-dessous devrait donner de meilleurs résultats

<THELIA_nouveautes type="PRODUIT" aleatoire="1" num="20" rubrique="#RUBRIQUE_ID">
                    <T_DECLI>
                    
                        <THELIA_DECLI type="DECLINAISON" rubrique="#RUBRIQUE" produit="#ID">
                            
                                <!-- #ID -->
                                
                        </THELIA_DECLI>
                        
                    </T_DECLI>
                    
                        <span class="ajouter"><a href="#PANIER"><img src="cw/images/cad.png" alt="Ajouter au caddie" height="22" width="23" /></a></span>

                    <//T_DECLI>
</THELIA_nouveautes>

Il peut être nécessaire d'insérer une ligne de chaque côté des balises conditionnelles.

Last edited by jhr (30-05-2007 11:03:58)

Offline


Au temps pour moi, le nom des boucles doit êtres respecté, mais le bug reste : une boucle si-sinon dans une boucle si_sinon, ça marche pas.

Offline


Le nom des boucles importe peu apparement, au début j'y faisais attention, mais sans respecter cette règle, les conditions "classiques" fonctionnent parfaitement..

Last edited by bob (30-05-2007 13:29:51)

Offline


Tu as raison, la détection des problèmes de noms de boucle n'est pas top non plus. C'est d'ailleurs un autre bug que j'ai ajouté dans le bugtracker.

Offline


J'ai pas eu trop le tempos de me pencher sur un truc plus propre, mais doubler les boucles

while(strstr($res, "<THELIA")) {
        $boucles = pre($res);
        $res = boucle_simple($res, $boucles);
        $res = post($res);
    }

    // boucles avec sinon
    $res = str_replace("BTHELIA", "THELIA", $res);
    $res = boucle_sinon(explode("\n", $res));

    // boucles
   
    while(strstr($res, "<THELIA")) {
        $boucles = pre($res);
        $res = boucle_simple($res, $boucles);
        $res = post($res);
    }
ligne 82 dans moteur.php.

Je l'ai simplement recopié à la suite dans le script, si quelqu'un fait un truc plus propre je suis preneur:D

  Ca règle le problême des deux boucles sinon inbriquées.KiKiDiMerci?

Offline


Merciiiiiiiiiii ... (en attendant un patch officiel ?)

Offline


Ca donnerait donc , en plus léger:

	for ($i=0 ; $i<2 ; $i++ ){
	while(strstr($res, "<THELIA")) {
		$boucles = pre($res);
		$res = boucle_simple($res, $boucles);
		$res = post($res);
	}

	// boucles avec sinon
	$res = str_replace("BTHELIA", "THELIA", $res);
	$res = boucle_sinon(explode("\n", $res));

	// boucles
	
	while(strstr($res, "<THELIA")) {
		$boucles = pre($res);
		$res = boucle_simple($res, $boucles);
		$res = post($res);
	}}

Ca reste à vérifier mais à mon avis, une autre passe sera nécessaire dans le cas d'une troisième  boucle conditionnelle imbriquée,
soit en gros une passe en + par niveau de profondeur de boucle conditionnelle ... à confirmer...

Last edited by david49 (02-06-2007 02:22:59)

Offline


Je confirme la passe supplémentaire par niveau de boucle conditionnelle imbriquée... ceci dit je vois mon PC qui turbine un peu plus pour le calcul des boucles quand augmente la complexité du script.         

                   Il me vient alors une question:

    Ne pourrait-on pas stocker des pages déjà visitées dans un cache afin de soulager le serveur au niveau calcul , car j'imagine que le serveur sera vite saturé en cas de visites simultanées nombreuses?
                       

Qu'en pense Yoan?

Last edited by david49 (06-06-2007 05:47:14)

  • yoan
  • Cofondateur Thelia

Offline


C'est une évolution à prévoir oui.
Cependant avec les gestions de stock etc, sur un site de ecommerce, le cache a une durée de vie très limitée ...


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


J'ai une autre idée, toute simple, pour le backoffice: ajouter une option "dupliquer cette fiche" avec une référence vierge(et éventuellement mise à zero du stock dans la nouvelle fiche), pour pouvoir jouer rapidemment sur le prix en fonction des caractéristiques sans avoir à se retaper toute la fiche du produit de base.

  J'imagine que cela ne doit pas demander une trop grosse bidouille, même si je n'y ai pas encore bien regardé et que ça boosterait la saisie dans le backoffice.

 
J'ai ajouté deux fonctions dans action.php ,modifié legèrement la boucle RUBRIQUE(pour deux nouvelles variables en sortie et rajouté trois boucles  TRIDIST CRITERE et ENSTOCK qui facilitent grandement la construction des menus(avec les surlignages de la rubrique en cours ça devient vite un casse tête pour les sous-rubriques, voire les sous-sous-rubriques ou encore les sous-sous-sous-rubriques).
Certaines de ces boucles permettent aussi la persistance des filtres de recherche et la remise à zéro des critères de recherche(le petit "réinitialiser à droite du menu recherche).

la boucle Enstock permet d'afficher le stock réel d'un produit décliné(c'est bien pour éviter des stocks négatifs).

         Pour juger, voici le code de mon menu gauche
==>cliquer sur une des trois rubriques principales, pour afficher le menu gauche(désolé pour l'aspect, il y a pompage de photos et encore beaucoup de bricolage...)

 <!-- navigation verticale -->

			<div id="toutLeMenu">
				<dl id="menu">
				
					<ul>
				  
				
				<THELIA_LAPAGE type="RUBRIQUE" id="#RUBRIQUE_ID">
				
				
				
					<THELIA_COLLECTIONS type="RUBRIQUE" id="#PARENTPRINCIPAL"  boutique="1" classement="manuel">
				    
					
					
					
					<T_RUB1>
				
					<THELIA_RUB1 type="RUBRIQUE" parent="#ID" >
					<ul><li><a href="#REWRITEURL" #SELECTION> •#TITRE </a></li></ul>
										
					<THELIA_RUB2 type="RUBRIQUE" parent="#ID" >
					<ul><li><a href="#REWRITEURL" #SELECTION>     #TITRE </a></li></ul>
					<THELIA_RUB3 type="RUBRIQUE" parent="#ID" >
					<li><a href="#REWRITEURL" #SELECTION>      –#TITRE </a></li>
					<THELIA_RUB4 type="RUBRIQUE" parent="#ID" >
					<li><a href="#REWRITEURL" #SELECTION>      ....#TITRE </a></li>
															
					</THELIA_RUB4>	
					
					</THELIA_RUB3>					
					
					</THELIA_RUB2>
					
					</THELIA_RUB1>		
					
					</T_RUB1>		
					
					<//T_RUB1>

				</THELIA_COLLECTIONS>
					
				</THELIA_LAPAGE>
					
				</dl>
			</div>
			
			<THELIA_contenu type="CONTENU" dossier="1" classement="manuel">
					<dt><a href="#REWRITEURL">#TITRE</a></dt>
					</THELIA_contenu>

Je suis sur qu'il y aura des amateurs... Je soumettrai volontier les modifs mais avant de faire n'importe quoi dans tous les sens , je pauffine encore un peu(je dois rajouter les filtres par déclinaison que je n'ai pas encore programmé)

   et j'attends l'avis du guru Yoan...

Last edited by david49 (29-06-2007 19:21:57)