PrestaShop 1.7 Как получить id_product_attribute на странице товара? - PullRequest
1 голос
/ 09 мая 2019

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 и «не очень хорошая идея иметь id_product_attribute в URL для целей SEO».

Ответы [ 2 ]

1 голос
/ 09 мая 2019

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

В PrestaShop 1.6.x и более ранних версиях этот идентификатор можно получить с помощью глобальной переменной JS idProductAttribute.

InВерсии PrestaShop 1.7.x, атрибуты товара (размер, цвет и т. Д.), Выбранные покупателем, хранятся в переменной group в массиве, однако эта переменная больше не содержит самого связанного id_product_attribute.

Когда товар добавляется в корзину, вызывается файл /controllers/front/CartController.php, и в строке 366 отображается следующее:

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

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

  1. Добавьте файл .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']); }

    Не забудьте передать значения group и id_product при созданииajax call.

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

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

0 голосов
/ 11 мая 2019

Есть ловушка, которая называется 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 из скрытого поля ввода.

...