Тема 1.7 как получить id_product_attribute на странице продукта?
атрибут id_product_attribute доступен в URL-значении " 10": http://localhost/presta/women/2-10-brown-(...).сообщение:/2-размер-М
Мне нужно получить текущий id_product_attribute с текущей страницы продукта . Может быть из $_GET, или из элемента DOM, или переменной presta shop-но я должен передать ее в функцию JavaScript, прежде чем добавлять в корзину (даже если, наконец, клиент не добавляет продукт в корзину - вот почему я не могу использовать hook: "actionCartSave")
У меня есть доступ к этому значению из hook displayAfterProductThumbs - но это проблема с получением текущего значения. Чтобы получить правильное значение, мне нужно:
1) Выберите атрибуты продукта на странице продукта (размер, цвет)
2) обновите страницу, чтобы вызвать крючок " displayAfterProductThumbs"
3) чтение данных
Но мне это нужно без освежения.
В документации я ничего не могу найти об этом. Пытался найти для фраз: id_product_attribute, id_combination, idCombination, ipa . Большая часть информации о id_product_attribute (найденной в Google) связана с SEO и "не очень хорошая идея иметь id_product_attribute в url для целей SEO".
Ответы - Тема 1.7 как получить id_product_attribute на странице продукта? / PrestaShop 1.7 How to get id_product_attribute on product page?

09.05.2019 08:20:43
Привет @DamianSobkowiak и добро пожаловать в SO :-)
В PrestaShop 1.6.x и более старые версии, вы можете получить этот идентификатор с помощью idProductAttribute
переменной в массиве, однако эта переменная больше не содержит связанный group
.
Когда продукт добавляется в корзину, используется параметр id_product_attribute
-файл вызывается, и вы можете увидеть следующее в строке 366:
/controllers/front/CartController.php
Решением для вас может быть::
- Добавить а .js-файл для вашей темы с прослушивателем событий на кнопке "Добавить в корзину" (используйте событие.preventDefault (), чтобы убедиться, что у вас будет время для обработки следующих шагов)
В случае, если это событие инициируется, выполните Ajax-вызов файла контроллера, который вы создадите с помощью следующего кода:
$this->id_product_attribute = (int)Product::getIdProductAttributeByIdAttributes($this->id_product, Tools::getValue('group'));
Не забудьте передать значения
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']); }
иid_product при выполнении вызова ajax.
Получить результат AJAX-вызов и хранить id_product_attribute в переменную
Надеюсь, это поможет!

11.05.2019 08:06:51
Существует крюк под названием 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 из скрытого поля ввода.