Magento がカテゴリを処理する方法を変更して、カートに追加する URL の ajax リクエストを連鎖させることで、ユーザーがカテゴリ ページから複数の構成可能な製品を一度に追加できるようにしました。
基本的に、ユーザーが追加したいアイテムのチェックボックスを選択すると<li>
、製品が「アクティブ」のクラスになります。この jQuery<li>
は、アクティブなクラスを持つそれぞれを取得し、変数 theLink で選択されたドロップダウンから「カートに追加する URL」を取得します。
$j('li.active').each(function(){
var theLink = $j(this).find('.shopthislookpageselect').val();
var successString = "was added to your shopping cart."
$j.ajax({
beforeSend: function(){$j('#modalBackground').show();},
type:"POST",
url: theLink,
success: function(data){
var returnPage = data;
var exists = (returnPage.indexOf(successString) !== -1);
if (exists) {$j('.col-main').prepend('<ul class="messages"><li class="success-msg"><ul><li><span>The items selected were added to your shopping cart. View your cart <a href="https://www.culturekings.com.au/checkout/cart/">HERE</a></span></li></ul></li></ul>'); $j("html, body").animate({ scrollTop: 0 }, "slow"); }
else {alert ('There was a problem adding these products to your cart. \n Please select the View Full Product Info link to add these items individually.')}
},
error: function(){alert('There was a problem adding these products to your cart. \n Please select the View Full Product Info link to add these items individually.');},
complete: function(){$j('#modalBackground').fadeOut(200);}
});
});
divmodalBackground
は透明な全幅と高さのオーバーレイで、各 ajax 呼び出しの開始時に表示され、最後に非表示になるローディング gif があります。
問題は、modalBackground が最初の ajax 呼び出しの開始時に表示され、最後に非表示になりますが、その後の他の呼び出しでは再び表示されないことです。成功関数の呼び出しが成功するたびに最後に表示される成功メッセージを数えることができるため、この関数がまだ実行されていることがわかります。
beforeSend は 1 回だけ起動しますか? もしそうなら、なぜですか?または、オーバーレイに対してこれを別の方法で処理する必要があります。
Magneto のカートに追加するコントローラーで大きな変更を加えないと、すべての製品を一度に追加することはできないので、これらの複数の Ajax リクエストを実行するのに行き詰まっていることに注意してください。