Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu]CMSMS 2.2.7 - E-commerce - Module CART2 - Rechargement page
#1

Citation :----------------------------------------------

Cms Version: 2.2.7

Installed Modules:

AceEditor2: 1.05
AdminSearch: 1.0.4
BoxPacker: 1.2.6
CGEcommerceBase: 1.8.6
CGExtensions: 1.60
CGFlatRateShipping: 1.0
CGMyOrders: 1.2.4
CGPaymentGatewayBase: 1.6.2
CGSimpleSmarty: 2.1.8
CGSmartImage: 1.22.2
CGSnapshot: 1.3
CMSContentManager: 1.1.6
CMSMailer: 6.2.14
Captcha: 0.5.5
Cart2: 1.4.2
CmsJobManager: 0.1.2
DesignManager: 1.1.4
FRTaxes: 1.3
FileManager: 1.6.6
FilePicker: 1.0.2
FormBuilder: 0.8.1.6
FrontEndUsers: 2.9
JMFilePicker: 1.0.1
JQueryTools: 1.4.0.3
MenuManager: 1.50.3
MicroTiny: 2.2.2
ModuleManager: 2.1.3
Navigator: 1.0.8
News: 2.51.3
Orders: 1.23.2
Products: 2.28.4
ProductsByVendor: 1.2.6
Promotions: 1.3.1.1
Search: 1.51.4
Showtime2: 3.5.4
SitemapMgr: 1.5.3
TinyMCE: 3.2-beta5
Uploads: 1.25.8

Config Information:

php_memory_limit:
max_upload_size: 128000000
url_rewriting: none
page_extension:
query_var: page
auto_alias_content: true
locale:
set_names: true
timezone: Europe/Paris
permissive_smarty: true

Php Information:

phpversion: 7.0.27
md5_function: On (Vrai)
json_function: On (Vrai)
gd_version: 2
tempnam_function: On (Vrai)
magic_quotes_runtime: Off (Faux)
E_ALL: 32759
E_STRICT: 2048
E_DEPRECATED: 8192
test_file_timedifference: Aucune différence de date du système trouvée
test_db_timedifference: Aucune différence de date du système trouvée
create_dir_and_file: 1
memory_limit: 512M
max_execution_time: 300
register_globals: Off (Faux)
output_buffering: 4096
disable_functions: _dyuweyrj4, _dyuweyrj4r, dl
open_basedir:
test_remote_url: Valable
file_uploads: On (Vrai)
post_max_size: 130M
upload_max_filesize: 128M
session_save_path: /tmp (0700)
session_use_cookies: On (Vrai)
xml_function: On (Vrai)
xmlreader_class: On (Vrai)
check_ini_set: On (Vrai)
curl: On

Performance Information:

allow_browser_cache: Off (Faux)
browser_cache_expiry: 60
php_opcache: On (Vrai)
smarty_cache: Off (Faux)
smarty_compilecheck: Off (Faux)
auto_clear_cache_age: On (Vrai)
Server Information:

Server Software: Apache
Server Api: fpm-fcgi
Server Os: Linux 4.14.19-ovh-vps-grsec-zfs-classid On x86_64
Server Db Type: MySQL (mysqli)
Server Db Version: 5.6.34
Server Db Grants: Trouvé un privilège "GRANT ALL" qui semble être adapté

Permission Information:

tmp: /home/hyunkellzb/www/tmp (0705)
tmp_cache: /home/hyunkellzb/www/tmp/cache (0705)
templates_c: /home/hyunkellzb/www/tmp/templates_c (0705)
modules: /home/hyunkellzb/www/modules (0705)
uploads: /home/hyunkellzb/www/uploads (0705)
Masque de création de fichier (umask) : /home/hyunkellzb/www/tmp/cache (0705)
config_file: 0444
----------------------------------------------

Bonsoir à tous !

Je sollicite de nouveau votre aide pour un problème sur le module "Cart2", plus précisément : l'ajout au panier.

Actuellement, lorsque l'on effectue un ajout au panier, un rechargement de la page s'effectue pour mettre à jour le panier. Cependant, ce rechargement de page fait que (par exemple) si on se trouvait en bas de page, on se retrouve en haut après.

Vu comme ça, ça semble pas si bloquant. Sauf que si j'applique des filtres en Javascript pour les recherches produits de mes tableaux (foreach) et bien ils sont perdus à cause de l'ajout au panier.

Après plusieurs jours de recherche, j'ai cru comprendre que la solution était "Ajax" sauf que je ne parviens pas à mettre en place un code avec Cart2 qui permettrait d'empêcher le rechargement après le "submit".


Comme je commence à tourner très sévèrement en rond, toutes ouvertures sur de nouvelles idées est la bienvenue !

En vous remerciant par avance.
#2

