Тема 1.7 как получить id_product_attribute на странице продукта?

Тема 1.7 как получить id_product_attribute на странице продукта?

09.05.2019 05:06:25 Просмотров 77 Источник

атрибут 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?

Является ответом!
Bruno Leveque

09.05.2019 08:20:43

Привет @DamianSobkowiak и добро пожаловать в SO :-)

В PrestaShop 1.6.x и более старые версии, вы можете получить этот идентификатор с помощью idProductAttributeпеременной в массиве, однако эта переменная больше не содержит связанный group.

Когда продукт добавляется в корзину, используется параметр id_product_attribute-файл вызывается, и вы можете увидеть следующее в строке 366:

/controllers/front/CartController.php

Решением для вас может быть::

  1. Добавить а .js-файл для вашей темы с прослушивателем событий на кнопке "Добавить в корзину" (используйте событие.preventDefault (), чтобы убедиться, что у вас будет время для обработки следующих шагов)
  2. В случае, если это событие инициируется, выполните 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.

  3. Получить результат AJAX-вызов и хранить id_product_attribute в переменную

Надеюсь, это поможет!

Sanjay

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 из скрытого поля ввода.

Закрыть X