【问题标题】:How to create products programmatically in Drupal 8 commerce如何在 Drupal 8 Commerce 中以编程方式创建产品
【发布时间】:2016-10-05 13:00:07
【问题描述】:

我正在使用当前的 commerce 2.x.dev 进行在线商店开发。对我来说,这是 Commerce 2 的第一个项目。

当我开始做产品导入工作时,我发现 Feeds 模块并不稳定,我决定为数据导入编写自定义解决方案(从 CSV/XML 源导入 Batch/Queue API 数据)。

因此,目前我找不到任何有关通过代码创建正确产品实体的信息。我探索了 Drupal Commerce 文档部分:http://docs.drupalcommerce.org/v2/product/products.html,但它仅包含用于手动产品管理的 UI 说明。

我认为从代码处理产品/订单实体的简短说明对开发人员非常有帮助,尤其是对于开始使用 commerce 2 并具有 7.x commerce 经验的开发人员。

【问题讨论】:

    标签: drupal commerce


    【解决方案1】:

    要以编程方式创建具有 3 个产品变体的产品,请在自定义模块中使用以下代码:

    use Drupal\commerce_product\Entity\ProductVariation;
    use Drupal\commerce_product\Entity\Product;
    use Drupal\commerce_price\Price;
    
    function my_module_install() { 
    
    // Create variations
    
    $variation1 = ProductVariation::create([
      'type' => 'default',
      'sku' => 'var1',
      'price' => new Price('24.00', 'EUR'),  
    ]);
    $variation1->save();
    
    $variation2 = ProductVariation::create([
      'type' => 'default',
      'sku' => 'var2',
      'price' => new Price('50.00', 'EUR'),  
    ]);
    $variation2->save();
    
    $variation3 = ProductVariation::create([
      'type' => 'default',
      'sku' => 'var3',
      'price' => new Price('115.00', 'EUR'), 
    ]);
    $variation3->save();    
    
    // Create product using variations previously saved
    
    $product = Product::create([
      'type' => 'default',
      'title' => t('Your Product Name'),
      'variations' => [$variation1, $variation2, $variation3],
    ]);
    $product->save();
    
    }
    

    我希望它能回答你的问题。欢迎了解更多详情。

    最好的问候

    【讨论】:

    【解决方案2】:

    您需要阅读本文档 (Creating products) 并按照相同的方式进行操作。

    已编辑

    $variation_blue_large = \Drupal\commerce_product\Entity\ProductVariation::create([ 
      'type' => 'my_custom_variation_type',
      'sku' => '001',
      'price' => new \Drupal\commerce_price\Price('10.00', 'USD'),
      'attribute_color' => $blue,
      'attribute_size' => $large,
    ])->save();
    
    $variations = [
      $variation_blue_large,
    ];
    
    $product = \Drupal\commerce_product\Entity\Product::create([
      'uid' => 1,
      'type' => 'my_custom_product_type',
      'title' => 'My Custom Product',
      'stores' => [$store],
      'variations' => $variations,
    ]);
    $product->save();
    

    【讨论】:

    • $variation_blue_large = \Drupal\commerce_product\Entity\ProductVariation::create([ 'type' => 'my_custom_variation_type', 'sku' => 'product-blue-large', 'price' = > new \Drupal\commerce_price\Price('10.00', 'USD'), 'attribute_color' => $blue, 'attribute_size' => $large, ]); $variation_blue_large->save();
    【解决方案3】:

    **加载具有多伙伴变化的产品**

    use Drupal\commerce_product\Entity\ProductVariation;
    use Drupal\commerce_product\Entity\Product;
    use Drupal\commerce_price\Price;
    
    // Load existing  variations
    
     $result = \Drupal::entityQuery('commerce_product_variation')
              ->condition('type', 'variation_type')
                 ->execute();
      $entity_manager = \Drupal::entityManager();
          $product_variation = $entity_manager->getStorage('commerce_product_variation')->loadMultiple($result);
    
    
    //Add variation to Product
    $product = Product::create([
      'type' => 'hakuro_plate',
      'title' => t('Your Product Name custom New testing'),
      'variations' =>$product_variation,
    ]);
    $product->save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2014-08-02
      相关资源
      最近更新 更多