2011-11-11 80 views
1

我使用Magento 1.5.1.0。 我想通过PHP脚本添加产品。 我有一个自定义属性与8个自定义属性设置,我如何增加值通过PHP自定义属性?添加Magento产品属性

通过与product.create或product.update SOAP

回答

2
$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 
    } 

铪& GL:d

问候博提

+0

谢谢。唯一的问题是,我没有在我的服务器上激活肥皂。还有其他的方法吗? –

1

,如果它已经

$newProductData = array('name' => 'name', 
         'your_attribute' => $value 
         ,'your_attribute2' => $value 
         ); 

$proxy->call($sessionid, 'product.create', array('simple', $set['set_id'], sku, $newProductData)); 

存在,那么该产品将与您的自定义属性(S)来创建。

问候博提

+0

感谢您的快速响应,你能告诉我如何所有的PHP文件必须看起来像。我在magento示例中看到$ proxy = new SoapClient('http:// magentohost/api/soap /?wsdl'); $ sessionId = $ proxy-> login('apiUser','apiKey'); $ attributeSets = $ proxy-> call($ sessionId,'product_attribute_set.list'); $ set = current($ attributeSets);最好的问候 –

+0

是的,这对我来说工作得很好。它只适用于V1 soap api –

1

因为我发现与SOAP API V2更高版本做同样的事情在我寻找这个响应,我添加了我终于想出的解决方案。

对于V2 SOAP API,看起来我们需要将additional_attributes嵌套在multi_data或single_data层中?

看应用程序/代码/核心/法师/目录/型号/产品/原料药/ 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(); 
    }