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_attribute , id_combination , idCombination , ipa。大多数关于 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'));
您的解决方案可能是:
- 在 "Add to cart" 按钮上使用事件侦听器将 .js 文件添加到您的主题(使用 event.preventDefault() 以确保您有时间处理后续步骤)
如果触发此事件,请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 调用时传递 group
和 id_product
值。
检索 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。
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_attribute , id_combination , idCombination , ipa。大多数关于 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'));
您的解决方案可能是:
- 在 "Add to cart" 按钮上使用事件侦听器将 .js 文件添加到您的主题(使用 event.preventDefault() 以确保您有时间处理后续步骤)
如果触发此事件,请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 调用时传递
group
和id_product
值。检索 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。