Basket
Documentation for the Merchello Basket object
CustomerItemCacheBase classes
Basket, WishList
The basket is accessed through an extension method off of the CurrentCustomer property of the CustomerContext.
var basket = CustomerContext.CurrentCustomer.Basket();
Properties
Name | Description |
---|---|
decimal TotalBasketPrice | Gets the sum of all basket item "amount" multiplied by quantity (price) |
bool EnableDataModifiers | Gets or sets a value indicating whether enable data modifiers. |
Guid VersionKey | Read only - Gets the item caches version key |
ICustomerBase Customer | Read only - Gets the customer associated with the item cache |
LineItemCollection Items | Read only - Gets the item cache line items |
int TotalItemCount | Read only - Gets the item cache's item count |
int TotalQuantityCount | Read only - Gets the sum of all item cache item quantities |
decimal TotalItemCachePrice | Read only - Gets the sum of all item cache item "amount" multiplied by quantity (price) |
bool IsEmpty | Read only - Gets a value indicating whether or not the item cache contains any items |
Methods
Name | Description |
---|---|
void AddItem(IProduct product) | Adds a IProduct to the item cache |
void AddItem(IProduct product, int quantity) | Adds a IProduct to the item cache |
void AddItem(IProduct product, string name, int quantity) | Adds a IProduct to the item cache |
void AddItem(IProduct product, string name, int quantity, ExtendedDataCollection extendedData) | Adds a IProduct to the item cache |
void AddItem(ProductDisplay product) | Adds a ProductDisplay to the item cache |
void AddItem(ProductDisplay product, int quantity) | Adds a ProductDisplay to the item cache |
void AddItem(ProductDisplay product, string name, int quantity) | Adds a ProductDisplay to the item cache |
void AddItem(ProductDisplay product, string name, int quantity, ExtendedDataCollection extendedData) | Adds a ProductDisplay to the item cache |
void AddItem(IProductVariant productVariant) | Adds a IProductVariant to the item cache |
void AddItem(IProductVariant productVariant, int quantity) | Adds a IProductVariant to the item cache |
void AddItem(IProductVariant productVariant, string name, int quantity) | Adds a IProduct to the item cache |
void AddItem(IProductVariant productVariant, string name, int quantity, ExtendedDataCollection extendedData) | Adds a IProductVariant to the item cache |
void AddItem(ProductVariantDisplay productVariant) | Adds a IProductVariant to the item cache |
void AddItem(ProductVariantDisplay productVariant, int quantity) | Adds a ProductVariantDisplay to the item cache |
void AddItem(ProductVariantDisplay productVariant, string name, int quantity) | Adds a ProductVariantDisplay to the item cache |
void AddItem(ProductVariantDisplay productVariant, string name, int quantity, ExtendedDataCollection extendedData) | Adds a ProductVariantDisplay to the item cache |
void AddItem(string name, string sku, decimal price) | Adds a item to the item cache |
void AddItem(string name, string sku, int quantity, decimal price) | Adds a item to the item cache |
void AddItem(string name, string sku, int quantity, decimal price, ExtendedDataCollection extendedData) | Adds a item to the item cache |
void AddItem(IItemCacheLineItem lineItem) | Adds a item to the item cache |
void UpdateQuantity(Guid key, int quantity) | Updates the quantity of an item in the item cache |
void UpdateQuantity(string sku, int quantity) | Updates the quantity of an item in the item cache |
void UpdateQuantity(IProductVariant productVariant, int quantity) | Updates the quantity of an item in the item cache |
void RemoveItem(Guid itemKey) | Removes a product variant from the item cache |
void RemoveItem(string sku) | Removes a product variant from the item cache |
void RemoveItem(IProductVariant productVariant) | Removes a product variant from the item cache |
void Empty() | Empties the item cache |
void Refresh() | Refreshes cache with database values |
bool Validate() | Validates values stored in the internal item cache to make certain items being purchase reflect most recent values in the back office. |
void Accept(ILineItemVisitor visitor) | Accepts visitor class to visit item cache items |
Examples - Adding an Item to the Basket
/// <summary>
/// Simple Model for the Add To Cart form.
/// </summary>
public partial class AddItemModel
{
/// <summary>
/// Gets or sets the Content Id of the ProductDetail page
/// </summary>
public int ContentId { get; set; }
/// <summary>
/// Gets or sets the basket page id.
/// </summary>
public int BasketPageId { get; set; }
/// <summary>
/// Gets or sets the wish list page id.
/// </summary>
public int WishListPageId { get; set; }
/// <summary>
/// Gets or sets the product.
/// </summary>
public ProductDisplay Product { get; set; }
/// <summary>
/// Gets or sets the option choices (if there are any), used to determine the variant
/// </summary>
public Guid[] OptionChoices { get; set; }
/// <summary>
/// Gets or sets a value indicating whether show wish list.
/// </summary>
public bool ShowWishList { get; set; }
/// <summary>
/// Gets or sets the currency.
/// </summary>
public ICurrency Currency { get; set; }
}
[HttpPost]
public ActionResult AddToBasket(AddItemModel model)
{
// We've added some data modifiers that can handle such things as including taxes in product
// pricing. The data modifiers can either get executed when the item is added to the basket or
// as a result from a MerchelloHelper query - you just don't want them to execute twice.
var merchello = new MerchelloHelper(false);
var product = merchello.Query.Product.GetByKey(model.Product.Key);
// In the event the product has options we want to add the "variant" to the basket.
// -- If a product that has variants is defined, the FIRST variant will be added to the cart.
// -- This was done so that we did not have to throw an error since the Master variant is no
// -- longer valid for sale.
if (model.OptionChoices != null && model.OptionChoices.Any())
{
var variant = product.GetProductVariantDisplayWithAttributes(model.OptionChoices);
this.Basket.AddItem(variant, variant.Name, 1, extendedData);
}
else
{
this.Basket.AddItem(product, product.Name, 1, extendedData);
}
this.Basket.Save();
}
Example - Updating Basket Quantities
/// <summary>
/// The basket table model.
/// </summary>
public partial class BasketTableModel : ItemCollectionTable
{
/// <summary>
/// Gets or sets the checkout page.
/// </summary>
public IPublishedContent CheckoutPage { get; set; }
/// <summary>
/// Gets or sets the currency.
/// </summary>
public ICurrency Currency { get; set; }
/// <summary>
/// Gets or sets the basket line items.
/// </summary>
public BasketLineItem[] Items { get; set; }
/// <summary>
/// Gets the total price.
/// </summary>
public decimal TotalPrice { get; internal set; }
/// <summary>
/// Gets or sets a value indicating whether show wish list buttons.
/// </summary>
public bool ShowWishList { get; set; }
}
/// <summary>
/// Responsible for updating the quantities of items in the basket
/// </summary>
/// <param name="model">The <see cref="IEnumerable{T}"/></param>
/// <returns>Redirects to the current Umbraco page (the basket page)</returns>
[HttpPost]
public ActionResult UpdateBasket(BasketTableModel model)
{
if (!this.ModelState.IsValid) return this.CurrentUmbracoPage();
// The only thing that can be updated in this basket is the quantity
foreach (var item in model.Items.Where(item => this.Basket.Items.First(x => x.Key == item.Key).Quantity != item.Quantity))
{
this.Basket.UpdateQuantity(item.Key, item.Quantity);
}
this.Basket.Save();
return this.CurrentUmbracoPage();
}
Updated less than a minute ago