THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,
Est-il possible de créer un produit avec des sous-produits
pour servir une seule url de produit mais avec une référence distincte de sous-produit

Le premier produit permet de décliner tous les autres sous-produits
Exemple
Produit A affiche et le client peut sélectionner le produit B tapis ou qui se décline en produit C nappe qui sont issu du produit A

Utilisation du gabarit de produit pour créer un produit de base et les déclinaisons
Création des attributs de cette déclinaison pour ce produit avec ses sous-produits
Après on a créé notre produit dans le catalogue avec l'association du gabarit
Indication des prix avec le générateur

Là tout est OK

Sur la page produit, on peut sélectionner tous les produits
Celui par défaut est disponible, dès que l'on sélectionne le suivant il nous indique que cette déclinaison n'existe pas

Et là ça coince !!

Peut-être devrais-je utiliser le gabarit dans un gabarit avec des déclinaisons fonction du produit pour effectuer ce shéma

Voyez vous une autre solution plus souple pour permettre au client final de sélectionner lui-même sont produit

Bien sur au début nous avions opté pour un produit à chaque fois ce qui enlevait tout problème
Le client sélectionne dès le début le produit désiré
Schéma classique
Produit A Affiche
Produit B tapis
Produit C Nappe

Offline

Offline


3 exemples plus clair

1/ ici donc on a un produit avec un sélecteur ou j'ai placé et les différentes déclinaisons en ayant confectionné un gabarit
et dans celui-ci peut-être qu'il y a juste une histoire de sélecteur à faire déclencher lorsque l'utilisateur clique sur le produit désiré
Test du produit avec sélecteur
ou
sélection du produit dans le sélecteur

2/ le deuxième où j'ai inséré toutes mes références dans le sélecteur en ayant confectionné un gabarit + déclinaisons
Test du produit avec sélecteur
ouo
produit-information concernant le produit dans le sélecteur

3/ Schéma classique de présentation produit ou le client final à choisi dés le départ son produit favori
Test du produit sans sélecteur
ou
produit ou l'on choisit simplement la taille etc

Last edited by stephst84 (24-05-2019 15:30:28)

Offline


Merci, mais ce que je n'ai pas compris c'est la fonctionnalité. Qu'est-ce que ça doit faire du point de vue du client ?


OpenStudio Toulouse

Offline


Bonjour,

Proposer comme dans la 1ère image ci-dessous un choix de produit là où il est marqué "Kakemono reproduction artiste" produit par defaut, et dans la seconde "Toile de peintre reproduction" un produit issu de "Référence test cathy" de permettre au client final la sélection réelle de son produit, puisque la 1ère image initiale montre un produit qui va se décliner en sous-produit.
Le client sélectionne son produit et les déclinaisons selon le type de support s'affichent automatiquement en fonction du choix
Voir les 2 images correspondantes ci-dessous
Sélection par default
selection produit kakemono repro
Sélection option
selection produit toile de peintre repo

La deuxième image du 1er post résume ce que le client va sélectionner mais moins pratique car on peut avoir toute la série des produits affichée dans le sélecteur. on peut se retrouver avec une quantité astronomique de choix si on a décliné une multitude de sous produit+prix+différentes déclinaisons,

une idée de mon but via cet exemple sur ce site h@@ps://www.repro-tableaux.com/a/jan-ve … perle.html dans les détails du produit dans la partie droite on sélectionne le support final qui découle du produit initial

A mon avis cela doit être une histoire de gabarit associé avec des déclinaisons tout simplement qui permettra d'obtenir cet effet, autant de gabarit par type de support,

En espérant avoir été plus clair, bonne journée

Last edited by stephst84 (27-05-2019 08:25:20)

Offline


Après quelques lectures et essais

D'après ce post j'aurai un peu les mêmes symptômes
https://forum.thelia.net/viewtopic.php?id=12618
affichage des déclinaisons pour tous

