THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bien le bonjour à tous !

Je me permet de vous déranger car je rencontre un problème lorsque je tente de récupérer la rubrique à laquelle appartient un produit commandé.

Pour cela, j'effectue la série de boucle ci-dessous :

<!--Si le client est connecté -->
<THELIA SI CONNECTE>
     
   <!-- On liste ses commandes -->
   <THELIA_CMD type="COMMANDE" client="#CLIENT_ID" statut="paye">

      <!-- Pour chaque commande on liste les produits commandés -->
      <THELIA_PROD type="VENTEPROD" commande="#ID">

         <!-- Pour chaque produit on regarde s'il appartient à la rubrique voulue -->
         <T_CONTRAT>
            <THELIA_CONTRAT type="PRODUIT" rubrique="30" ref="#REF">
               Produit de la rubrique 30 détecté : #REF
            </THELIA_CONTRAT>
         </T_CONTRAT>

         <//T_CONTRAT>

      </THELIA_PROD>

   </THELIA_CMD>

</THELIA SI CONNECTE>


Au final, bien que certaines commandes contiennent des produits de la catégorie 30, aucun n'est détecté. Après plusieurs tests, le problème semble venir du critère ref="#REF".

Alors est-ce qu'il y aurait confusion entre la valeur #REF de la boucle THELIA_PROD et la valeur #REF de la boucle THELIA_CONTRAT ? Et dans ce cas, est-il possible de préciser la boucle à laquelle on fait référence lors du passage d'une valeur à un critère ?

Sinon, auriez-vous d'autres idées ?

Merci d'avance.

Cordialement,

Dr Dijon

Offline


Pour récupérer le titre de ta rubrique, il te faut passer par une boucle rubrique, du style :

<THELIA_RUB type="RUBRIQUE" id="#RUBRIQUE">
    <a href="#URL">#TITRE</a>
</THELIA_RUB>

arrangé à ta sauce coté mise en page.

Si ça peut te mettre sur la piste.

Offline


Bonjour Wazo et merci pour ta réponse.

En effet le passage par une telle boucle sera nécessaire pour obtenir le titre de la rubrique.

En fait, mon problème se situe légèrement plus tôt, au moment de récupérer l'ID de la rubrique à partir d'un produit commandé, situé dans la table VENTEPROD.

Dans cette table, je ne dispose que de la référence du produit. Aussi, je souhaitais retrouver le produit correspondant au produit commandé, via la boucle présenté plus haut, et ensuite remonter jusqu'à la rubrique.

Offline


J'essaye de comprendre :

avec dans une boucle type="PRODUIT"
REF : #REF me donne la ref du produit en question.

Si tu mets, toujours dans la boucle PRODUIT, à la place de #REF --> #RUBRIQUE  qu'obtiens tu ?

Last edited by wazo (03-03-2010 17:18:44)

Offline


Alors dans la boucle :

         <T_CONTRAT>
            <THELIA_CONTRAT type="PRODUIT" rubrique="30" ref="#REF">
               Produit de la rubrique 30 détecté : #REF
            </THELIA_CONTRAT>
         </T_CONTRAT>
         <//T_CONTRAT>

la ligne  > Produit de la rubrique 30 détecté : #REF < me sert ici juste de test pour voir si le produit commandé fait parti de la rubrique 30.

Ce qui m'interesse d'avantage, c'est de pouvoir faire le lien entre les boucles de types VENTEPROD et PRODUIT.

Offline


et en mettant #RUBRIQUE ?

Tu veux la ref de la rubrique, c'est ça ?

Pas facile la comm par messages écrits !!

Last edited by wazo (03-03-2010 17:38:23)

Offline


Comme tu le dis, l'écrit n'est pas toujours le meilleurs moyen pour s'expliquer wink

Donc ce que je te propose c'est de balayer les boucles précédentes et de travailler à partir de celle-ci :

<!--Si le client est connecté -->
<THELIA SI CONNECTE>
     
   <!-- On liste ses commandes -->
   <THELIA_CMD type="COMMANDE" client="#CLIENT_ID" statut="paye">

      <!-- Pour chaque commande on liste les produits commandés -->
      <THELIA_PRODCOM type="VENTEPROD" commande="#ID">

         <!-- Pour chaque produit on identifie la rubrique à laquelle il appartient -->
         <T_PROD>
            <THELIA_PROD type="PRODUIT" ref="#REF">
               Rubrique du produit : #RUBRIQUE
            </THELIA_PROD>
         </T_PROD>

         <//T_PROD>

      </THELIA_PRODCOM>

   </THELIA_CMD>

