Developer forum

Forum » Development » Problems custom productlist view

Problems custom productlist view


Reply

ENGLISH:

For our client I'm processing new features and i'm running into some problems.

Befor i'm re-inventing the wheel I would like to post my problem here, maybe there's a 'simple' way to come to a solution.


It involves the product list view.

 

The default template contains a ProductLoop.

This was not sufficient for us because all the variants need to be displayed directly with variant information, such as the color for example.

We have solved this in the past by creating a custom loop using a database query and the define custom tags that were nessesary.

This means the displayed items are no longer ecom.product typed and the ecom product tags are not available within the loop. This wasn't a problem.

Now the wish is that discount prices should be shown and the way mentioned above seam to be no longer usefull.

Do you have any tips?

My first thought is that I should use the API to retrieve the products and fill
ProductLoop with typed ecom.product objects, custom values / tags need to be added to these ecom product typed objects ... Am I thinkin' in the right direction?

NEDERLANDS:

Ik ben voor onze klant nieuwe wensen aan het verwerken en loop tegen wat problemen aan.

Voordat ik zelf het wiel opnieuw uit ga vinden wil ik hier het probleem voorleggen. Wellicht is er een ‘simpele’ oplossing.

 

Het gaat in deze om onze productlist weergave.

 

De default template bevat een ProductLoop.

Deze was voor ons niet toereikend omdat alle varianten direct getoond moesten worden en variant informatie, zoals kleur getoond moest worden.

Wij hebben dit destijds opgelost door zelf een Loop te maken mbv een database query en zelf de benodigde tags te defineren.

Het zijn op dat moment geen producten meer van het type ecom.product en hebben dan ook niet de overige template tags.

Nu is de nieuwe wens dat discount prijzen moeten kunnen worden getoond. Dan gaat bovenstaande niet meer op, want ik heb geen flauw idee hoe de discountprijzen in de databasequery gekoppeld moeten worden.

 

Heb jij tips?

Mijn gevoel zegt dat ik de API moet gebruiken om de producten op te halen en de ProductLoop moet vullen met ecom.product typed producten waar ik dan custom waarden/tags aan toe moet voegen ... Zit ik op de goede weg met die gedachte?


Replies

 
Reply

Hi Peter,

Have you tried the using the VariantCombinations loop? So, rather than this:

 

<!--@LoopStart(Products)-->
  Product template tags here
<!--@LoopEnd(Products)-->

 

you can use template code like this:

 

<!--@LoopStart(Products)-->
<!--@LoopStart(VariantCombinations)-->
  Product template tags here
<!--@LoopEnd(VariantCombinations)-->
<!--@LoopEnd(Products)-->

 

This outputs the product's variants inside the Products loop.

 

Does this help?

 

Imar

 
Reply
The products have multiple variants (color, size) 
I only want to output the default product in all available colors, NOT all sizes ...
 
Reply
In that case, a NotificationSubscriber might work:

[Dynamicweb.Extensibility.Subscribe(Dynamicweb.Notifications.eCommerce.ProductList.BeforeSort)]
public class ProductList : Dynamicweb.Extensibility.NotificationSubscriber
{
public override void OnNotify(string notification, NotificationArgs args)
{
Dynamicweb.Notifications.eCommerce.ProductList.BeforeSortArgs myArgs =  args as Dynamicweb.Notifications.eCommerce.ProductList.BeforeSortArgs;
if (myArgs != null)
{
for (int i = myArgs.Products.Count - 1; i >= 0; i--)
{
Product product = myArgs.Products[i];
if (product.VariantCombinations.Count > 0) // product has variants
{
foreach (VariantCombination variant in product.VariantCombinations)
{
if (someCustomLogic(variant))
{
myArgs.Products.Add(variant.Product);
}
}
}
// Remove original product
myArgs.Products.Remove(product);
}
}
}
} This code loops over the existing products and then their variants. If the variant matches some specific logic, it's added to the list. The original product is removed (but only if the product has a least one variant). Does this help? Imar
 
Reply
Didn't use your sample, but using the notifyer in stead of extender helped me to a solution to my problem ...

 

You must be logged in to post in the forum