Ce que je voudrait faire c'est que quand
- je sélectionne le support exemple Kakemono je n'ai que les tailles associées qui s'affichent (par défaut toutes s'affichent mais indique déclinaison inexistante quand pas possible)
- je sélectionne le support exemple Toile de peintre la taille associée qui s'affiche

par contre pas de manipulation du fichier thelia.js dans le répertoire dist/js

J'ai une liste déroulante qui me propose toutes les entrées des déclinaisons possibles
Seulement quand je sélectionne une combinaison j'ai l'infobulle.

Je voudrais que quand dans ma première liste je choisis un élément, la seconde soit automatiquement mise à jour pour afficher que les déclinaisons compatible avec la première et inversement

Essai avec une installation par défaut et problème identique une idée

Last edited by stephst84 (27-05-2019 08:24:51)

Offline


Je crois que je comprends. Tu veux d'ABORD choisir une déclinaison (ex. taille du cadre), et ENSUITE afficher les produits compatibles (ex. les affiches qui rentrent dans ce cadre), c'est à dire ceux qui possèdent la valeur de déclinaison choisie.

C'est ça ?


OpenStudio Toulouse

Offline


Informations Thelia Version en cours     2.3.4

C'est plutôt comme ci-dessous mais le résultat sera équivalent à ta proposition
- Sélection d'un support exemple Kakemono je n'ai que les tailles associées qui s'affichent (par défaut toutes s'affichent mais indique déclinaison existante ou pas)
- Sélection du 2ème support exemple Toile de peintre la taille associée s'affiche avec info bulle déclinaison inexistante car elle reprend l'info de la 1ère sélection

Si on sélectionne la bonne taille, là on a BINGO on peut acheter
Alors on comprend aisément que l'on ne peut avoir toutes les tailles de la sélection  (exemple déclinaison Kakemono) précédente pour toute la sélection de la nouvelle déclinaison (Toile de peintre)

autre question  peut-être en rapport, j'avais modifié l'include single-product dans le fichier categorie.html mais pas dans les autres fichiers qui font aussi l'include ?

Last edited by stephst84 (27-05-2019 09:41:42)

Offline


OK, je reformule.

Tu veux pouvoir autoriser l'achat d'un produit uniquement si il possède les N (ici N = 2) valeurs de déclinaisons choisies par le client.

En d'autres termes :

1) Le client arrive sur une fiche produit. Le bouton d'achat est inactif.
2) Le client choisit la valeur de déclinaison 1
3) Le client choisit la valeur de déclinaison 2
4) Le bouton de mise au panier est activé.

C'est ça ?

par contre pas de manipulation du fichier thelia.js dans le répertoire dist/js

Il faudra bien écrire un peu JS pour que ça marche.

Au passage, on ne touche pas à ce qui est dans assets/dist, qui contient des fichiers minifiés. C'est assets/src/js/thelia./js qui doit être modifié. Le fichier assets/dist/js/thelia.min.js est ensuite généré avec Grunt : http://thelia-school.com/utiliser-grunt … helia.html

C'est valable pour tout ce qui se trouve dans assets/dist, en principe.


OpenStudio Toulouse

Offline


Oui c'est cela,

par contre à ma décharge, j'avais désactivé le

<span id="pse-name" class="pse-name">

en h1 du fichier product.html car j'en avais pas l'utilité de dupliqué mon url et ce pse-name

je viens de mettre à jour tous les includes/single-product

Offline


En d'autres termes : par défaut ce qu'il se passe actuellement
ta proposition
1) Le client arrive sur une fiche produit. Le bouton d'achat est inactif.
2) Le client choisit la valeur de déclinaison 1 => bouton actif
3) Le client choisit la valeur de déclinaison 2 => si déclinaison 1 présente dans la déclinaison 2 c'est ok
4) Le bouton de mise au panier est activé.

ce qu j'ai actuellement si une valeur
1) Le client arrive sur une fiche produit. Le bouton d'achat est actif puisque la déclinaison est existante et définie par défaut dans la fiche produit du catalogue.
2/bis ) Le client choisit la valeur de déclinaison 1 => bouton actif
3/bis ) Le client choisit la valeur de déclinaison 2 => si déclinaison 1 avec taille non présente dans la déclinaison 2 c'est infobulle déclinaison inexistante
4/bis ) Le bouton de mise au panier est grisé. (par défaut sous thélia)

donc même si on a une déclinaison 1 taille + matière + couleur
déclinaison 2 taille + matière + couleur différentes de la déclinaison 1

js obligatoire

je pensais que les déclinaisons proposaient les options pertinentes d'où l'utilité des attributs dans les déclinaisons associées au gabarit et le fait de dire à la fiche produit
que tu t'associes avec tel gabarit via combinaison de déclinaisons et tel valeur de prix pour cette combinaison et affichage

merci encore pour l'éclaircissement

Last edited by stephst84 (27-05-2019 11:11:23)

Offline


Salut Roadster, tu proposes du js pour désactiver les combinaisons qui n'existent pas avec la déclinaison choisie pour évitez l'infobulle

mais peut-on le faire à partir d'une loop product pour exclure les combinaisons qui n'existent pas,

pour lui dire
= > déclinaison 1 + toutes les tailles différentes ou équivalentes à déclinaison 2
et
= > déclinaison 2 avec ses tailles différentes ou équivalentes à déclinaison 1