</THELIA SI CONNECTE>

C'est presque la même chose que précédemment.

Donc l'idée est de savoir, pour une commande donnée, à quelle rubrique appartiennent les produits commandés.

Pour cela, je liste les produits appartenant à la commande (boucle THELIA_PRODCOM de type VENTEPROD). De cette boucle, je retire la valeur #REF qui correspond à la référence du produit commandé.

Ensuite, je souhaite rechercher le produit portant cette référence dans la table contenant tous les produits de la base -> boucle THELIA_PROD de type PRODUIT. Dans cette boucle j'ai tenté d'associer le #REF de mon produit commandé avec le critère ref de la boucle PRODUIT, d'où le ref="#REF".

En fait c'est ce lien-ci qui m'intéresse vraiment, et que je n'arrive malheureusement pas à faire fonctionner.

J'espère que mon explication aura été un peu plus claire. En tout cas, merci pour ta patience.

Offline


je regarde ça, laisse moi un petit moment.

Offline


Bonsoir,

Avec Thélia tu ne peux pas imbriquer de boucles conditionnelles.

Le parseur alternatif de Roadster te permet de le faire.

Peut-être que la prochaine version de thélia te permettra de le faire smile

Last edited by ottoroots (03-03-2010 19:40:04)

Offline


Me revoilà, on va voir si j'ai compris :

en faisant
<THELIA_PROD type="PRODUIT" ref="#REF">
               <a href="#URL">#REF</a>
</THELIA_PROD>

Le lien m'emmène à la fiche du produit, ou si je n'ai pas besoin de lien, alors j'ai la ref du produit qui s'affiche. On est OK ?
je n'ai pas mis de boucle conditionnelle là.

Mais même dans la boucle VENTEPROD, #REF te donne la ref du produit.

Suis pas sure d'avoir compris ta demande finalement, sorry

Last edited by wazo (03-03-2010 21:19:24)

Offline


Nous sommes tout à fait d'accord.

Le truc, c'est que j'ai besoin de connaître la rubrique du produit alors que je part de VENTEPROD. Hors cette boucle me permet d'obtenir des informations sur le produit commandé, telles que sa référence ou sa description, mais pas sa rubrique.

C'est pour cela que j'essaye de lier le résultat de la boucle VENTEPROD à la boucle PRODUIT.

De cette façon j'espérais retrouver dans la table PRODUIT, le produit de même référence que celui trouvé dans la table VENTEPROD.

En fait je ne peut pas attaquer directement la boucle PRODUIT car, au départ, je ne connais pas la référence du produit que je recherche.

C'est la boucle VENTEPROD qui me la donne. D'où, l'imbrication des deux.

Offline


<THELIA_PROD type="PRODUIT" ref="#REF">
               #REF  -- #RUBRIQUE
</THELIA_PROD>

Et tu as ton ref produit, et ta rubrique produit.

La question importante là dedans, je crois, c'est qu'est ce que tu veux en faire ? Ou quel résultat veux tu obtenir pour aller où ? en faire quoi ?

Une fois que tu as la rubrique, et ça c'est possible comme vu plus haut, tu en fais quoi ?
Je pourrais plus facilement t'aider si tu m'expliques le "après" je crois, car pour moi, pour l'instant, la réponse à ta question de récupérer la rubrique est OK.

Offline


Sur la principe, j'ai plusieurs type de produits (logiciels, matériels et contrats d'assistance).

Une des fonctionnalités de mon site internet est de permettre un accès à des mises à jour de logiciels pour lesquels le client dispose d'un contrat d'assistance.

Donc mon idée est de consulter la liste des commandes du clients et de repérer parmi les produits commandés, les contrats d'assistance afin de savoir à quelles mises à jour ce client à droit.

