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 bug quand je veux afficher l'image d'un produit lorsque j'ai 2 boucles avant d'arriver à la boucle image (en l'occurence, j'ai d'abord une boucle CARACVAL pour récupérer #CARACDISP, que j'utilise dans une boucle PRODUIT, puis dans cette boucle PRODUIT j'ai une 3ème boucle IMAGE.

Voilà le code :

						<THELIA_motif type="CARACVAL" produit="#PRODUIT_ID" caracteristique="? echo $cfg['id_carac_motif'] ; ?">
							
							<h2 class="h2b"><a href="motifs.php?id_motif=#ID"><img src="./require/titre_rub_gfx.php?titre=Motif : #VALEUR" alt="Motif : #VALEUR" /></a></h2>

							<THELIA_motifs type="PRODUIT" caracteristique="? echo $cfg['id_carac_motif'] ; ?" caracdisp="#CARACDISP" classement="aleatoire" num="4">
								#INCLURE "cadreproduit.html"
							</THELIA_motifs>
							
							<div style="clear:both;"></div>
							
						</THELIA_motif>
							<!-- CADRE PRODUIT -->
							<div class="<?php echo $cfg['cadreproduit']['type'] ; ?> cp_left">
								<div class="image">
									<a href="<?php if ( @$rewrite ) echo '#REWRITEURL' ; else echo '#URL' ; ?>">
									<T_divers_image>
										<THELIA_divers_image type="IMAGE" num="1" produit="#ID" largeur="? echo $cfg['cadreproduit']['largeur'] ; ?" hauteur="? echo $cfg['cadreproduit']['hauteur'] ; ?">
											<img src="#IMAGE" alt="#TITRE" />
										</THELIA_divers_image>
									</T_divers_image>
										<img src="./gfx/tshirt_defaut.jpg" width="<?php echo $cfg['cadreproduit']['largeur'] ; ?>" height="<?php echo $cfg['cadreproduit']['hauteur'] ; ?>" alt="#TITRE" />
									<//T_divers_image>
									</a>
								</div>
								<div class="droite">
									<h3><a href="<?php if ( @$rewrite ) echo '#REWRITEURL' ; else echo '#URL' ; ?>">#STRIPTITRE</a></h3>
									<div class="prix"><a href="<?php if ( @$rewrite ) echo '#REWRITEURL' ; else echo '#URL' ; ?>">#PRIX €</a></div>
								</div>
							</div>
							<!-- // CADRE PRODUIT -->

Mon problème est que le #ID de ma boucle THELIA_divers_image n'est pas interprété par la boucle PRODUIT, si j'echo $id dans boucleImage, j'affiche #ID au lieu de la valeur.

En affichant le $temp de boucleProduit, je me suis aperçu que mon #ID était préalablement transformé en #THNOID par le parseur (dans pre(...)). Du coup THNOID n'est pas remplacé par l'id du produit, et là, c'est le drame.

Je voudrais savoir à quoi sert le THNO... ?

Ce bug n'intervient que si je suis dans 2 boucles à la suite, si on se trouve seulement dans 1 boucle (ex: PRODUIT>IMAGE) l'image apparait correctement.

Pour l'heure en ajoutant
$temp = str_replace("#THNOID", "$row->id", $temp);
dans ma boucleProduit, j'arrive à afficher mon image, mais ... je doute que ce soit très propre.

Si quelqu'un a une explication à me donner sur l'utilité de THNO, je suis preneur.


Pierre Granger
ITI Conseil, ITI Pub, Koikispass (Nevers)
http://www.iti-conseil.com

Offline


Salut,

Je crois que THNO permet de traiter les boucles successivement par niveau d'imbrication. Lorsque une boucle est analysée ,seules les variables renvoyées par la boucles doivent être traitées, pas celle des boucles incluses dans celle-ci. Lors du prétraitement, les variables de sorties des boucles incluses  sont transformées en remplaçant # par #THNO , puis le remplacemment des variables est opéré , et lors du post traitement  #THNO est remplacé par #. Ainsi les variables de sortie des boucles incluses ne sont traitées que lors de l'analyse du niveau d'imbrication suivant.
Pour ton problème essaie ça: 
Tu emploies la forme conditionnelle dans ton cadre produit . Il faut que tu laisses une ligne vide ,(c'est la goutte d'huile du conditionnel sur Thélia).
Entre ,

<T_divers_image>
et
<THELIA_divers

et aussi entre:

</THELIA_divers_image>
et
</T_divers_image>


(Ceci dit , j'ai parfois constaté des problèmes en essayant d'imbriquer trop de boucles, et en mixant avec le systeme conditionnel. Et ça donne pas mal de boulot au serveur de calculer tout ça...)



.