2013-07-15 3 views
0

Je me bats depuis 2 heures maintenant, cherchant partout une solution à cela.jQuery .load() interférant avec la fonction de panier

Je travaille avec une installation Zen-Cart, et j'ai décidé de jeter sur certaines bannières dynamiques. Fondamentalement, j'utilise jQuery.get() pour charger une URL à partir de banner1.php - banner1.php a un tableau de quelques URL (qui sont des pages de produit), et il renvoie une URL aléatoire du tableau. Une fois l'URL aléatoire chargée par jQuery, j'utilise ensuite la fonction jQuery.load() pour charger l'image du produit, le prix du produit et le nom du produit. Tout cela fonctionne très bien, mais le problème est qu'il semble que la fonction load() interfère avec ma fonction "redirection" de Zen-Cart. Dites si vous visualisez un produit, appelons-le "Produit A" - et vous décidez de vous connecter à partir de cette page en cliquant sur le bouton "Connexion" - ce qui se passe est que vous êtes redirigé vers la page de connexion, vous entrez vos informations de connexion , et cliquez sur "Envoyer". Le résultat standard est que si vous êtes connecté avec succès, vous êtes ramené à la page "Produit A". Mais avec ma petite concaténation de bannières jQuery dynamique, au lieu de rediriger le "Produit A", il charge une des pages que le fichier jQuery.load() a utilisé pour générer la bannière aléatoire. J'ai 3 bannières, chaque chargement dynamiquement une URL aléatoire, mais voici un exemple de Banner 1: La chose est que je ne suis pas trop préoccupé par

<script type="text/javascript"> 


$.get("banner1.php", function(getbannerlink1) { 

$(document).ready(function() { 


$("#banner1").load(getbannerlink1+ " #globalproductimage"); 

$('#banner1name').load(getbannerlink1+ " #productName", function(result) { 
var banner1text = $('#banner1name').html(); 
banner1text = jQuery(banner1text).text(); 
$("#banner1name").html(banner1text); 

}); 

$('#banner1price').load(getbannerlink1+ " #productPrices", function(result) { 
var banner1prices = $('#banner1price').html(); 
banner1prices = jQuery(banner1prices).text(); 
$("#banner1price").html(banner1prices); 

}); 


var bannerlink1 = $("<a>").attr("href", getbannerlink1); 
$("#banner1name").wrap(bannerlink1); 
$("#banner1price").wrap(bannerlink1); 
$("#banner1").wrap(bannerlink1); 
}); 

}); 
</script> 

au sujet de la redirection illicite une fois un des journaux des clients dans le problème aussi se produit le plus décevant lorsque le client une fois à la caisse effectivement. Par exemple, s'ils devaient avoir des produits dans leur panier, cliquez sur le bouton Commander, qui leur demande ensuite de se connecter, et une fois qu'ils se connectent, au lieu de continuer avec la fonction de panier standard de les amener à la première étape processus, il les redirige vers l'une des pages que la bannière dynamique a chargée. Je ne sais pas comment régler ça, j'ai essayé des choses bizarres en vain. Par souci de référence, cela pourrait être nécessaire, cela est la fonction Zen Cart qui gère la redirection après une connexion:

if (sizeof($_SESSION['navigation']->snapshot) > 0) { 
     // $back = sizeof($_SESSION['navigation']->path)-2; 
     //if (isset($_SESSION['navigation']->path[$back]['page'])) { 
     // if (sizeof($_SESSION['navigation']->path)-2 > 0) { 
     $origin_href = zen_href_link($_SESSION['navigation']->snapshot['page'], zen_array_to_string($_SESSION['navigation']->snapshot['get'], array(zen_session_name())), $_SESSION['navigation']->snapshot['mode']); 
     //   $origin_href = zen_back_link_only(true); 
     $_SESSION['navigation']->clear_snapshot(); 
     zen_redirect($origin_href); 
    } else { 
     zen_redirect(zen_href_link(FILENAME_DEFAULT, '', $request_type)); 
    } 

S'il vous plaît aider! Peut-être y a-t-il un moyen plus simple de le faire:/

J'ai remarqué que la page qu'il charge est toujours la dernière bannière chargée par jQuery.load(). Comme je l'ai mentionné il y a 3 bannières au total, donc si le prix de Banner 2 était le dernier à charger, c'est l'URL qui est chargée dans la redirection.

Edit: banner1.php (cela génère simplement une URL aléatoire d'un tableau, mais actuellement à des fins de test, je ne dispose d'une URL dans le tableau):

<?php 
$strings = array('http://example.com/index.php?main_page=product_info&cPath=3&products_id=104'); 
echo $strings[array_rand($strings)]; 
?> 
+0

Devrait voir le code pour banner1.php, mais il semble que banner1.php modifie la variable de session $ _SESSION ['navigation'] qui est utilisée plus tard par Zen pour faire la redirection. –

+0

J'ai modifié le message d'origine pour inclure le code de banner1.php. Mais je ne suis pas si sûr que banner1.php le fasse. J'ai fait un test en enlevant le: $ .get ("banner1.php ", function (getbannerlink1) {et avoir le load() obtenir l'url directement à partir d'une variable locale.Je suis tout à fait certain que la fonction load() cause ce problème – StuyvesantBlue

Répondre

0

Il semble que la page d'accueil est la définition de l'instantané href. Je suppose que vous incluez certaines bibliothèques de cartouches Zen dans les URL de votre bannière qui définissent l'instantané de navigation de la session. Vous pouvez peut-être définir quelque chose pour ignorer votre URL pour l'instantané. Ajouter le code de bannière peut aider à résoudre ce problème.

Bien que je ne le recommanderais pas, vous pouvez ajouter une logique pour ne pas rediriger vers certaines pages après la connexion.

+0

Un peu en retard avec ma réponse - mais vous étiez 100% J'ai ajouté une chaîne de requête à l'URL lors de l'appel - et édité le fichier header_php.php avec une instruction if pour ignorer l'ajout de la page à l'instantané de l'historique s'il contient cette chaîne de requête spécifique dans l'URL. – StuyvesantBlue