PrestaShop 1.7如何在产品页面上获得id_product_attribute?

时间:2019-05-09 14:06:25

标签: javascript php prestashop prestashop-1.7

id_product_attribute在URL中可用-值“ 10”: http://localhost/presta/women/2-10-brown-(...).html#/2-size-m

我需要从当前产品页面获得当前id_product_attribute 。可能来自$ _GET,或者来自DOM元素,或者来自presta shop变量-但是在添加到购物车之前,我必须将其传递给JavaScript函数(即使最后,客户也不要将产品添加到购物车中-这就是为什么我可以不要使用钩子:“ actionCartSave”)

我可以从钩子displayAfterProductThumbs访问此值-但是获取当前值存在问题。要获得正确的值,我需要:

1)在产品页面上选择产品属性(尺寸,颜色)

2)刷新页面以触发钩子“ displayAfterProductThumbs”

3)读取数据

但是我需要它不刷新

在文档中,我对此一无所获。试图查找以下短语: id_product_attribute id_combination idCombination ipa 。有关id_product_attribute(可在Google上找到)的大多数信息都与SEO有关,“出于SEO的目的,在URL中添加id_product_attribute并不是一个好主意”。

2 个答案:

答案 0 :(得分:1)

@DamianSobkowiak,您好,欢迎来到SO:-)

在PrestaShop 1.6.x和更低版本中,您可以使用idProductAttribute全局JS变量来检索此ID。

在PrestaShop 1.7.x版本中,买方选择的产品属性(尺寸,颜色等)ID存储在数组的group变量中,但是此变量不再包含相关的{{1 }}本身。

将商品添加到购物车后,将调用id_product_attribute文件,您可以在第366行看到以下内容:

/controllers/front/CartController.php

一个适合您的解决方案是:

  1. 在“添加到购物车”按钮上使用事件监听器将.js文件添加到主题(使用event.preventDefault()确保有时间处理下一步)
  2. 如果触发了此事件,请使用以下代码对将要创建的控制器文件进行Ajax调用:

    $this->id_product_attribute = (int)Product::getIdProductAttributeByIdAttributes($this->id_product, Tools::getValue('group'));

    在进行ajax调用时,请不要忘记传递if (isset($_GET['group']) && is_array($_GET['group']) && isset($_GET['id_product'])) { include('config/config.inc.php'); echo (int)Product::getIdProductAttributeByIdAttributes((int)$_GET['id_product'], $_GET['group']); }group值。

  3. 获取ajax调用的结果并将id_product_attribute存储到变量中

我希望这会有所帮助!

答案 1 :(得分:0)

有一个名为displayProductAdditionalInfo的钩子。 在模块中注册挂钩,然后在参数中获取产品详细信息。 当我们更改产品组合时,此代码将运行。 因此idProductAttribute将在组合更改时自动更新。

public function hookDisplayProductAdditionalInfo($params)
{
    if isset($params['product']) {
        //  Now return the input type hidden with idproductattribute 
       return '<input type="hidden" name="id_product_attribute" id="product_attribute_info" value="'.$params['product']['id_product_attribute'].'"/>';
    }
}

现在,单击“添加到购物车”将阻止默认操作,并从输入的隐藏字段中获取idProductAttribute。