Bonjour,
La suite e-commerce de CMSMS est assez fastidieuse à mettre en place, mais elle fonctionne.
Je n'ai pas de solution à te proposer pour un ajout au panier sans rechargement de la page, mais j'ai trouvé ce vieux fil de discussion en anglais qui pourra peut-être t'aiguiller :
Notifying successful add-to-cart
Dans le code proposé, il ne faut par exemple pas réutiliser la balise {cc_protect}. Cette fonctionnalité est maintenant intégrée à FEU.

Voici d'autres liens qui parlent du chargement de contenu sans rechargement complet de la page web à l'époque de CMSMS 1.x :
Easy way to load content without page refresh
The CMSMS AJAX Challenge

Valable pour CMSMS 2.x :
CMSMS modules and 'endless scrolling'

Par ailleurs, tu dois aussi avoir la possibilité de sauvegarder tes filtres de recherche produits dans un cookie.
#3

Merci beaucoup pour toutes ces infos je vais essayer tout ça, je travaille encore sur le sujet, mais sans succès pour l'instant.

Concernant la suite E-commerce, je confirme qu'elle fonctionne très bien j'ai fais pas mal de site avec mais il est vrai que je n'avais pas eu l'occasion de tomber sur un site de vente en gros avec environs 800 produits nouveaux par jour, et ce problème d'ajout au panier est le dernier que je rencontre !

Concernant les filtres, j'ai gérer avec des formulaires Php au final, ça passe bien. Mais le fait que le client remonte tout en haut de la page à chaque ajout au panier (sachant que la grande majorité des clients mettent plusieurs dizaines d'articles différent au panier) ça coince.

Justement ce soir j'essayais de me tourner vers une autre approche du problème :

Dans le fichier du module Cart2 : "action.default.php" se trouve l'action du formulaire d'ajout au panier qui redirige vers la page actuelle avec l'option : cge_url::current_url()
Mon idée était de faire en sorte que dès que la page se recharge, elle retourne à l'id du submit où le clique à eu lieu avec la variable {$submitname} ou {$formstart} (un liens sur une ancre en gros) mais pour le moment sans succès (je ne parviens pas à trouver la bonne syntaxe).


Si je trouve quelque chose qui fonctionne, je le posterai ici.
#4

Salut,
Regarde aussi le module CGSimpleSmarty.
Tu dois pouvoir envoyer ton ajout au panier en Ajax en utilisant {module_action_url} ou {module_action_link}.
Tiens-nous au courant.
#5

Bien le bonsoir !

Après plusieurs mois de recherche et bien ... Je sèche toujours !

Je n'arrive absolument pas à faire fonctionner l'ajout au panier sans rechargement.

Du coup, pour essayer de contourner les problèmes liés au rechargement de page, j'ai cherché à utiliser les Session_start et Setcookie pour les recheches + les "options" panier. (des options sous forme de textes, juste de l'information visuel)

En soit, ça fonctionne super, sauf que ... Dès que je clique sur le bouton "add to cart" mes $_session disparaissent (mais pas l'ID !) et de même pour mes cookies ...

Quelqu'un aurait-il une idée du pourquoi le module CART2 m'en veut autant ?

PS : Bien entendu, la solution serait de mettre les options après les ajouts au paniers, mais malheureusement, les options choisis par le client amène vers des type de "boutiques différentes" ...

L'ajout au panier semble faire sauter tout ce que je mets en place, le bougre !

En vous remerciant par avance.
#6

Bonjour,

Comme l'a proposé cyrcle, as-tu tenté de poster le formulaire d'ajout au panier en ajax ?
#7

Bonjour et encore merci pour ce retour,

Oui mais sans succès, mais je m'y suis sûrement mal prit c'est pas impossible du tout.

{module_action_url module='Cart2' action='default' forajax='1'}

J'ai tenté dans le template "add to cart" dans les "Balises Smarty spécifiques" de la page.

Pour être honnête, je n'ai pas forcément tout compris sur l'utilisation, je n'ai trouvé que très peu de documentation (d'ailleurs, si vous avez une documentation là dessus, je suis preneur).


Encore merci pour votre aide.
#8

Sur le principe, ce n'est pas lié au module ou au CMS : il faut sérialiser les données du forum puis poster le tout grâce à $.ajax ou $.post en JS - je t'invite à te documenter sur ces fonctions et à lier le tout à l'évènement "submit" du formulaire d'ajout au panier Wink

Il est plus simple de te donner des pistes car solutionner spécifique ton problème demanderai une analyse plus spécifique de ton code, ton site, etc..

Si tu as la solution, poste-nous le tout ici Wink
#9

Les pistes me conviennent parfaitement !

C'est sûrement pour ça que je n'ai pas réussi, je ne couplais pas le tout.

Mais si "j'assemble" les {module_action_url} avec un code de ce genre

Code :
[== JS ==]
function ajoutPanierAjax() {  
  $('.ajout-panier form').on( "submit", function( event ) {
    event.preventDefault();
    var posturl = $(this).attr("action") + "&showtemplate=false";  
    var postdata = $(this).serialize();

    $.post(posturl,postdata,function() {

      updateCart();
    });
  });
}

