add-to-cart for product
Hi,
I have a custom product list! I need to have "Add to cart" button for each product, but I dont know how
thanks
Hello Majid,
ECommerce is a new module and it is still not very customizable. You can add the button to the List template of all products, but it wouldn't work because right now the productID cannot be resolved unless you have navigated to the details page of a selected product. This said, for now you will have to click on a product (to open the detail page) and then add the product to your cart.
All the best,Hi Svetoslav Petsov,
I have exactly the problem you refered! I have a button in product List view and after clicking on, It says productId is null, but in Detail view it's ok!
I hope we have it in new SP!
Thanks for your reply
Majid
Hello Majid,
This feature is logged into our system and is now on our roadmap. However, we currently have a lot of features that are set up for our next release (4.3), so this will be released as an option a little further in time (possibly in our 4.4 release).
Regards,Is it possible when you override the default ProductsFrontendMaster view with a custom one? Can we then use the ProductID?
Regards,
Daniel
Hello Daniel,
Editing the templates wouldn't solve the ID problem. The only way would be to implement a custom control but it would have to re-implement the whole list functionality there (to change the way the productID is resolved).
Greetings,Well, that is what I mean, actually.
Better re-implement it then offer a very limited list.
Anyway, it would be of great help to have some sort of workflow description on how to order a product from beginning to end, through the API.
There is no way that the default ProductList view and the ProductDetail view are going to fit for each design, and since our designs have great value to the customer, I have to re-write these controls anyway.
Could you provide me of some workflow, or at least the methods I should use?
Regards,
Daniel
Hello Daniel,
I'm sending you some examples on how to use the ECommerce's API to create Customers, add them Orders, create Products and so on. Please review the examples and get back to me if you have any questions.
All the best,Hi Svetoslav,
Thanks for the update. Really helpful, since I was planning on writing an import procedure :)
One thing I'm still like to know is how to add the 'add-to-cart' functionality through code.
I have a custom control which shows a list of products. So I'll have to add a button to which should have an action that let's users place the product inside the basket.
The default functionality is updating the cart automatically, but I'm wondering if this can also be achieved through the API?
Regards,
Daniel
Hello Daniel,
You can try using the Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI.AddToCartWidget in your template and in your code get the control and set its ProductId property to the selected product in your list (this way overriding its default functionality by getting the productId from the URL)
Kind regards,Hi Svetoslav,
Thanks. That worked. The only problem here is that I don't like the default view of this control.
So e.g. I don't want the textbox for the amount of items, I just want the button.
Probably this is not possible.
So how can I simulate this from code? What steps do I have to take to add a product to my shopping cart?
Thanks,
Daniel
Hi Daniel,
You can always change the template of your control. What you need to do is - you need to inherit the AddToCartWidget class, change the LayoutTemplatePath property (in order to change the template). At initialize control, the Text property of the QuantityControl (that is the TextBox on the template) is always set to "1" so if you just hide that field, then its value would always be "1". Here's the default template that you can change (for example add a css property to the TextBox that hides it):
<%@ Control Language="C#" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
<
asp:UpdatePanel
ID
=
"UpdatePanel"
runat
=
"server"
>
<
ContentTemplate
>
<
sf:Message
runat
=
"server"
ID
=
"addedToCartMessage"
CssClass
=
"sfMessage sfTopMsg"
RemoveAfter
=
"10000"
/>
</
ContentTemplate
>
</
asp:UpdatePanel
>
<
asp:Label
ID
=
"quantityLabel"
runat
=
"server"
Text='<%$Resources:OrdersResources, QuantityColon %>' AssociatedControlID="quantity" CssClass="sfTxtLbl" />
<
asp:RequiredFieldValidator
ID
=
"quantityRequiredFieldValidator"
runat
=
"server"
ControlToValidate
=
"quantity"
ValidationGroup
=
"addToCart"
Display
=
"Dynamic"
CssClass
=
"sfErrorWrp"
>
<
span
class
=
"sfError"
><
asp:Literal
runat
=
"server"
ID
=
"lProductQuantityIsRequired"
Text="<%$Resources:OrdersResources, ProductQuantityIsRequired %>" /></
span
>
</
asp:RequiredFieldValidator
>
<
asp:RangeValidator
ID
=
"quantityValidator"
runat
=
"server"
MinimumValue
=
"1"
MaximumValue
=
"9999"
ControlToValidate
=
"quantity"
ValidationGroup
=
"addToCart"
Type
=
"Integer"
Display
=
"Dynamic"
CssClass
=
"sfErrorWrp"
>
<
span
class
=
"sfError"
><
asp:Literal
runat
=
"server"
ID
=
"lProductQuantityIsInvalid"
Text="<%$Resources: OrdersResources, ProductQuantityIsInvalid %>" /></
span
>
</
asp:RangeValidator
>
<
asp:TextBox
ID
=
"quantity"
runat
=
"server"
CssClass
=
"sfTxt sfQuantity"
/>
<
asp:Button
ID
=
"addToCartButton"
runat
=
"server"
Text='<%$Resources:OrdersResources, AddToCart %>' ValidationGroup="addToCart" CssClass="sfAddToCartBtn" />
Hi,
Is this resolved in 4.4 version. We would like to add "buy now" button in the products list page itself.
Best Regards,
Cormac
Hello Cormac,
The feature is not built out of the box in Sitefinity 4.4. However you can achieve the functionality by using our API currently.
If you wish to see the feature in action please go to http://screencast.com/t/0M9UtFwc
For detailed steps to setup your project with the code attached to the response read below
Here is the list of steps that you need to do
Things to note in CustomProductMasterView.ascx file –
<%@ Register Namespace="Telerik.Sitefinity.Modules.Ecommerce.Catalog.Web.UI.Views" Assembly="Telerik.Sitefinity" TagPrefix="sf" %>
<
sf:BuyNowView
ID
=
"usrBuyNowView"
runat
=
"server"
ProductId= '<%# Eval("Id") %>' ProductsListPageId ="B23147EE-D087-4147-8C13-147902562DA4" CheckoutPageId="6C588951-BBFA-4C70-A983-46A41DA3B022" LayoutTemplatePath="~/CustomBuyNowView.ascx" />
I've used the code on this page to create an AddToCart button, and it worked just fine up to 5.4. From 6.0 it is not working anymore, and debugging this is a nightmare.
Has someone a working sample on how to get a add-to-cart-button in product lists? And I am NOT talking about a BUY NOW button - that is NOT the same :-)
Hi Ole,
Please see this video concerning the deployment and functionality of the sample. The code of the template is as follows:
<%@ Control Language="C#" %>
<%@ Import Namespace="Telerik.Sitefinity.Model" %>
<%@ Import Namespace="System.ComponentModel" %>
<%@ Import Namespace="Telerik.Sitefinity.Ecommerce.Catalog.Model" %>
<%@ Register Assembly="Telerik.Sitefinity.Ecommerce" Namespace="Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI"
TagPrefix="sfOrders" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields"
TagPrefix="sfFields" %>
<%@ Register TagPrefix="sfCatalog" Namespace="Telerik.Sitefinity.Modules.Ecommerce.Catalog.Web.UI.Fields" Assembly="Telerik.Sitefinity.Ecommerce"%>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Comments" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.PublicControls.BrowseAndEdit" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Modules.Ecommerce.Catalog.Web.UI" Assembly="Telerik.Sitefinity.Ecommerce" %>
<
div
id
=
"Div1"
runat
=
"server"
visible
=
"false"
class
=
"sfErrorSummary sfTopMsg"
>
<
asp:Label
ID
=
"Label1"
runat
=
"server"
/>
</
div
>
<
asp:Placeholder
id
=
"widgetBody"
runat
=
"server"
>
<
div
class
=
"sfClearfix"
>
<
div
class
=
"sfProductsSortByWrp"
id
=
"productSortControlWrp"
runat
=
"server"
>
<
sf:SortProductsControl
ID
=
"sortProductsControl"
runat
=
"server"
/>
</
div
>
<
sf:TotalProductsControl
runat
=
"server"
ID
=
"totalProductsControlTop"
CssClass
=
"sfCatalogTotalCount"
/>
<
sf:Pager
id
=
"topPager"
runat
=
"server"
DisplayCount
=
"3"
ShowPrevAndNext
=
"true"
CssClass
=
"sfCatalogPager"
/>
<
sf:ItemsPerPageSelector
ID
=
"itemsPerPageSelectorTop"
runat
=
"server"
GroupingKey
=
"Products"
CssClass
=
"sfitemsPerPageWrp"
/>
<
telerik:RadListView
ID
=
"productsListView"
runat
=
"server"
ItemPlaceholderID
=
"ProductContainer"
EnableEmbeddedSkins
=
"false"
EnableEmbeddedBaseStylesheet
=
"false"
>
<
LayoutTemplate
>
<
ul
class
=
"sfproductsList"
>
<
asp:PlaceHolder
ID
=
"ProductContainer"
runat
=
"server"
/>
</
ul
>
</
LayoutTemplate
>
<
ItemTemplate
>
<
li
class
=
"sfproductListItem"
>
<
div
class
=
"sfproductTmbWrp"
>
<
sf:DetailsViewHyperLink
ID
=
"thumbnailLink"
runat
=
"server"
ImageUrl='<%# Eval("ThumbnailUrl") %>' Text='<%# Eval("ThumbnailAlternativeText") %>' ToolTip='<%# Eval("Title") %>' />
</
div
>
<
h2
class
=
"sfproductTitle"
>
<
sf:DetailsViewHyperLink
ID
=
"DetailsViewHyperLink1"
Text='<%# (Eval("Title").ToString()).TruncateString(56, SitefinityExtensions.TruncateOptions.IncludeEllipsis) %>' runat="server" CssClass="sfproductTitleLnk" />
</
h2
>
<
div
class
=
"sfproductPrice"
>
<
sfCatalog:DisplayPriceField
id
=
"displayPriceField"
ObjectType
=
"Product"
ObjectId='<%# Eval("Id") %>' runat="server" />
</
div
>
<
sf:ProductDynamicFields
id
=
"productDynamicFieldsControl"
ProductItem='<%# Page.GetDataItem() %>' runat="server" />
<
div
class
=
"sfproductOptions"
>
<
sf:ProductOptionsControl
id
=
"productOptionsControl"
ProductItem='<%# Page.GetDataItem() %>' runat="server" />
</
div
>
<
div
class
=
"sfAddToCartWidget"
>
<
sfOrders:AddToCartWidget
ID
=
"addToCartWidget"
ProductId='<%# Eval("Id") %>' runat="server" />
</
div
>
<%--NOTE: Uncomment the next line to display custom product fields--%>
<%--<
sf:ProductDynamicFields
id
=
"productDynamicFields"
runat
=
"server"
></
sf:ProductDynamicFields
>--%>
</
li
>
</
ItemTemplate
>
</
telerik:RadListView
>
<
sf:TotalProductsControl
runat
=
"server"
ID
=
"totalProductsControlBottom"
CssClass
=
"sfCatalogTotalCount"
/>
<
sf:Pager
id
=
"pager"
runat
=
"server"
DisplayCount
=
"3"
ShowPrevAndNext
=
"true"
CssClass
=
"sfCatalogPager"
/>
<
sf:ItemsPerPageSelector
ID
=
"itemsPerPageSelectorBottom"
runat
=
"server"
GroupingKey
=
"Products"
CssClass
=
"sfitemsPerPageWrp"
/>
</
div
>
</
asp:Placeholder
>
Is there a way to remove the add to cart functionality for a product?
Hello,
It is not recommended to remove the add to cart widget from the page. What I could suggest you is to hide it but not remove it. For example, change the code of the widget to looks like:
<
div
class
=
"sfAddToCartWidget"
style
=
"display:none"
>
<
sfOrders:AddToCartWidget
ID
=
"addToCartWidget"
ProductId='<%# Eval("Id") %>' runat="server" />
</
div
>