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并不是一个好主意”。
答案 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
一个适合您的解决方案是:
如果触发了此事件,请使用以下代码对将要创建的控制器文件进行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
值。
获取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。