3

販売ごとにアイテムごとにいくつかの値を指定する必要があります。バスケット内の各アイテムに個別にギフト メッセージを追加できると想像してみてください。

これはどのように達成できますか?

nopCommerce 1.6 を使用しています (.net 3.5 との互換性のため)。

3 つの「製品属性」を追加しました (カタログ > 製品 > 製品属性)。商品を作成し、デフォルトの商品バリエーションで、3 つの属性を商品に追加しました。

属性は TextBox 型で、好きな値を文字列として入力できると思います。

これらの値をプログラムで設定するにはどうすればよいですか。私が言えることからShoppingCartManager.AddToCart、属性の XML を含む文字列を 4 番目の引数として取るように見えます。

public static List<string> AddToCart(ShoppingCartTypeEnum shoppingCartType, int productVariantId, string selectedAttributes, decimal customerEnteredPrice, int quantity);

しかし、XML がどのように構造化されるべきかを説明するものは何も見えません。

注意:私は別の CMS と統合しているので、製品の表示に標準の nopCommerce コントロールを使用していません。

4

2 に答える 2

2

製品バリアントの製品属性の値を手動で設定するには、以下にあるヘルパーメソッドを使用できます。

  • NopSolutions.NopCommerce.BusinessLogic.Products.ProductManager
  • NopSolutions.NopCommerce.BusinessLogic.Products.Attributes.ProductAttributeManager
  • NopSolutions.NopCommerce.BusinessLogic.Products.Attributes.ProductAttributeHelper
  • NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartManager

(これは、プロジェクトが通常のnopCommerceサンプルサイトに基づいていることを前提としています。)

ただし、プロセスはかなり簡単です。nopCommerceカタログの商品属性はTextBoxタイプであると思います。これにより、任意の文字列を属性の値として設定できます。

プロセスの概要

  1. 製品バリアントを取得します。これは、製品IDと、必要な製品のバリアント(複数ある場合)がすでにわかっていることを前提としています。
  2. バリアントの属性を取得します。
  3. ProductAttributeHelperを使用して、属性XML文字列を生成します
  4. これらの属性を使用して商品をカートに保存します。

サンプルコード

private bool SaveProductToBasket()
{
    var product = GetTheProduct(); 
    int productId = product.ProductId;
    var variants = ProductManager.GetProductVariantsByProductId(productId);
    int variantId = GetDesiredVariantId();
    var variant = variants[variantId];
    var attributes = 
      ProductAttributeManager.GetProductVariantAttributesByProductVariantId(variant.ProductVariantId);

    string data = string.Empty;
    data = SetVariantAttribute(data, attributes, "Attribute1", value1.ToString());
    data = SetVariantAttribute(data, attributes, "Attribute2", value2.ToString());
    data = SetVariantAttribute(data, attributes, "Attributee", value3.ToString());

    var addToCartWarnings = 
      ShoppingCartManager.AddToCart(ShoppingCartTypeEnum.ShoppingCart, variant.ProductVariantId, data, decimal.Zero, 1);
    if (addToCartWarnings.Count == 0)
    {
        return true;
    }

    // TODO: Bind warnings.
    return false;
}

private string SetVariantAttribute(string data, ProductVariantAttributeCollection attributes, string attributeName, string value)
{
    var attribute = (from a in attributes
                        where a.ProductAttribute.Name == attributeName
                        select a).First();

    return ProductAttributeHelper.AddProductAttribute(data, attribute, value);
}
于 2010-08-25T21:18:33.087 に答える
2

この文字列に追加するだけです。製品属性の XML は次のようになります...

<Attributes>
  <ProductVariantAttribute ID="66">
    <ProductVariantAttributeValue>
      <Value>484</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="67">
    <ProductVariantAttributeValue>
      <Value>486</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
</Attributes>
于 2010-08-30T20:14:27.357 に答える