THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


Bonjour,

Je souhaite présenter les déclinaison d'un produit sous forme de checkbox.

Est-ce possible simplement via product.html ? Le fait de sélectionner ces checkbox va-t-il permettre de d'ajouter ces déclinaisons correctement au panier ?

Je souhaite modifier ce code

{loop name="attributes" type="attribute" product="$product_id" order="manual"}
      <div class="option option-option">
            <label for="option-{$ID}" class="option-heading">{$TITLE}</label>
                  <div class="option-content clearfix">
                        <select id="option-{$ID}" name="option-{$ID}" class="form-control input-sm pse-option" data-attribute="{$ID}"></select>
                  </div>
      </div>
{/loop}

Last edited by anti-conformiste (10-01-2018 11:53:13)

Offline


En fait, ce select est utilisé pour construire la combinaison de déclinaisons ( = le product sale element) qui sera ajoutée au panier. Pour la remplacer par des radio (pas des checkbox), tu peux remplacer tout ce code

                    {form_field field='product_sale_elements_id'}
                    <input id="pse-id" class="pse-id" type="hidden" name="{$name}" value="{$PRODUCT_SALE_ELEMENT}" {$attr} >
                    {/form_field}
                        
                    {if $pse_count > 1}
                        {* We have more than 1 combination: custom form *}
                        <fieldset id="pse-options" class="product-options">
                            {loop name="attributes" type="attribute" product="$product_id" order="manual"}
                            <div class="option option-option">
                                <label for="option-{$ID}" class="option-heading">{$TITLE}</label>
                                <div class="option-content clearfix">
                                    <select id="option-{$ID}" name="option-{$ID}" class="form-control input-sm pse-option" data-attribute="{$ID}"></select>
                                </div>
                            </div>
                            {/loop}
                            <div class="option option-fallback">
                                <label for="option-fallback" class="option-heading">{intl l="Options"}</label>
                                <div class="option-content clearfix">
                                    <select id="option-fallback" name="option-fallback" class="form-control input-sm pse-option pse-fallback" data-attribute="0"></select>
                                </div>
                            </div>
                        </fieldset>
                    {/if}

Par celui-ci :

                    {form_field field='product_sale_elements_id'}
                        {if $pse_count > 1}
                            {loop name="pse" type="product_sale_elements" product=$product_id}
                                <div class="radio">
                                    <label>
                                        <input type="radio" name="{$name}" value="{$ID}" {if $QUANTITY <= 0}disabled{/if}/>
    
                                        {loop name="combi" type="attribute_combination" product_sale_elements="$ID" order="manual"}
                                            {$ATTRIBUTE_TITLE} : {$ATTRIBUTE_AVAILABILITY_TITLE} {if $LOOP_COUNT < $LOOP_TOTAL},{/if}
                                        {/loop}
                                        
                                        Prix:
                                        {if $IS_PROMO}
                                            {format_money number=$PROMO_PRICE symbol={currency attr="symbol"}}
                                        {else}
                                            {format_money number=$PRICE symbol={currency attr="symbol"}}
                                        {/if}
    
                                        {if $QUANTITY <= 0}
                                            Rupture de stock
                                        {else}
                                            En stock
                                        {/if}
                                    </label>
                                </div>
                            {/loop}
                        {else}
                            <input id="pse-id" class="pse-id" type="hidden" name="{$name}" value="{$PRODUCT_SALE_ELEMENT}" {$attr} >
                        {/if}
                    {/form_field}

Tu devra aussi mettre en commentaire ou supprimer tout le code (33 lignes) entre {* javascript confiuguration to display pse *}
et </script> pour éviter des effets de bord avec le code javascript qui gérait les select.

Tu devras aussi t'arranger pour gérer le prix et le stock affiché, soit avec un peu de Javascript, soit en l'affichant uniquement dans la liste des combinaisons (ce que j'ai fait de manière assez sommaire dans mon code).


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Ta solution fonctionne très bien, merci.

Je dois mal appréhender ma problématique, mais comment dois-je m'y prendre pour proposer un produit (un produit virtuel, une balade en 2cv en l'occurence)  avec des options telles :

- café d'accueil (+5€)
- déjeuner (+25€)
- hébergement (+90€)
- remise de prix
- ...

Avec des cases à cocher et l'ajout de ces déclinaisons au panier ? Sans cumuler tout un tas de combinaisons peu intuitives à sélectionner à travers une liste déroulante...

Last edited by anti-conformiste (10-01-2018 18:14:54)

Offline


Le module LegacyProductAttributes (https://github.com/thelia-modules/Legac … Attributes) est fait pour toi. Il permet de gérer les déclinaisons comme dans Thelia 1, sans qu'il soit nécessaire de créer des combinaisons.

Par contre il faudra sans doute faire une modif de code pour afficher les choix possibles sous forme de checkboxes ou de radios


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2