Обновление функций продукта через PHP в Prestashop
Я хотел бы изменить значение из пользовательских функций (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


FeatureValue::addFeatureValueImport()
тоже.

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 );

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.