THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


<div id="product-comment">
    <div class="clearfix"></div>

    <div class="title title-without-tabs clearfix">
        {intl l="Comment" d="productcomment.bo.default"}
    </div>
    {loop type="order" name="cart_id" order_id=$order_id}
        {ifloop rel="comment"}
            {loop type="product.comment.comment" name="comment" cart_item_id="{$CARR_ID}"}
                <ul class="list-unstyled">
                    <li><strong>{intl l="Message" d="productcomment.bo.default"} :</strong></li>
                    <li>{$COMMENT|nl2br nofilter}</li>
                </ul>
            {/loop}
        {/ifloop}

        {elseloop rel="comment"}
            {intl l="No message for this product was defined." d="productcomment.bo.default"}
        {/elseloop}
    {/loop}
</div>

Je voudrais récupérer le cart_id afin d'y arriver je fais une loop sur la table order en fonction du order_id mais il n'y a aucun retour ?
Merci

Last edited by Mikius (02-11-2016 17:15:16)

Offline


Il te faut récuperer les OrderProduct de l'Order. Un OrderProduct est lié à un CartItem.

Par contre, manque de bol, la boucle OrderProduct ne remonte pas le CartItemld (c'est ballot, je vais faire une PR là dessus, dès que github redevient accessible...). Tu peux éventuellement te fabriquer une petit boucle qui te remonte le cartItemId à partir de l'OrderProduct.


OpenStudio Toulouse

Offline


Merci beaucoup,

Je vais partir sur cela et dès que j'ai quelque chose de sympa et bien je te montre cela.

Offline

Offline


Merci beaucoup c'est cool plus j'essaye de faire des choses sur Thelia et j'apprends des choses et par tes astuces je découvres encore mieux le cms.

Offline


Par contre, en faisant cette modification, il faut que maintenant dans la table "order_product" avoir le champs "cart_item_id" afin de faire remonter la donnée en front,
si je ne montre pas du tout ?

Offline


Il existe. Il n'était juste pas remonté par la boucle OrderProduct.


OpenStudio Toulouse

Offline

Offline


Bah non, ça a été facilement corrigé smile


OpenStudio Toulouse

Offline


Avec la modification que tu m'as filé sur github là, j'ai dû loupé quelque chose, comment je suis sensé le récupéré dans ma boucle sur la template.
En passant le order_id en argument.
Merci,

Offline

Offline

Offline


{loop type="order_product" name="cart_item_id" order="$order_id"}
      {$CART_ITEM_ID}
{/loop}

Voilà ce que je fais dans ma template et ça fait absolument aucun retour

Offline


Je n'ai pas réussi à trouver les fichiers dans le github que vous m'avez fourni.

Offline


La seule modif à faire pour récupérer le CART_ITEM_ID dans la boucle OrderProduct est là : https://github.com/thelia/thelia/pull/2288/files

C'est correct de modifier le core dans ce cas là, car la PR sera intégrée à la prochaine version de Thelia.


OpenStudio Toulouse

Offline


C'est tout à ce que j'ai fait selon vos indications et lorsque je fais ma boucle dans mon template.
Et bien il n'y a rien qui remonte de mon côté.

Offline


Comment ça, rien ? Que se passe-t-il exactement ?


OpenStudio Toulouse

Offline


<div id="product-comment">
    <div class="clearfix"></div>

    <div class="title title-without-tabs clearfix">
        {intl l="Comment" d="productcomment.bo.default"}
    </div>
    {loop type="order_product" name="cart_item_id" order="$order_id"}
        {$CART_ITEM_ID}
    {/loop}
</div>

Lorsque je vais sur back office pour afficher dans le récapitulatif de la commande et je ne vois aucun modification.

Offline


Il faut vérifier si c'est parce que $CART_ITEM_ID est vide ou si la boucle ne retourne rien.


OpenStudio Toulouse

Offline


Cela ne retourne rien pour $CART_ITEM_ID et pour les autres si.

Offline


$order_id doit être vide ou égal à 0...


OpenStudio Toulouse

Offline


$order_id est de 4 et ça ne provient pas des autres,

Offline

Offline


oui je l'ai vidé : php Thelia cache:clear

Offline


Exact. Le cart item ID n'est pas stocké dans la table order_product, il est uniquement mis à jour pendant le process de création de commande, et perdu ensuite. Donc on ne peut pas retrouver le cart item ID à partir de l'order.

Je suppose que le bonne solution est d'ajouter le order_product_id à ta table, et de le renseigner pendant la création de la commande, en t'abonnant à l'event ORDER_BEFORE_PAYMENT

    public function saveOrderProductId(OrderEvent $event) {
        $orderProducts = OrderProductQuery::create()->findByOrderId($event->getOrder()->getId());

        /** @var OrderProduct $orderProduct */
        foreach ($orderProducts as $orderProduct) {
            if (null !== $bidule = TaTableQuery::create()->findOneByCartItemId($orderProduct->getCartItemId())) {
                $bidule 
                    ->setOrderProductId($orderProduct->getId())
                    ->save();
            }
        }
    }

Tu pourras alors utiiser le OrderProduct ID pour retrouver tes données depuis la commande dans le back office, en ecrivant la petit boucle adéquate.

(c'est le premier module le plus dur, après ça va tout seul smile ).


OpenStudio Toulouse