THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

J'ai mis à jour un site qui était en 2.2.2 en 2.3.4 et une fonctionnalité déconne depuis.

J'ai un formulaire au sein d'une loop dans le template account.html qui permet de s'abonner ou de se désabonner de la newsletter (le tout en AJAX).

{assign 'email_customer' $EMAIL}
{assign 'firstname_customer' $FIRSTNAME}
{assign 'lastname_customer' $LASTNAME}

{loop type="newsletter" name="newsletter-list" email=$email_customer}
     <form class="form-newsletter" action="{url path="/newsletter-unsubscribe"}" method="post">
          <input type="hidden" name="id" value="{$ID}">
          <input type="hidden" name="email" value="{$EMAIL}">
          <div class="form-group group-btn">
               <div class="control-btn">
                    <button type="submit" class="btn btn-newsletter"><i class="fa fa-chevron-right"></i> {intl l="Se désabonner de la newsletter"}</button>
               </div>
         </div><!--/.form-group-->
    </form>
{/loop}

{elseloop rel="newsletter-list"}
     {form name="thelia.front.newsletter"}
          <form id="form-newsletter" class="form-newsletter" action="{url path="/newsletter"}" method="post">
               {form_hidden_fields}
               {form_field field="success_url"}
                    <input type="hidden" name="{$name}" value="{url path="/account"}">
               {/form_field}

              {form_field field="email"}
                   <input type="hidden" name="{$name}" value="{$email_customer}">
              {/form_field}

              {form_field field="firstname"}
                   <input type="hidden" name="{$name}" value="{$firstname_customer}">
              {/form_field}

              {form_field field="lastname"}
                   <input type="hidden" name="{$name}" value="{$lastname_customer}">
              {/form_field}

              <div class="form-group group-btn">
                   <div class="control-btn">
                        <button type="submit" class="btn btn-newsletter"><i class="fa fa-chevron-right"></i> {intl l="S'abonner à la newsletter"}</button>
                   </div>
              </div><!--/.form-group-->
         </form>
     {/form}
{/elseloop}

      (...)

{block name="after-javascript-include"}
<script>
    $(document).ready(function(){
        $('.form-newsletter').on('submit', function() {
        var c = confirm('{intl l="Êtes-vous sur de vouloir réaliser cette action ?" d="fo.lcv"}');
        return c; //you can just return c because it will be true or false
        });
    });
</script>
{hook name="account.after-javascript-include"}
{/block}

Evidemment, la loop de type "newsletter" n'existe pas. J'obtiens cette erreur :

ELEMENTNOTFOUNDEXCEPTION IN THELIALOOP.PHP LINE 391:
LOOP TYPE 'NEWSLETTER' IS NOT DEFINED.

Ce que je ne comprends pas, c'est que ça fonctionnait dans la version précédente, et que ce ne soit plus le cas en 2.3.4.
Au début je pensais que mon prédécesseur avait modifié un fichier du Core pour que ça fonctionne mais j'ai beau fouillé, je n'ai rien trouvé dans les anciens fichiers.

Auriez-vous une idée de ce que je peux faire pour faire fonctionner cette fonctionnalité ? Voire contourner le problème ?

Last edited by HeishPi (11-04-2019 10:28:38)


Développeur web Junior

Offline


Il n'y a jamais eu de boucle "newsletter" dans le core de Thelia. C'est donc surement une boucle qui vient d'un module.


OpenStudio Toulouse

Offline


Oui oui, je m'en suis bien rendu compte en ne la trouvant pas dans core/lib/Thelia/Config/Resources/loop.xml, et j'ai effectivement un module custom pour la newsletter mais ce dernier permet juste d'exporter la liste des emails inscrits à la newsletter. Aucune trace d'une quelconque loop dedans.
Du coup, que devrais-je faire pour faire marcher ma fonction ? Et à vrai dire, est-ce que j'ai vraiment besoin d'une loop à cet endroit ? J'avoue ne pas comprendre son utilité.


Développeur web Junior

Offline


Je suppose que c'est une boucle qui permet de savoir si le customer est abonné à la newsletter.


OpenStudio Toulouse

Offline


Oui, je m'en suis douté quand même. Est-ce que tu sais comment c'est possible qu'elle ait fonctionné en 2.2.2 sans être déclarée dans loop.xml ?


Développeur web Junior

Offline


Le plugin a sans doute été supprimé. Tu as un backup de ton install 2.2.2 ?


OpenStudio Toulouse

Offline


Oui, et je fouille dedans en permanence pour voir les différences qu'il peut y avoir entre les deux versions mais vraiment, je ne vois pas. Je pense avoir déjà trouvé toutes les modifications apportées aux fichiers du Core par mon prédécesseur.

Je pense plutôt essayer de contourner le problème. On est d'accord que mon seul moyen de vérifier dans le template si l'utilisateur connecté est abonné à la newsletter, c'est via une variable Smarty, non ?
Et pour envoyer cette variable au template, il faut forcément qu'il vienne d'une loop ?


Développeur web Junior

Offline


Cette boucle est soit implémentée par un module, soit par une modif du core.

Point.

Dans le premier cas, trouve le module, dans le second je ne peux pas t'aider.


OpenStudio Toulouse