Обновление функций продукта через PHP в Prestashop

Обновление функций продукта через PHP в Prestashop

23.04.2015 10:23:32 Просмотров 45 Источник

Я хотел бы изменить значение из пользовательских функций (Product Features) (Artikeleigenschaften) в моем собственном классе.

Изменить стоимость продукта очень просто:

$productObj = new Product($produktId);
$productObj->setFieldsToUpdate(array('ean13'));
$productObj->ean13 = "johndoo";
$productObj->save();

Но есть ли аналогичный способ изменить характеристики продукта?

У вопроса есть решение - Посмотреть?

Ответы - Обновление функций продукта через PHP в Prestashop / Update Product Features via PHP in Prestashop

elPresta

23.04.2015 04:43:18

МХ, я никогда не пытался сделать это, но вы могли бы попробовать это:

Product::addFeatureProductImport($productObjc->id, $id_feature, $id_feature_value); 
https://stackoverflow.com/questions/29816449/update-product-features-via-php-in-prestashop/29825329#comment47817765_29825329
Это часть решения проблемы. Как я ответил снова, вы должны использовать FeatureValue::addFeatureValueImport() тоже.
Harry

24.04.2015 02:13:21

Вот мое решение: Для обновления функций продукта необходимо обновить 2 таблицы в базе данных: ps_feature_value и ps_feature_value_lang

Сделайте это с помощью:

$id_feature_value = (int)FeatureValue::addFeatureValueImport
( 
  (int)$feature['id_feature'],
  $newFeatureValue,
  (int)$produktId,
  $this->context->language->id,
  1 // $custom
);
Product::addFeatureProductImport(
    $produktId, (int)$feature['id_feature'], $id_feature_value
);

Для обновления объектов с не настраиваемыми значениями используйте:

$arr = FeatureValue::getFeatureValueLang($id_dropdown);
foreach ( $arr AS $item)
    if ($item['id_lang'] == $this->context->language->id)
    {
        $feature_val_name = $item['value'] ;
    }

$id_feature_value = (int)FeatureValue::addFeatureValueImport
( 
   (int)$feature['id_feature'],
   $feature_val_name,
   $product->id,
   $this->context->language->id, 
   false 
);
$product->addFeatureProductImport( $product->id , (int)$feature['id_feature'], $id_feature_value );
Eryk Wróbel

01.06.2019 01:15:27

Я создал эту функцию на основе ImportControlloer. Добавьте эту функцию в продукт.PHP переопределяет и использует его

 /**
 * Adds a feature value to a Product. If You want to have feature selected from dropdown leave $custom to false.
 * @param int|$id_product
 * @param int|$id_feature_group
 * @param string|$feature_value
 * @param bool|true $custom
 * @param int|$id_lang
 * @return bool
 */
public static function setFeatureValueToProduct($id_product, $id_feature_group, $feature_value, $custom = false, $id_lang)
{
    $group_feature_obj = Feature::getFeature($id_lang, $id_feature_group);

    if ($group_feature_obj){
        $feature_name = $group_feature_obj['name'];
        $feature_value = $feature_value ? trim($feature_value) : '';
        $position = false;

        if (!empty($feature_name) && !empty($feature_value)) {
            $id_feature = (int)FeatureCore::addFeatureImport($feature_name, $position);

            $id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature, $feature_value, $id_product, $id_lang, $custom);
            if (Product::addFeatureProductImport($id_product, $id_feature, $id_feature_value)){
                Feature::cleanPositions();
                return true;
            } else {
                return;
            }
        }
    } else {
        return;
    }
}

Пример использования:

Product::setFeatureValue(1597, 15,  'Dracarys', false, 1); 

Он будет загружать выпадающее значение "Dracarys" в продукт с идентификатором 1597 и групповую функцию с идентификатором 15. Если вы хотите сделать его пользовательским значением (не предопределенным), просто установите 4-й параметр в true.

Закрыть X