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

PrestaShop 1.7 How to get id_product_attribute on product page?

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

我需要从当前产品页面获取当前id_product_attribute。可能来自 $_GET,或来自 DOM 元素,或 Presta 商店变量 - 但我必须将它传递给 JavaScript 函数,然后再添加到购物车(即使最终客户不添加产品到购物车 - 这就是我不能使用挂钩的原因:"actionCartSave")

我可以从挂钩 displayAfterProductThumbs 访问此值 - 但获取当前值时出现问题。要获得正确的值,我需要:

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

2)刷新页面触发hook"displayAfterProductThumbs"

3)读取数据

但我需要没有刷新。

在文档中我找不到任何相关信息。试图找到短语: id_product_attributeid_combinationidCombinationipa。大多数关于 id_product_attribute 的信息(在 Google 上找到)都与 SEO 和 "not good idea to have id_product_attribute in url for SEO purposes".

有关

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

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

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

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

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

您的解决方案可能是:

  1. 在 "Add to cart" 按钮上使用事件侦听器将 .js 文件添加到您的主题(使用 event.preventDefault() 以确保您有时间处理后续步骤)
  2. 如果触发此事件,请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']); }

    不要忘记在进行 ajax 调用时传递 groupid_product 值。

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

希望对您有所帮助!

有一个名为 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。