Quelle serait la solution la plus souple ?

Offline


Peut-on exclure les combinaisons qui n'existent pas à partir d'une loop attribute dans la page product.html à partir de ce moment

{form name="thelia.cart.add" }
début function
{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}"{if $QUANTITY <= 0}disabled{/if}></select>
                                </div>
                            </div>
                            {/loop}
fonction suivante

ou dans la page product.html insérer du js
que je ne sais pas du tout comment le prendre

ou en surchargeant
le /assets/src/js/thelia.js

ligne 90

else {
                $("#pse-options .option-fallback").remove();

                // get the select for options
                $("#pse-options .pse-option").each(function(){
                    var $option = $(this);
                    if ( $option.data("attribute") in PSE_COMBINATIONS){
                        $pse['options'][$option.data("attribute")] = $option; // jshint ignore:line
                        $option.on("change", updateProductForm);
                    } else {
                        // not affected to this product -> remove
                        $option.closest(".option").remove();
                    }
                });

                // build select
                for (combinationValueId in PSE_COMBINATIONS_VALUE) {
                    combinationValue = PSE_COMBINATIONS_VALUE[combinationValueId];
                    $pse.options[combinationValue[1]]
                        .append("<option value='" + combinationValueId + "'>" + combinationValue[0] + "</option>");
                }

                setPseForm();
            }

ou ligne 265

function pseExist(selection) {
        var pseId,
            pse = null,
            combinations,
            i,
            j,
            existCombination;

        for (pse in PSE){
            pseId = pse;
            combinations = PSE[pse].combinations;

            if (undefined !== combinations) {
                for (i = 0; i < selection.length; i++) {
                    existCombination = false;
                    for (j = 0; j < combinations.length; j++) {
                        if (selection[i] == combinations[j]) {
                            existCombination = true;
                            break;
                        }
                    }
                    if (existCombination === false) {
                        break;
                    }
                }
                if (existCombination) {
                    return pseId;
                }
            }
        }

        return false;
    }

auriez-vous un début de code qui excluent ces quelques déclinaisons

Offline


Tu peux filter les produits en fonction de valeurs de déclinaisons, avec le paramètre "feature_availability" de la boucle product.


OpenStudio Toulouse

Offline


ce que j'ai lu dans la doc, mais alors pour les filtres c'est un peu galère

Last edited by stephst84 (28-05-2019 08:12:30)

Offline


"C'est galère" ? Ça veut dire que tu ne comprends pas comment ça marche, et que du coup tu rames, c'est ça ?


OpenStudio Toulouse

Offline


re-bonjour,
donc oui c'est galère et alors alors

en essayant, je décompose bien toutes les déclinaisons en indiquant le numéro des déclinaisons par rapport à mon gabarit
mais le souci, cela affiche le titre de toutes les déclinaisons alors qu'il n'y a que 2 déclinaisons principales associées à soit une taille ou plus et si la taille+produit =0 pas d'affichage

Q: peux-t-on limiter l'affichage du nombre d'une déclinaison ?
Pcq actuellement j'ai cela
Affiche, poster reproduction d'artiste
Affiche, poster reproduction d'artiste
Kakemono
Affiche, poster reproduction d'artiste

Le second problème aucun affichage de mes tailles dans le select de ma déclinaison

et un autre relevé cela ajoute dans le panier celui par défaut quelque soit celui sélectionné

    {if $pse_count > 1}
            {* We have more than 1 combination: custom form *}
                        <fieldset id="pse-options" class="product-options">
					
				{loop name="pse" type="product_sale_elements" product="$product_id"}
				{loop name="combi" type="attribute_combination" product_sale_elements="$ID" product="$product_id"}
                       
                       {if $ATTRIBUTE_ID ==19 }
                            <div class="choix">
                            <div class="support">
                               
                    {$ATTRIBUTE_AVAILABILITY_TITLE}
                                
                        </div>
			<div class="bouton-choisir">
							
<select id="option-{$ATTRIBUTE_AVAILABILITY_ID}" name="option-{$ATTRIBUTE_AVAILABILITY_ID}" class="form-control input-sm pse-option" data-attribute="{$ATTRIBUTE_AVAILABILITY_ID}"{if $QUANTITY == 0}disabled{/if}></select>								
		     </div>
                      </div>

                        {/if}
                        {/loop}

                        {/loop}

                    {/if}

et peut-être que je devrais par la suite

Tu peux filter les produits en fonction de valeurs de déclinaisons, avec le paramètre "feature_availability" de la boucle product.

Last edited by stephst84 (29-05-2019 15:29:55)