#php #magento
#php #magento
Вопрос:
Я использую Magento 1.5.1.0. Я хочу добавлять продукты с помощью PHP-скрипта. У меня есть пользовательский набор атрибутов с 8 пользовательскими атрибутами, как я добавляю значение к пользовательским атрибутам через php?
Ответ №1:
$host = "127.0.0.1/magento/index.php"; //our online shop url
$client = new SoapClient('http://'.$host.'/api/soap/?wsdl'); //soap handle
$apiuser= "user"; //webservice user login
$apikey = "pw"; //webservice user pass
$sess_id= $client->login($apiuser, $apikey); //we do login
$attributeSets = $client->call($sess_id, 'product_attribute_set.list');
$set = current($attributeSets);
$newProductData = array(
'name' => 'name'
// websites - Array of website ids to which you want to assign a new product
, 'websites' => array(1) // array(1,2,3,...)
, 'short_description' => 'short'
, 'description' => 'description'
, 'status' => 'status'
, 'your_attributes' => $value
, 'your_attributes2' => $value
, 'your_attributes3' => $value
and so on
);
try {
$client->call($sess_id, 'product.create', array('simple', $set['set_id'], 'sku_of_product', $newProductData));
}
catch (Exception $e) { //while an error has occured
echo "==> Error: ".$e->getMessage(); //we print this
}
Hf amp;GL 😀
С уважением, Boti
Комментарии:
1. Спасибо. Единственная проблема в том, что у меня не активировано Soap на моем сервере. Есть другой способ?
Ответ №2:
через SOAP с помощью product.create или product.update, если он уже существует
$newProductData = array('name' => 'name',
'your_attribute' => $value
,'your_attribute2' => $value
);
$proxy->call($sessionid, 'product.create', array('simple', $set['set_id'], sku, $newProductData));
Затем продукты будут созданы с вашими пользовательскими атрибутами.
С уважением, boti
Комментарии:
1. Спасибо за ваш быстрый ответ, не могли бы вы показать мне, как должен выглядеть файл all php. Я видел в примере magento $ proxy = новый SoapClient (‘ magentohost/api/soap /?wsdl’ ); $SessionID = $proxy->login(‘apiUser’, ‘apiKey’); $attributeSets = $proxy-> call($SessionID, ‘product_attribute_set.list’); $set = current($attributeSets); С наилучшими пожеланиями
2. Да, у меня это работает нормально. Это будет работать только для soap api версии V1
Ответ №3:
Поскольку я нашел этот ответ в своем поиске, чтобы сделать то же самое с более поздней версией SOAP API V2, я добавляю решение, которое я, наконец, придумал.
Для SOAP API версии V2, похоже, нам нужно вложить additional_attributes в слой multi_data или single_data?
Глядя на app/code/core/Mage/Catalog/Model/Product/Api/V2.php #256 Я думаю, нам нужно использовать
$manufacturer = new stdClass();
$manufacturer->key = "manufacturer";
$manufacturer->value = "20";
$additionalAttrs['single_data'][] = $manufacturer;
или
$manufacturer = new stdClass();
$manufacturer->key = "manufacturer";
$manufacturer->value = "20";
$additionalAttrs['multi_data'][] = $manufacturer;
для использования как:
$productData = new stdClass();
$additionalAttrs = array();
// manufacturer from one of the two above ^
$productData->name = $data['name'];
$productData->description = $data['description'];
$productData->short_description = $data['short_description'];
$productData->weight = 0;
$productData->status = 2; // 1 = active
$productData->visibility = 4; //visible in search/catalog
$productData->category_ids = $data['categories'];
$productData->price = $data['price'];
$productData->tax_class_id = 2; // 2=standard
$productData->additional_attributes = $additionalAttrs;
// Create new product
try {
$proxy->catalogProductCreate($sessionId, 'virtual', 9, $sku, $productData); // 9 is courses
} catch (SoapFault $e) {
print $e->getMessage(); //Internal Error. Please see log for details.
exit();
}