Ca devrait pouvoir le faire, je test tout ça !
#10

Bonsoir à tous

j'avance tout doucement grâce à vos conseils et vous en remercie

Je peux à présent poster des liens, voici le site pour mes test AJAX !

http://dev-site-am.fr/clients/fleurassis...boutalogue

edit : voici un accès pour tester si besoin -
user :99999
mdp : testcms


Donc, concrètement, j'ai "réussi" à faire fonctionner l'ajout au panier en AJAX, mais pour une raison que j'ignore (et j'avoue que je tourne encore en rond) le paramètre &showtemplate=false n'est pas prit en compte !
Le produit s'ajoute bien au panier, mais il rajoute tout le template autour et il faut que j'actualise ma page pour voir la panier correctement (mais au moins, je conserve mes $_session et cookies !

Voici une partie du code utilisé (récupéré grâce à CMSCanBeSimple !) il faut encore quelques adaptations:
Code :
[== JavaScript ==]
function ajoutPanierAjax() {
        var pQuote = document.getElementById('tableau-boutalogue').getElementsByTagName('form')[0];
        pQuote.action = window.location.href+'&showtemplate=false';

        pQuote.onsubmit =  function(e){
        var data = serialize(pQuote);
        var r = new XMLHttpRequest();

        r.onreadystatechange = function(){
                if (r.readyState == 4 && r.status == 200) {
                        showResponse(r.responseText);
                }
        }
        r.open('POST', window.location.href+'&showtemplate=false');
        r.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        r.send(data);

                e.preventDefault();
        }

        function showResponse(r) {
                var respDiv = document.getElementById('panier-ajax');
                respDiv.innerHTML = r;
                addClass(respDiv, 'active');
                setTimeout(function(){
                        removeClass(respDiv, 'active');
                },5000);
        }
}

ajoutPanierAjax ();

Une idée du pourquoi le &showtemplate=false ne fonctionne pas ?

Merci d'avance.
#11

Bonjour,

Avec
Code :
[== Javascript ==]
&showtemplate="false"
peut-être.

EricFreelance - Design, intégration et développement de sites internet.
#12

A mon avis c'est une erreur de caractère dans la Query string - il faut utiliser le "?" :
Code :
'?showtemplate=false';

Attention aussi car le window.location.href peut t'induire en erreur si ton returnid d'action de formulaire n'est pas sur la même page.

Teste et dis-nous Wink
#13

l'action de mon formulaire se trouve bien sur la même page (j'ai forcé avec le paramètre destpage du module cart2 au cas où)

Et que ce soit le ? ou le & (c'est la première chose que j'ai testé) ça me fait la même, j'ai l'impression qui ne me prend pas du tout en compte l'option.

Quand je regarde mes logs, il ne me prend pas du tout en compte le &showtemplate=false

finished loading: GET "http://dev-site-am.fr/clients/fleurassis...boutalogue".


Je vais voir si je peux pas contourner en utilisant autre chose que le window.location.href


Je vous tiens au courant !
#14

Ce que j'utilise et qui ne me pose pas de soucis :

Code :
[== JavaScript ==]
$('#myform').on('submit', function(event) {
var href = window.location.href;
var params = "{\"disable_theme\":true,\"showtemplate\":\"false\"";
// suite params ...
params += "}";

data = jQuery.parseJSON(params);

EricFreelance - Design, intégration et développement de sites internet.
#15

Et ceci ?
Code :
[== Indéfini ==]
window.location.search = "showtemplate=false";
pQuote.action = window.location.href;
...
r.open('POST', window.location.href);
#16

Je vous remercie, je test tout ça !
#17

Bonjour à tous,

Me voici de retour, mais cette fois ... Avec la réponse !

Ci-dessous, le code utilisé pour faire en sorte que tous les ajouts au panier de mon tableau (foreach) passe en AJAX (et ne provoque donc plus le rechargement de la page et le retour en haut).

Code :
[== JavaScript ==]
$('#tableau-boutalogue form.cms_form').on('submit', function () {

      var that = $(this),
          url = that.attr('action'),
          type = that.attr('POST'),
          data = {};

      that.find('[name]').each(function (index, value) {
          var that = $(this),
              name = that.attr('name'),
              value = that.val();
          data[name] = value;
      });
      
      $.ajax({
          url: url,
          method: type,
          data: data,
          success: function(response) {
              console.log(response);
              $("#panier-ajax").load( "index.php?page=boutalogue #panier-ajax");
          }
      });

      return false;

  });

#tableau-boutalogue correspond au tableau qui comporte tous les produits disponible pour le client.
form.cms_form correspond à tous les formulaires d'ajout au panier, qui, dans le module Cart2, ont comme class "cms_form".

#panier-ajax correspond au div qui contient le panier {Cart2 action=viewcart} de la même page (celui qui reçois les informations)


Je vous remercie tous pour votre aide et toutes les pistes que vous m'avez fourni.

Je passe le sujet en résolu.
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)