Masquer un formulaire après validation (twig)

Fermé
Lib76 Messages postés 12 Date d'inscription dimanche 24 mars 2019 Statut Membre Dernière intervention 18 juin 2020 - 11 juin 2020 à 15:51
jordane45 Messages postés 38273 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 novembre 2024 - 11 juin 2020 à 16:44
Bonjour,

Je bloque actuellement sur un problème, je n'arrive pas à trouver la solution. J'ai une page de produit faites avec le système de cart sur bootstrap qui se présente comme ceci (cf la capture d'écran)



J'aimerais que quand l'utilisateur ajoute un produit, ce dernier n'apparaisse plus sur la page. L'exercice m'est imposé en TWIG, j'ai réussi à traiter l'ajout du produit dans le panier, mais je suis complètement bloqué sur cette étape. Je vous poste le code que j'ai produit jusqu'a maintenant :

    {% for row in products|batch(4) %}
            <div class="card-deck">
                {% for product in row %}
                <div class="card mb-4">
                    <img src="{{ product.image_file }}" class="card-img-top" style="max-height: 250px;" alt=""/>
                    <div class="card-body">
                        <h5 class="card-title">{{ product.name }}</h5>
                        <p class="card-text">
                            {{ product.description }}
                        </p>
                    </div>
                    <div class="card-footer text-center">
                        {{ form.start({action:generate('technicien_carts_add')}) }}
                            {{ tag.input({type:'hidden', name:'product_id', value: product.id}) }}
                            {{ tag.input({type:'number', name:'quantity', class:'d-inline w-50'}) }}
                            <button type="submit" class="btn btn-primary"><i class="fas fa-cart-plus">{{ if  }}</i></button>
                        {{ form.end() }}
                    </div>
                </div>
                {% endfor %}


J'étais parti sur l'idée qu'il fallait que je crée une nouvelle macro, mais j'ai beaucoup de mal à maitriser Twig. Si quelq'un à une idée de comment je pourrai m'y prendre, je suis preneur ! Merci d'avance pour votre aide :)

2 réponses

jordane45 Messages postés 38273 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 novembre 2024 4 695
11 juin 2020 à 16:04
Bonjour,

Pour ce gendre de demande, deux possibilités :

Soit tu restes avec ton formulaire et ton submit...
Dans ce cas, lorsque tu vas chercher les produits à afficher sur la page, tu retires (au niveau du controller) le/les produit(s) déjà ajouté(s) dans ton panier de façon à ne pas les réafficher.

Sinon ( moi c'est ce que j'aurais utilisé...), au lieu de faire un "submit" de formulaire, tu gères l'ajout en AJAX.
De cette façon, avec le Javascript tu peux masquer (ou supprimer) les produits déjà ajoutés sur ta page et cela évite de devoir recharger la page à chaque ajout de produit comme c'est le cas actuellement.
1
Lib76 Messages postés 12 Date d'inscription dimanche 24 mars 2019 Statut Membre Dernière intervention 18 juin 2020
Modifié le 11 juin 2020 à 16:30
Merci pour ta réponse,

Je pense que la première solution, même si ce n'est pas la plus simple, me conviendrait mieux au niveau de la structure de mon code même si en effet, cela induit un rechargement de page à chaque fois. Je ne suis pas assez à l'aise avec du AJAX pour pouvoir utiliser ta deuxième méthode.

EDIT : Est-ce qu'au lieu de directement faire le traitement dans le controller, je peux directement faire le traitement dans le twig ?
0
jordane45 Messages postés 38273 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 novembre 2024 4 695
11 juin 2020 à 16:44
Twig est fait pour afficher les données envoyées par le controller.
Si tu commences à y mettre une couche "métier" .. c'est pas top.
Déjà, il faudrait, que dans ton controller, tu renvoies la données transmises par ton submit au template afin de pouvoir la réutiliser ensuite.. voir même, que tu envoies un tableau contenant toutes les valeurs déjà submit (au cas où tu aurais plusieurs produits à retirer...)
Donc franchement... autant faire le traitement côté controller ....
C'est plus simple de faire des unset sur un array côté controller que d'essayer de jouer avec le twig (qui n'est pas fait pour ça )
0