Rank: Member
Joined: 6/26/2008(UTC) Posts: 38
|
[3]EXECUTIVE SUMMARY [/3] I need a featured product to be listed on top of a category page that lists a Grid View (in one case) and a Detail View (in another).
[3]3RD PARTY ADD ON? [/3] Is there a third party add-on that will handle this?
[3]THE KLUDGE WAY [/3] I know of one way to do this, but it's ugly:
Create a category for each featured product and then put that on a New Column and then use that New Column. That's a lot of replication, because there are a lot of categories.
[3]INTERNAL TRACKING [/3] What really should be done is for a new ASCX control to pull up the calling category's list of products and, somehow, differentiate among them and figure out which is the "super special, featured" product. Are there columns for this in the database? Looking at the tables I admit to being ignorant of even how a product is tied to a category - I know there is a table or two linking them but I didn't spot it.
As always ladies and gentlemen, my thanks in advance for your time. |
David Rodriguez Infinet Development, Inc. |
|
|
|
Rank: Member
Joined: 1/10/2008(UTC) Posts: 10
|
I was working on a similar solution and found a few things pre-built into the category template.
<asp:HyperLink runat="server" ID="featuredImage" BorderColor="black" BorderWidth="1px" /> <asp:Label ID="lblFeaturedName" runat="server"></asp:Label> <asp:Label ID="lblFeaturedSku" runat="server"></asp:Label> <asp:Literal ID="FeaturedDescriptionLiteral" runat="server"></asp:Literal>
then in the VB file, i found this code which i modified slightly:
Public Sub LoadFeatured(ByVal p As Catalog.Product) ' Name Fields Me.lblFeaturedName.Text = p.ProductName Me.lblFeaturedSku.Text = p.Sku ' Check if size of text is within 200 chars limit If p.LongDescription.Length > 200 Then Me.FeaturedDescriptionLiteral.Text = Left(p.LongDescription, 189 ) & " (more...)" Else Me.FeaturedDescriptionLiteral.Text = p.LongDescription End If
' Image Me.featuredImage.ImageUrl = Page.ResolveUrl(Utilities.ImageHelper.GetValidImage(p.ImageFileSmall, True)) Me.featuredImage.NavigateUrl = Utilities.UrlRewriter.BuildUrlForProduct(p, Me.Page.Request)
End Sub
This would be similar to what you consider the "detail view". it shows the product image, title, SKU and a 200 character description. i tested it over the weekend and it works except for the featured product never changes. i have no idea how it is deciding what product to put up there. does anyone know how/where the featured product is chosen?
|
|
|
|
Rank: Member
Joined: 4/25/2003(UTC) Posts: 71
|
The featured product is loaded in the Sub 'PopulateCategoryInfo'. It loads the first product based on the category sort order.
|
|
|
|
Rank: Member
Joined: 1/10/2008(UTC) Posts: 10
|
got it, so then to randomize what product appears i could just change the # listed with LoadFeatured(children(#)). depending on the # of products you have:
Dim children As Collection(Of Catalog.Product) = LocalCategory.FindAllProducts(WebAppSettings.DisableInventory, False) Dim i As Integer Randomize i = Int(Rnd() * 10) + 1 If children.Count > 0 Then LoadFeatured(children(i)) End If
|
|
|
|
Rank: Member
Joined: 4/25/2003(UTC) Posts: 71
|
Sounds good... if you don't want to code your own random number, there are a couple of 'randomizers' supplied by BV in Core.Utilities.RandomNumbers.
Haven't tested this, but it should work...
Dim children As Collection(Of Catalog.Product) = LocalCategory.FindAllProducts(WebAppSettings.DisableInventory, False) Dim i as integer = 0
If children.count > 0 then
i = [2]Utilities.RandomNumbers.RandomInteger(children.Count, 0)[/2]
LoadFeatured(children(i))
End if
|
|
|
|
Rank: Member
Joined: 1/10/2008(UTC) Posts: 10
|
thanks eric, that randomizer works much better than what i was using. the only issue i had was that it occasionally kicked back an "index out of range" error, presumably because the random number (i) was greater than the number of products in the category. this adjustment seemed to work for me:
Dim children As Collection(Of Catalog.Product) = LocalCategory.FindAllProducts(WebAppSettings.DisableInventory, False) Dim i As Integer i = Utilities.RandomNumbers.RandomInteger(children.Count, 0) If children.count > 0 and children.count > i LoadFeatured(children(i)) Else LoadFeatured(children(0)) End If
I hope this helps someone else down the line. Thanks again Eric.
|
|
|
|
Rank: Member
Joined: 4/25/2003(UTC) Posts: 71
|
I'm glad I could help!
Whoops...The child collection is 0 based... so you need to subtract 1 from the randominteger. See the modified code below:
Dim children As Collection(Of Catalog.Product) = LocalCategory.FindAllProducts(WebAppSettings.DisableInventory, False) Dim i as integer = 0 If children.count > 0 then i = Utilities.RandomNumbers.RandomInteger(children.Count, 0) LoadFeatured(children(i-1)) <--- changed this line End if
|
|
|
|
Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.