Javascript PrestaShop 1.7如何在产品页面上获取id\u product\u属性?

Javascript PrestaShop 1.7如何在产品页面上获取id\u product\u属性?,javascript,php,prestashop,prestashop-1.7,Javascript,Php,Prestashop,Prestashop 1.7,id_产品_属性在URL-值“10”中可用: 我需要从当前产品页面获取当前id\u产品属性。可能来自$\u GET,也可能来自DOM元素,或者presta shop变量,但在添加到购物车之前,我必须将其传递给JavaScript函数(即使最后,客户没有将产品添加到购物车-这就是为什么我不能使用钩子:“actionCartSave”) 我可以从hook displayAfterProductThumbs访问此值,但获取当前值有问题。要获得正确的值,我需要: 1) 在产品页面上选择产品属性(尺寸、

id_产品_属性在URL-值“10”中可用:

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

我可以从hook displayAfterProductThumbs访问此值,但获取当前值有问题。要获得正确的值,我需要:

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

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

3) 读取数据

但我需要它,而不需要它让人耳目一新


在文档中,我找不到任何关于这方面的信息。已尝试查找以下短语:id\u产品属性、id\u组合、id组合、ipa。大多数关于id_product_属性的信息(在谷歌上找到)都与搜索引擎优化有关,“在url中设置id_product_属性用于搜索引擎优化不是一个好主意”。

Hi@DamianSobkowiak,欢迎来到SO:-)

在PrestaShop 1.6.x和更早的版本中,您可以通过使用
idProductAttribute
global JS变量来检索此ID

在PrestaShop 1.7.x版本中,买方选择的产品属性(大小、颜色等)id存储在数组中的
变量中,但是该变量不再包含相关的
id\u产品属性
本身

将产品添加到购物车时,将调用
/controllers/front/CartController.php
文件,您可以在第366行看到以下内容:

$this->id_product_attribute = (int)Product::getIdProductAttributeByIdAttributes($this->id_product, Tools::getValue('group'));
您的解决方案可以是:

  • 使用“添加到购物车”按钮上的事件侦听器将.js文件添加到主题中(用于确保您有时间处理接下来的步骤)
  • 如果触发此事件,请对将使用以下代码创建的控制器文件进行Ajax调用:

    if(isset($\u-GET['group'])和&is\u数组($\u-GET['group'])和&isset($\u-GET['id\u-product']))
    {
    包括('config/config.inc.php');
    echo(int)Product::getIDProductAttributeByAdattributes((int)$\u GET['id\u Product'],$\u GET['group']);
    }

    在进行ajax调用时,不要忘记传递
    id\u产品

  • 检索ajax调用的结果并将id\u product\u属性存储到变量中


  • 我希望这有帮助

    有一个名为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'].'"/>';
        }
    }
    
    公共函数hookDisplayProductAdditionalInfo($params)
    {
    如果设置($params['product'])){
    //现在返回使用idproductattribute隐藏的输入类型
    返回“”;
    }
    }
    

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

    非常简单的方法!非常感谢!:)