добавить атрибуты продукта Magento

#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();
    }