THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

Nous utilisons thelia pour la boutique de notre association. Nous voudrions développer un module qui puisse permettre de gérer l'envoi de dons, donc un produit dont le prix serait libre.

Cela nécessiterait pour ce produit de masquer le prix et la quantité et d'afficher un champ pour le prix à la place dans la page produit.

Voilà le morceau de code de la template product.html sur laquelle nous aimerions que le module applique la modif (j'ai masqué les morceau moins intéressants):

                <div class="product-price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                    [...]

                    <div class="price-container">
                        [...]

                        <span id="pse-promo">
                            <span class="special-price"><span class="price-label">{intl l="Special Price:"} </span><span id="pse-price" class="price">{format_money number=$TAXED_PROMO_PRICE symbol={currency attr="symbol"}}</span></span>
                            <meta itemprop="price" content="{$TAXED_PROMO_PRICE}">
                            [...]
                        </span>
                    </div>
                    [...]

                </div>

                {form name="thelia.cart.add" }
                <form id="form-product-details" action="{url path="/cart/add" }" method="post" class="form-product">
                    [...]

                    <fieldset class="product-cart form-inline">
                        {form_field field='quantity'}
                        <div class="form-group group-qty {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
                            <label for="{$label_attr.for}">{$label}</label>
                            <input type="number" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value|default:1}" min="1" required>
                            {if $error }
                                <span class="help-block">{$message}</span>
                            {elseif $value != "" && !$error}
                                <span class="help-block"><i class="fa fa-check"></i></span>
                            {/if}
                        </div>
                        {/form_field}

                        <div class="form-group group-btn">
                            <button id="pse-submit" type="submit" class="btn btn_add_to_cart btn-primary"><i class="fa fa-chevron-right"></i> {intl l="Add to cart"}</button>
                        </div>
                    </fieldset>

                </form>

Le problème, c'est qu'il n'y a pas l'air d'y avoir de hook pour remplacer cette partie de la page ? Est-il possible d'en ajouter un?

Sinon, on aurait plusieurs pistes pour ça, mais qui semble un peu compliquées par rapport au besoin. On pensait overrider tout le template product.html pour rajouter les hooks dont on a besoin (ou plutôt les ifhook) : y a-t-il une façon plus propre de faire ça que de C/C le répertoire templates/frontOffice/default en templates/frontOffice/myTheme juste pour changer un fichier ?

Est-ce que la façon propre serait d'utiliser du custom routing ?

Merci d'avance pour vos conseils / remarques / réponses smile

Offline


Tu peux aussi injecter le code à l'endroit voulu avec jQuery, ça permet de compenser l'absence de hook.

Qu'est-ce que tu entends par "custom routing" ?


OpenStudio Toulouse

Offline


Pour le "custom routing", j'étais pas trop sûr, j'avais cru comprendre qu'on pouvait utiliser les route pour remplacer une page par une autre. Dans ce cas là, on aurait remplacé la page par une copie de la page qui aurait eu le Hook.

Merci du conseil !

Offline


On peut faire ça très simplement, il suffit de créer dans le module (MyModule/templates/frontOffice/ton_template) un fichier HTML qui porte le même nom que celui du template courant (templates/frontOffice/ton_template).


OpenStudio Toulouse

Offline


Ah d'accord, il n'y a rien à mettre dans le fichier de config du module ?

Et pour "ton_template", on peut laisser à "default" ou il vaut mieux mettre autre chose ?

Offline


Non rien de spécial a mettre.

Tu peux utiliser "default"  si tu veux.


OpenStudio Toulouse

Offline


OK, merci beaucoup pour toutes ces réponses !

On va voir entre l'approche jquery ou le remplacement de la template.

Si je comprends bien,
   * remplacer la template, c'est p-ê un peu plus propre ça implique de faire attention à chaque mise à jour aux changements qu'ils pourrait y avoir eu sur la template de base.
   * utiliser le hook jquery, c'est peut-être un peu plus moche mais en terme de compatibilité avec les futurs mises à jour, ça peut être mieux.