Wyświetlanie produktów za pomocą treści dynamicznych w edytorze kodu
Edytor kodu pozwala wyswietlać aktualne dane produktów w bannerach, pop-upach i e-mailach ci za pomocą składni Razor. W zależności od tego, co chcesz pokazać – rekomendacje, zawartość koszyka, ostatnio przeglądane produkty, obniżki cen lub szczegóły zamówienia – każda metoda zwraca odpowiednią listę produktów i walutę sklepu.
Podgląd na żywo w edytorze
Dane produktów nie pojawiają się w podglądzie edytora w czasie rzeczywistym. Aby zobaczyć ane, skorzystaj z opcji Podgląd na żywo lub przetestuj treść bezpośrednio na swojej stronie.
Przegląd metod
| Metoda | Opis | Zwraca |
| GetRecommendations | Produkty rekomendowane aktualnemu klientowi na podstawie jego zachowania. | Produkty + waluta |
| GetCart | Produkty dodane przez klienta do koszyka. | Produkty + waluta |
| GetAbandonedBrowseProducts | Produkty przeglądane, ale nie kupione przez klienta. | Produkty + waluta |
| GetPriceDropProducts | Produkty, których cena spadła od ostatniej wizyty klienta. | Produkty + waluta |
| GetOrders | Produkty i szczegóły konkretnego zamówienia klienta. | Produkty + szczegóły zamówienia + waluta |
Get recommendations
Zwraca listę produktów rekomendowanych aktualnemu klientowi wraz z walutą sklepu.
Sygnatura metody
var recommendations = Model.GetRecommendations(int count = 4);Parametry
| Parametr | Typ | Domyślnie | Opis |
| count | int | 4 | Liczba produktów do pobrania. |
Zwracana wartość
{
"Products": [
{
"Id": "SKU-123",
"Name": "Nike Air Zoom",
"Url": "https://sklep.pl/p/nike-air-zoom",
"ImageUrl": "https://sklep.pl/media/nike-air-zoom.jpg",
"Category": "Buty",
"PriceString": "349.99",
"CurrentPriceString": "299.99",
"OmnibusPriceString": "329.99",
"AdditionalInfo": "",
"CustomProductAttributes": [
{
"Id": 101,
"Name": "Marka",
"Value": "Nike",
"ValueString": "Nike"
}
]
}
],
"Currency": {
"ISO": "PLN",
"Sign": "zł"
}
}| Pole | Typ | Opis |
| Id | string | Unikalny identyfikator produktu. |
| Name | string | Nazwa produktu. |
| Url | string | Adres URL strony produktu. |
| ImageUrl | string | Adres URL zdjęcia produktu. |
| Category | string | Kategoria produktu. |
| PriceString | string | Cena regularna w formacie tekstowym. |
| CurrentPriceString | string | Cena promocyjna w formacie tekstowym. Puste pole oznacza brak aktywnej promocji. |
| OmnibusPriceString | string | Najniższa cena z ostatnich 30 dni (zgodnie z dyrektywą Omnibus). |
| AdditionalInfo | string | Opcjonalne informacje dodatkowe. |
| CustomProductAttributes | list | Cechy niestandardowe zdefiniowane dla produktu (np. marka, kolor). |
Przykłady użycia
Wyświetlanie pierwszego rekomendowanego produktu
@{
var recommendations = Model.GetRecommendations(4);
var product = recommendations.Products?.FirstOrDefault();
}
@if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@recommendations.Currency.Sign
</div>
}Pętla po wszystkich rekomendowanych produktach
@{
var recommendations = Model.GetRecommendations(4);
}
@foreach (var product in recommendations.Products)
{
if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@recommendations.Currency.Sign
</div>
}
}Odczyt niestandardowej cechy produktu
@{
var brand = product?.CustomProductAttributes
?.FirstOrDefault(x => x.Name == "Marka")?.ValueString;
}Uwagi
- Używaj operatorów warunkowych null (?.) podczas dostępu do właściwości produktu.
- GetRecommendations domyślnie pobiera 4 produkty. Dostosuj parametr count do układu swojego banera.
- Użyj CurrentPriceString, aby wyświetlić cenę promocyjną. Jeśli pole jest puste, wyświetl PriceString.
- OmnibusPriceString zawiera najniższą cenę z ostatnich 30 dni. Wyświetlaj ją obok ceny promocyjnej, aby spełnić wymogi dyrektywy Omnibus.
Get cart
Zwraca produkty aktualnie znajdujące się w koszyku klienta wraz z walutą sklepu.
Sygnatura metody
var cart = Model.GetCart(int count = 100);Parametry
| Parametr | Typ | Domyślnie | Opis |
| count | int | 100 | Maksymalna liczba produktów z koszyka do pobrania. |
Zwracana wartość
{
"Products": [
{
"Id": "SKU-123",
"Name": "Nike Air Zoom",
"Url": "https://sklep.pl/p/nike-air-zoom",
"ImageUrl": "https://sklep.pl/media/nike-air-zoom.jpg",
"Category": "Buty",
"PriceString": "349.99",
"CurrentPriceString": "299.99",
"OmnibusPriceString": "329.99",
"AdditionalInfo": "",
"Quantity": 2,
"CustomProductAttributes": [
{
"Id": 101,
"Name": "Marka",
"Value": "Nike",
"ValueString": "Nike"
}
]
}
],
"Currency": {
"ISO": "PLN",
"Sign": "zł"
}
}| Pole | Typ | Opis |
| Id | string | Unikalny identyfikator produktu. |
| Name | string | Nazwa produktu. |
| Url | string | Adres URL strony produktu. |
| ImageUrl | string | Adres URL zdjęcia produktu. |
| Category | string | Kategoria produktu. |
| PriceString | string | Cena regularna w formacie tekstowym. |
| CurrentPriceString | string | Cena promocyjna w formacie tekstowym. Puste pole oznacza brak aktywnej promocji. |
| OmnibusPriceString | string | Najniższa cena z ostatnich 30 dni (zgodnie z dyrektywą Omnibus). |
| Quantity | int | Liczba sztuk produktu w koszyku. |
| AdditionalInfo | string | Opcjonalne informacje dodatkowe. |
| CustomProductAttributes | list | Cechy niestandardowe zdefiniowane dla produktu (np. marka, kolor). |
Przykłady użycia#
Wyświetlanie pierwszego produktu z koszyka
@{
var cart = Model.GetCart(4);
var product = cart.Products?.FirstOrDefault();
}
@if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Ilość: @product.Quantity</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@cart.Currency.Sign
</div>
}Pętla po wszystkich produktach w koszyku
@{
var cart = Model.GetCart(4);
}
@foreach (var product in cart.Products)
{
if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Ilość: @product.Quantity</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@cart.Currency.Sign
</div>
}
}Uwagi#
- Jeśli koszyk klienta nie zostanie znaleziony, metoda może zwrócić błąd zamiast pustej listy. Zadbaj o obsługę tego przypadku w szablonie.
- Pole Quantity jest unikalne dla tej metody i niedostępne w pozostałych metodach produktowych.
Get abandoned browse products
Zwraca produkty, które klient przeglądał, ale których nie kupił.
Sygnatura metody
var abandonedBrowse = Model.GetAbandonedBrowseProducts(int count = 100);Parametry
| Parametr | Typ | Domyślnie | Opis |
| count | int | 100 | Maksymalna liczba produktów do pobrania. |
Zwracana wartość
{
"Products": [
{
"Id": "SKU-123",
"Name": "Nike Air Zoom",
"Url": "https://sklep.pl/p/nike-air-zoom",
"ImageUrl": "https://sklep.pl/media/nike-air-zoom.jpg",
"Category": "Buty",
"PriceString": "349.99",
"CurrentPriceString": "299.99",
"OmnibusPriceString": "329.99",
"AdditionalInfo": "",
"CustomProductAttributes": [
{
"Id": 101,
"Name": "Marka",
"Value": "Nike",
"ValueString": "Nike"
}
]
}
],
"Currency": {
"ISO": "PLN",
"Sign": "zł"
}
}| Pole | Typ | Opis |
| Id | string | Unikalny identyfikator produktu. |
| Name | string | Nazwa produktu. |
| Url | string | Adres URL strony produktu. |
| ImageUrl | string | Adres URL zdjęcia produktu. |
| Category | string | Kategoria produktu. |
| PriceString | string | Cena regularna w formacie tekstowym. |
| CurrentPriceString | string | Cena promocyjna w formacie tekstowym. Puste pole oznacza brak aktywnej promocji. |
| OmnibusPriceString | string | Najniższa cena z ostatnich 30 dni (zgodnie z dyrektywą Omnibus). |
| AdditionalInfo | string | Opcjonalne informacje dodatkowe. |
| CustomProductAttributes | list | Cechy niestandardowe zdefiniowane dla produktu (np. marka, kolor). |
Przykłady użycia
Wyświetlanie pierwszego przeglądanego produktu
@{
var abandonedBrowse = Model.GetAbandonedBrowseProducts(4);
var product = abandonedBrowse.Products?.FirstOrDefault();
}
@if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@abandonedBrowse.Currency.Sign
</div>
}Pętla po wszystkich przeglądanych produktach
@{
var abandonedBrowse = Model.GetAbandonedBrowseProducts(4);
}
@foreach (var product in abandonedBrowse.Products)
{
if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>
@(string.IsNullOrWhiteSpace(product.CurrentPriceString)
? product.PriceString
: product.CurrentPriceString)
@abandonedBrowse.Currency.Sign
</div>
}
}Odczyt niestandardowej cechy produktu
@{
var color = product?.CustomProductAttributes
?.FirstOrDefault(x => x.Name == "Kolor")?.ValueString;
}Uwagi
- Jeśli liczba znalezionych produktów jest mniejsza niż count, lista Products może zawierać wpisy null. Zawsze sprawdzaj null przed odwołaniem się do właściwości produktu.
Get price drop products
Zwraca produkty, których cena spadła od ostatniej wizyty klienta.
Sygnatura metody
var priceDropProducts = Model.GetPriceDropProducts(int count = 100);Parametry
| Parametr | Typ | Domyślnie | Opis |
| count | int | 100 | Maksymalna liczba produktów do pobrania. |
Zwracana wartość
{
"Products": [
{
"Id": "SKU-123",
"Name": "Nike Air Zoom",
"Url": "https://sklep.pl/p/nike-air-zoom",
"ImageUrl": "https://sklep.pl/media/nike-air-zoom.jpg",
"Category": "Buty",
"PriceString": "299.99",
"CurrentPriceString": "",
"OmnibusPriceString": "",
"PriceLastSeenByCustomer": 349.99,
"PriceLastSeenByCustomerString": "349.99",
"AdditionalInfo": "",
"CustomProductAttributes": [
{
"Id": 101,
"Name": "Marka",
"Value": "Nike",
"ValueString": "Nike"
}
]
}
],
"Currency": {
"ISO": "PLN",
"Sign": "zł"
}
}| Pole | Typ | Opis |
| Id | string | Unikalny identyfikator produktu. |
| Name | string | Nazwa produktu. |
| Url | string | Adres URL strony produktu. |
| ImageUrl | string | Adres URL zdjęcia produktu. |
| Category | string | Kategoria produktu. |
| PriceString | string | Aktualna cena produktu w formacie tekstowym. |
| CurrentPriceString | string | Cena promocyjna w formacie tekstowym. Puste pole oznacza brak aktywnej promocji. |
| OmnibusPriceString | string | Najniższa cena z ostatnich 30 dni (zgodnie z dyrektywą Omnibus). |
| PriceLastSeenByCustomer | decimal | Cena, którą klient widział podczas ostatniej wizyty. |
| PriceLastSeenByCustomerString | string | PriceLastSeenByCustomer w formacie tekstowym. |
| AdditionalInfo | string | Opcjonalne informacje dodatkowe. |
| CustomProductAttributes | list | Cechy niestandardowe zdefiniowane dla produktu (np. marka, kolor). |
Przykłady użycia
Wyświetlanie pierwszego produktu z obniżoną ceną
@{
var priceDropProducts = Model.GetPriceDropProducts(4);
var product = priceDropProducts.Products?.FirstOrDefault();
}
@if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Teraz: @product.PriceString @priceDropProducts.Currency.Sign</div>
<div>Poprzednio: @product.PriceLastSeenByCustomerString @priceDropProducts.Currency.Sign</div>
}Pętla po wszystkich produktach z obniżoną ceną
@{
var priceDropProducts = Model.GetPriceDropProducts(4);
}
@foreach (var product in priceDropProducts.Products)
{
if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Teraz: @product.PriceString @priceDropProducts.Currency.Sign</div>
<div>Poprzednio: @product.PriceLastSeenByCustomerString @priceDropProducts.Currency.Sign</div>
}
}Uwagi
- Jeśli liczba znalezionych produktów jest mniejsza niż count, lista Products może zawierać wpisy null. Zawsze sprawdzaj null przed odwołaniem się do właściwości produktu.
- PriceLastSeenByCustomerString przechowuje cenę, którą klient widział podczas poprzedniej wizyty. Wyświetlaj ją obok PriceString, aby wyraźnie pokazać obniżkę.
Get orders
Zwraca produkty i szczegóły konkretnego zamówienia złożonego przez klienta wraz z walutą oryginalną i przeliczoną. Metoda jest dostępna w newsletterach e-mail, treściach e-mail w scenariuszach, pop-upach i banerach.
Sygnatura metody
var orders = Model.GetOrders(string orderID, int websiteId, string[] status);Parametry
Jeśli nie podasz żadnych parametrów, metoda zwróci wszystkie zamówienia bieżącego klienta.
| Parametr | Typ | Wymagany | Opis |
| orderId | string | nie | ID zamówienia do pobrania. Jeśli pominięty, zwracane są wszystkie zamówienia klienta. |
| websiteId | int | nie | ID witryny, z którą powiązane jest zamówienie. Jeśli pominięty, a kilka zamówień ma to samo ID, zwracane jest najnowsze (według daty zamówienia). |
| status | list | nie | Lista statusów zamówień do filtrowania: paid, placed, completed, canceled. |
| sort | — | nie | — |
| dateRange | string(date) | nie | — |
Zwracana wartość
[
{
"Products": [
{
"Id": "produkt123",
"Name": "Nazwa produktu",
"Url": "https://sklep.pl/produkt/produkt123",
"ImageUrl": "https://sklep.pl/zdjecia/produkt123.jpg",
"Category": "Elektronika",
"Price": 79.99,
"PriceString": "79.99",
"ConvertedPrice": 72.53,
"Quantity": 2,
"Returned": false,
"OrderProductId": 123,
"CustomProductAttributes": [
{ "Id": 1, "Name": "nazwa1", "Value": "niebieski", "ValueString": "niebieski" },
{ "Id": 2, "Name": "nazwa2", "Value": 15.99, "ValueString": "15.99" }
]
}
],
"OrderDate": "2025-04-14T23:06:00",
"Status": "Paid",
"TotalValue": 159.98,
"ConvertedTotalValue": 134.67,
"OriginalCurrency": { "ISO": "PLN", "Sign": "zł" },
"ConvertedCurrency": { "ISO": "EUR", "Sign": "€" },
"CustomOrderAttributes": [
{ "Id": 1, "Name": "nazwa atrybutu zamówienia", "Value": 123, "ValueString": "123" }
]
}
]| Pole | Typ | Opis |
| Id | string | Unikalny identyfikator produktu. |
| Name | string | Nazwa produktu. |
| Url | string | Adres URL strony produktu. |
| ImageUrl | string | Adres URL zdjęcia produktu. |
| Category | string | Kategoria produktu. |
| Price | decimal | Cena regularna jako wartość dziesiętna. |
| PriceString | string | Cena regularna w formacie tekstowym. |
| ConvertedPrice | decimal | Cena przeliczona na walutę raportowania sklepu. |
| Quantity | int | Liczba sztuk produktu w zamówieniu. |
| Returned | bool | Informuje, czy produkt został zwrócony. |
| OrderProductId | int | Unikalny identyfikator pozycji produktu w zamówieniu. |
| CustomProductAttributes | list | Cechy niestandardowe zdefiniowane dla produktu (np. marka, kolor). |
| OrderDate | datetime | Data i godzina złożenia zamówienia. |
| Status | string | Aktualny status zamówienia (np. „Paid”, „Completed”). |
| TotalValue | decimal | Łączna wartość zamówienia w walucie oryginalnej. |
| ConvertedTotalValue | decimal | Łączna wartość zamówienia przeliczona na walutę raportowania. |
| OriginalCurrency | object | Waluta użyta przy składaniu zamówienia (ISO i symbol). |
| ConvertedCurrency | object | Waluta używana dla wartości przeliczonych (ISO i symbol). |
| CustomOrderAttributes | list | Cechy niestandardowe zdefiniowane dla zamówienia. |
Przykłady użycia
Wyświetlanie produktów z konkretnego zamówienia
@{
var orders = Model.GetOrders("12343XYZ", websiteId: 2, status: new[] { "Paid", "Completed" });
var firstOrder = orders?.FirstOrDefault();
var product = firstOrder?.Products?.FirstOrDefault();
}
@if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Ilość: @product.Quantity</div>
<div>@product.PriceString @firstOrder.OriginalCurrency.Sign</div>
}Pętla po wszystkich produktach w zamówieniu
@{
var orders = Model.GetOrders("12343XYZ", websiteId: 2, status: new[] { "Paid", "Completed" });
var firstOrder = orders?.FirstOrDefault();
}
@if (firstOrder != null)
{
foreach (var product in firstOrder.Products)
{
if (product != null)
{
<a href="@product.Url">
<img src="@product.ImageUrl" alt="@product.Name" />
</a>
<div>@product.Name</div>
<div>Ilość: @product.Quantity</div>
<div>@product.PriceString @firstOrder.OriginalCurrency.Sign</div>
}
}
}Odczyt niestandardowej cechy zamówienia
@{
var customAttr = firstOrder?.CustomOrderAttributes
?.FirstOrDefault(x => x.Name == "nazwa atrybutu zamówienia")?.ValueString;
}Odczyt niestandardowej cechy produktu
@{
var brand = product?.CustomProductAttributes
?.FirstOrDefault(x => x.Name == "Marka")?.ValueString;
}Uwagi
- Używaj operatorów warunkowych null (?.) podczas dostępu do właściwości zamówień i produktów, aby uniknąć błędów.
- GetOrders może zwrócić wiele zamówień. Użyj FirstOrDefault(), aby pracować z pojedynczym zamówieniem, lub przejdź pętlą przez całą listę.
- Użyj PriceString z OriginalCurrency.Sign, aby wyświetlić ceny w walucie oryginalnej zamówienia. Użyj ConvertedPrice z ConvertedCurrency.Sign, jeśli chcesz wyświetlić ceny w przeliczonej walucie.
- Jeśli żadne zamówienie nie spełnia podanych parametrów, metoda może zwrócić pustą listę. Zadbaj o obsługę tego przypadku w szablonie.
- Gdy używasz GetOrders() w scenariuszu po zakupie, punkt startowy Order przekazuje orderId jako pole danych. Możesz go użyć bezpośrednio w metodzie, aby pobrać właściwe zamówienie.