Et pour savoir si un produit est un contrat d'assistance, je dois savoir s'il appartient à une certaine rubrique (ici, la rubrique d'ID 30).

Donc je dois dans un premier temps avoir une boucle de type COMMANDE qui me permettra de lister les commandes du client.

Dans cette boucle je vais avoir une boucle de type VENTEPROD qui me permettra de lister les produits de chaque commande.

Or la table VENTEPROD ne donnant aucune information sur la rubrique parent du produit, il me intégrer une nouvelle boucle de type PRODUIT afin de faire le lien entre le produit commandé et la rubrique parent.

Obtenir la rubrique à partir d'une boucle PRODUIT, ça ne me pose aucun problème. Par contre, à partir de VENTEPROD, c'est autre chose car, à priori, le critère ref de la boucle produit ne reconnait pas la valeur #REF issu de VENTEPROD.

Last edited by DrDijon (04-03-2010 11:20:46)

Offline


A partir de VENTEPROD ce n'est pas possible en l'état car non prévu. (cf wiki Thelia, boucles et  substitutions)
Pourquoi ne veux tu pas ajouter la boucle PRODUIT, ça ne gène en rien, car le html généré sera seulement le résultat (assorti du style que tu voudras y mettre)

Last edited by wazo (04-03-2010 11:25:30)

Offline


Le #REF  de la boucle PRODUIT et le #REF de la boucle VENTEPROD donnent le même résultat : la référence du produit concerné.

Offline


C'est, en effet, le but, de façon à obtenir toutes les informations concernant le produit de VENTEPROD, dont la rubrique.

Maintenant, je n'arrive pas à lier les deux. Je pensais que l'imbrication que j'avais choisi pour les boucles était bonne mais cela ne fonctionne pas.

Aurais-tu une idée ?

Offline


Je vois pas ce que tu entends par "lier les 2", dans ta boucle VENTEPROD, tu ne pourras pas récupérer la rubrique, ce n'est pas prévu, (sauf à ajouter des variables, etc....) tu ne peux que récupérer par la boucle PRODUIT comme je te l'ai indiqué.


Sur une boutique de test, les lignes de codes que je t'ai données fonctionnent, j'obtiens sur ma ligne la ref du produit et/ou le nom de ma rubrique et/ou l'id de la rubrique. Mais pour ça j'ai imbriqué ma boucle PRODUIT dans ma boucle VENTEPROD.

Une fois récupérée la rubrique (affichée en fait, là on ne fait qu'affichée) que fais tu ?

Offline


Peux-tu me montre le code de tes deux boucles imbriquées ? Car c'est justement ça qui ne fonctionne pas chez moi.

Sinon, une fois que j'ai la rubrique, si celle-ci est la rubrique d'id 30, j'affiche le produit, sinon, je ne l'affihce pas. De cette façon, je n'affiche que les contrats d'assistance que le client à acheter.

Last edited by DrDijon (04-03-2010 15:48:17)

Offline


Ca ne s'affiche pas car tu as 2 boucles conditionnelles intégrées comme te l'indique Otto.
Pour répondre à ta demande le plus simple est  l'utilisation d'un filtre du style  (à la volée, à vérifier)

#FILTRE_egalsinon(#RUBRIQUE||30||#REF|| )

dans ta boucle PRODUIT (sans conditionnel), qui est dans ta boucle VENTEPROD

Plugin de filtre à télécharger
ici

Sinon va voir aussi du coté du plugin qui gère les abonnements qui pourrait te convenir ici

Offline


Par Belenos !

Deviendrais-je aveugle ! Je te présente toutes mes confuses Otto car je n'avais pas vu ta réponse pour laquelle je te remercie.

Voici qui explique tout, en effet.

Je vais essayé ta méthode par filtre, Wazo, et je te tiens au courant sitôt que j'ai un résultat.

Merci encore pour tes explications et ta patience.

Offline


Bien le bonjour !

Comme promis, je reviens pour vous faire part de mes résultats.

Ne pouvant imbriquer les boucles conditionnelles, j'ai opté pour la solutions qui m'a semblé le plus simple : effectuer directement la requête via php.

Cela fonctionne parfaitement et je peux afficher les mises à jour logiciel disponibles en fonction de l'utilisateur connecté et des contrats de maintenance qu'il a acheté et qui sont toujours valables.

Bref, je tenais encore à vous remercier pour vos explications.

Bien à vous,

Dr Dijon