我需要在自定义页面(不是产品页面)上有一个“添加到购物车”按钮,基本上是一个按钮,我可以传递某个产品ID并调用ajax-cart.js函数“添加”。
现在,我尝试了这段代码:
<a class="exclusive_small ajax_add_to_cart_button" title="{l s='Add to cart'}" onclick="ajaxCart.add(26, null, false, null, 1, null)">{l s='Add to cart'}</a>
但是,虽然确实将具有指定ID(在这种情况下为26)的产品添加到购物车,但它也会触发一个包含2个错误的警告框:未找到产品,此产品不再可用。
我已经设法在CartController.php中找到处理这些错误的代码:
protected function processChangeProductInCart()
{
$mode = (Tools::getIsset('update') && $this->id_product) ? 'update' : 'add';
if ($this->qty == 0)
$this->errors[] = Tools::displayError('Null quantity.', !Tools::getValue('ajax'));
elseif (!$this->id_product)
$this->errors[] = Tools::displayError('Product not found', !Tools::getValue('ajax'));
$product = new Product($this->id_product, true, $this->context->language->id);
if (!$product->id || !$product->active)
{
$this->errors[] = Tools::displayError('This product is no longer available.', !Tools::getValue('ajax'));
return;
}
但是我不明白它是如何工作的,以及为什么错误显示它何时正常工作。
我做错了什么,这是一个错误吗?
答案 0 :(得分:0)
在您的自定义页面中,首先您需要获取产品ID和产品属性ID,然后单击您的按钮,您必须将这些值提交给您的前端控制器(您制作),并在该控制器中获得这些ID和添加到新购物车。您必须编写如下代码:
创建您的tpl文件 - &gt;
abc.tpl
<input type="button" name="vss_add_to_cart" value="{l s='Add to cart' mod='your_module_name'}" class="vss_btn1" id="vss_add_to_cart" style="background:{$background|escape:'htmlall':'UTF-8'};color:{$text|escape:'htmlall':'UTF-8'};border:{$border|escape:'htmlall':'UTF-8'};"/>
现在你必须在同一个文件中点击那个buuton写一些脚本:
</script>
$( "#vss_add_to_cart" ).one( "click", function() {
var id_product_attribute = document.getElementById('idCombination').value;
var id_product = document.getElementById('product_page_product_id').value;
var quantity = document.getElementById('quantity_wanted').value;
$.post(
'{$link|escape:'quotes':'UTF-8'}',
{
id: id_product,
ipa: id_product_attribute,
qty: quantity
},
function (data) {
window.location.replace(data);
}
);
});
</script>
因为{$ link}是你想要获取值的地方,实际上你需要在你的模块文件夹中创建一个控制器,并在那里创建一个前端文件夹,如:
C:\wamp\www\prestashop\modules\oneclickcheckout\controllers\front
现在你必须创建一个文件your_module_name.php并编写代码:
your_module_name.php
class OneclickcheckoutOneclickcheckoutModuleFrontController extends ModuleFrontController
{
public function initContent()
{
$qty = Tools::getValue('qty');
$id_product = Tools::getValue('id');
$id_product_attribute = Tools::getValue('ipa');
$this->context->cart->add();
if ($this->context->cart->id) {
$this->context->cookie->id_cart = (int) $this->context->cart->id;
}
$this->context->cart->updateQty($qty, $id_product, $id_product_attribute);
$link = $this->context->link->getPageLink('order');
echo $link;
die;
}
}
然后在您的数据库中添加了一个新购物车,并且还插入了相应的购物车产品详细信息。我希望这对您有所帮助。