Szablony dla zaawansowanych

Spełnij kryteria WCAG 2.1/2.2. Przewodnik dla programistów oraz Partnerów Comarch.

Wstęp

Z dniem 28 czerwca 2025 roku w życie wejdą przepisy związane z implementacją ustawy z dnia 26 kwietnia 2024 r. o zapewnianiu spełniania wymagań dostępności niektórych produktów i usług. Wdraża ona do polskiego prawa tzw. Europejski Akt o Dostępności (EAA) – unijną dyrektywę 2019/882. Celem ustawy jest zapewnienie, że kluczowe produkty i usługi będą dostępne dla wszystkich użytkowników, w tym osób z niepełnosprawnościami. Przedsiębiorcy mają czas do 28 czerwca 2025 roku, aby dostosować swoje produkty i usługi do nowych wymogów.
Wskazówka
Chcesz dowiedzieć się więcej o tych przepisach? Sprawdź artykuł w naszym Centrum Pomocy: Europejski Akt o Dostępności (EAA) i zapoznaj się ze szczegółami
Niniejszy artykuł przedstawia fundamentalne zasady i techniczne wytyczne, których wdrożenie przyczyni się do zwiększenia dostępności witryny internetowej. Ma on na celu ma na celu pomóc programistom Liquid w tworzeniu dostępnych cyfrowo aplikacji i stron internetowych.  

Najlepsze praktyki dostępności

Dostępność stron internetowych jest obecnie kluczowym aspektem ich projektowania, mającym na celu zapewnienie równego dostępu do treści dla wszystkich użytkowników, niezależnie od ich indywidualnych potrzeb czy ograniczeń. Przestrzeganie najlepszych praktyk w zakresie dostępności nie tylko wspiera osoby korzystające z technologii asystujących, ale również poprawia ogólną użyteczność i funkcjonalność serwisu. W tym artykule przedstawiamy najlepsze praktyki dotyczące dostępności, które powinny być stosowane w kodzie HTML i CSS. Każdy z tych elementów odgrywa istotną rolę w budowaniu przyjaznego i dostępnego środowiska cyfrowego. Omówione zagadnienia obejmują:
  • Stosowanie semantycznych znaczników HTML,
  • Zapewnienie odpowiedniego kontrastu kolorystycznego,
  • Właściwe oznaczanie grafik poprzez teksty alternatywne,
  • Dostosowanie mechanizmów nawigacyjnych dla użytkowników korzystających z klawiatury.
 
Wskazówka
Ten artykuł przeznaczony jest dla osób z zaawansowaną wiedzą dotyczącą modyfikacji kodu szablonu. Jeśli nie jesteś programistą i nie dokonujesz zmian w kodzie, to przejdź do artykułów ogólnych:
 

Zasady ogólne

  • Semantyczne znaczniki HTML Używaj odpowiednich znaczników HTML, takich jak <header>, <nav>, <main>, <footer>, aby struktura strony była logiczna i zrozumiała. Jeśli w szablonie znajdują się niestandardowe struktury lub elementy, upewnij się, że są one odpowiednio oznaczone i dostępne dla czytników ekranu, np. za pomocą landmarków ARIA Landmarks.
  • Kolory i kontrast Zapewnij odpowiedni kontrast między tekstem, a tłem. Używaj narzędzi do sprawdzania kontrastu, aby upewnić się, że spełniasz standardy WCAG. Wykorzystaj devtools do sprawdzania kontrastu kolorów, takie jak np. WebAIM Contrast Checker, lub skorzystaj z narzędzia WAVE dostępnego jako rozszerzenie do przeglądarki.
  • Tekst alternatywny Zawsze dodawaj tekst alternatywny do obrazów, aby osoby korzystające z czytników ekranu mogły zrozumieć ich zawartość. W większości przypadków wykorzystanie filtra Liquid Img automatycznie zapewni odpowiednie atrybuty alt, natomiast jeśli używasz niestandardowych obrazów, upewnij się, że dodajesz alt lub aria-label do elementu <img>.
  • Nawigacja klawiaturą Zagwarantuj opcję poruszania się po stronie przy użyciu klawiatury, jednocześnie dbając o dostępność wszystkich interaktywnych elementów. Pamiętaj o zdefiniowaniu stylu swojego :focus oraz :focus-visible, aby użytkownicy mogli łatwo zidentyfikować, który element jest aktualnie aktywny. Niektóre znaczniki HTML5 są domyślnie dostępne dla nawigacji klawiaturą, takie jak <button>, <a>, <input>, ale jeśli używasz niestandardowych elementów, takich jak <div> lub <span>, upewnij się, że dodajesz tabindex=”0″ i odpowiednie role ARIA.
  • Czytelność Używaj prostego i zrozumiałego języka. Unikaj skomplikowanych zdań i terminologii, która może być trudna do zrozumienia dla niektórych użytkowników.
 

Elementy interaktywne

  • Formularze Używaj odpowiednich znaczników formularzy, takich jak <input>, <select>, <textarea>. Zapewnij, że są one poprawnie oznaczone. Używaj aria-label lub aria-labelledby, jeśli etykiety nie są widoczne. Jeśli natomiast w szablonie wykorzystywane są customowe pola formularzy, np. przy użyciu wykorzystania elementów <div> lub <span> to upewnij się, że są one dostępne dla czytników ekranu i użytkowników korzystających z klawiatury, np. poprzez dodanie role=”checkbox” lub role=”button” oraz odpowiednich atrybutów ARIA.
  • Przyciski Używaj <button> zamiast <div> lub <span> do tworzenia przycisków. Jeśli używasz ikon jako przycisków, dodaj aria-label lub title, aby opisać ich funkcję. Ikony, które nie mają znaczenia informacyjnego, powinny mieć aria-hidden=”true” lub role=”presentation”, aby nie były odczytywane przez czytniki ekranu.
  • Linki Używaj <a> do tworzenia linków. Tekst linku powinien jasno opisywać jego cel. Unikaj używania ogólnych fraz, takich jak „kliknij tutaj”. Jeśli chcesz dostarczyć dodatkowe informacje, użyj aria-label np. w przypadku linków do pobrania plików, np. <a href=”plik.pdf” aria-label=”Pobierz plik PDF”>Pobierz</a>.
  • Role ARIA Używaj ról ARIA, aby poprawić dostępność elementów, które nie mają semantycznego znaczenia w HTML. Na przykład, jeśli używasz <div> jako przycisku, dodaj role=”button” i zapewnij odpowiednie atrybuty ARIA, takie jak aria-pressed dla przycisków przełączających. Dodaj tłumaczenia do szablonu, aby zapewnić tłumaczenie tekstów używanych w atrybutach ARIA, takich jak aria-label, aria-labelledby i aria-describedby, aby były dostępne w różnych językach. np. aria-label=”{{translations.DownloadFile}}”.
 

Struktura treści

  • Nagłówki Używaj nagłówków od <h1> do <h6> w logicznej hierarchii. Nagłówek <h1> powinien być używany tylko raz na stronie, a kolejne nagłówki powinny być używane zgodnie z hierarchią.
  • Listy Używaj <ul> dla list nieuporządkowanych i <ol> dla list uporządkowanych. Unikaj używania <div> lub <span> do tworzenia list.
  • Tabele Używaj tabel do prezentacji danych. Dodaj <caption> opisujący tabelę i używaj nagłówków <th> z atrybutem scope=”col” lub scope=”row” dla kolumn i wierszy, aby poprawić dostępność.
  • Animacje i ruch Unikaj automatycznych animacji, które mogą być dezorientujące dla użytkowników. Jeśli musisz użyć animacji, zapewnij możliwość ich wyłączenia lub ograniczenia. Używaj prefers-reduced-motion w CSS, aby dostosować animacje do preferencji użytkownika.
  • Wideo i audio Zapewnij napisy i transkrypcje dla materiałów wideo i audio. Używaj znaczników <video> i <audio> z odpowiednimi atrybutami, takimi jak controls, aby umożliwić użytkownikom interakcję z multimediami.
  • Dynamiczne treści Jeśli używasz JavaScript do dynamicznego aktualizowania treści, upewnij się, że zmiany są ogłaszane dla czytników ekranu. Używaj aria-live i aria-atomic, aby kontrolować, jak zmiany są komunikowane użytkownikom korzystającym z technologii asystujących.
  • Testowanie dostępności Regularnie testuj swoją stronę pod kątem dostępności, używając narzędzi, takich jak Lighthouse, Axe lub WAVE. Te narzędzia pomogą zidentyfikować problemy z dostępnością i zasugerują poprawki. Ręczne testowanie dostępności jest również ważne. Używaj czytników ekranu, takich jak NVDA lub VoiceOver, aby sprawdzić, jak Twoja strona jest odczytywana przez użytkowników korzystających z technologii asystujących. Testuj na różnych urządzeniach i przeglądarkach, aby upewnić się, że dostępność jest zachowana we wszystkich warunkach. Testuj również z użytkownikami korzystającymi z technologii asystujących, aby uzyskać rzeczywiste opinie na temat dostępności Twojej strony.
 
Wskazówka
Szczegółowy zakres wymagań związanych z przepisami, znajdziesz w:
 

Podsumowanie

Dostępność jest kluczowym aspektem tworzenia stron internetowych i aplikacji. Stosowanie się do najlepszych praktyk dostępności pomoże zapewnić, że Twoje treści są dostępne dla wszystkich użytkowników, niezależnie od ich zdolności. Pamiętaj, że dostępność to proces ciągły, a regularne testowanie i aktualizowanie treści jest niezbędne, aby utrzymać wysokie standardy dostępności.

Jak skonfigurować dodatek Comarch Liquid Sync?

Jak działa Comarch Liquid Sync?

Liquid Sync synchronizuje pliki umieszczone na komputerze użytkownika z plikami szablonu Liquid. Pilnuje zgodności danych wykrywając modyfikacje w plikach lokalnych lub w plikach szablonu Liquid, a następnie podmienia nieaktualny plik na jego nowszą wersje. Dzięki aplikacji Liquid Sync nie trzeba używać edytorów kodu dostępnych w panelu administracyjnym e-Sklep. Każdy użytkownik może korzystać z dowolnego środowiska programistycznego, a Liquid Sync zadba o zgodność utworzonego lokalnie projektu z plikami w panelu administracyjnym.

Jak uruchomić Comarch Liquid Sync?

Aplikacja dostępna dla sklepów Comarch.
Liquid Sync można pobrać ze strony Liquid Sync. Rozpakowany folder będzie zawierać między innymi:
  • Katalog pl – zawiera XML z ustawieniami. Nie należy go usuwać.
  • Katalog logs – zawiera logi operacji.
  • COMARCHeShopLiquidSync – aplikacja Liquid Sync.
Aplikację należy uruchomić z prawami administratora. Po uruchomieniu zostaną otwarte dwa okna: okno konsolowe oraz okno przeglądarki z interfejsem aplikacji. Obydwa okna powinny pozostać włączone.

Jak skonfigurować Comarch Liquid Sync?

Liquid Sync potrzebuje danych logowania do sklepu. Przy pierwszym uruchomieniu widoczny będzie formularz, w którym należy wpisać:
  • Nazwę sklepu – dowolna nazwa, po której będzie można rozpoznać sklep na liście sklepów
  • Url – adres url istniejącego sklepu
  • Login – login użytkownika, na którego aplikacja ma się zalogować do panelu e-Sklepu. Należy wykorzystać login webmaster, którego konfiguracja dostępna jest w panelu administracyjnym**.
  • Hasło – hasło wskazanego użytkownika
Wskazówka
Comarch e-Sklep Liquid Sync do połączenia wymaga SSL
konfiguracja liquid sync
Wskazówka
**Zaloguj się do panelu administracyjnego e-Sklepu przejdź do zakładki Integracje > Dodaj integrację. Na filtrze Typ wybierz Dodatki. Następnie wybierz dodatek Comarch Liquid Sync, naciśnij Dodaj, a w kolejnym kroku Konfiguruj.
Po kliknięciu Zaloguj się sklep zostanie dodany do listy po lewej stronie. W prawym oknie pojawi się lista dostępnych szablonów. Szablony w sklepie połączonym z Liquid Sync Od teraz będzie to ekran startowy aplikacji. Aby dodać kolejny sklep trzeba będzie nacisnąć przycisk Dodaj sklep. Po zalogowaniu w rozpakowanym katalogu COMARCHeShopLiquidSync zostanie utworzony katalog o podanej w formularzu nazwie. Lokalny katalog sklepu utworzony przez LiquidSync Katalog będzie zawierał:
  • Katalog logs – zawiera logi operacji danego e-Sklepu
  • Katalog sync – zawiera plik z ustawieniami
  • Katalog templates – w tym miejscu będą tworzyć się podkatalogi z plikami dla dostępnych szablonów
Katalogi z plikami szablonu nie mogą zostać przeniesione.

Synchronizacja

Praca z plikami

Aby wybrać, który z szablonów aplikacja powinna synchronizować, wystarczy wybrać odpowiednią pozycję na liście dostępnych szablonów. Jeżeli synchronizacja dotyczy szablonu, który jest zabezpieczony hasłem, Liquid Sync również będzie potrzebował hasła. Hasło szablonu w Liquid Sync Po wybraniu szablonu otworzy się okno synchronizacji. Lewa kolumna o nazwie Log będzie zawierać logi synchronizacji, natomiast prawa o nazwie Pliki będzie informować o konfliktach do rozwiązania. Szynchronizacja szablonu za pomocą Liquid Sync Przy pierwszej synchronizacji szablonu, wewnątrz katalogu templates, zostanie utworzony odpowiadający mu katalog. Nazwami katalogów są id szablonów. Folder lokalny szablonu w aplikacji Liquid Sync Jeżeli w panelu administracyjnym e-Sklep nie zostały wcześniej dodane żadne pliki dla danego szablonu, to wewnątrz powyższego folderu należy samodzielnie utworzyć katalog o nazwie 0 (zero). W katalogu 0 należy umieszczać wszystkie pliki wymagające synchronizacji. Jeżeli szablon zawierał już jakiekolwiek pliki, katalog utworzy się automatycznie, a wewnątrz niego znajdować się będą pliki pobrane z panelu. Każdy nowy plik umieszczony w katalogu 0 automatycznie pojawi się w plikach szablonu Liquid w panelu administracyjnym e-Sklep. Plik lokalny synchronizowany z szablonem Liquid pliki liquid syncAplikacja Liquid Sync wyświetli również odpowiedni log. Log nowego pliku w Liquid Sync Plik lokalny zostanie również wysłany do sklepu po każdym zapisie, a jego usunięcie spowoduje usunięcie odpowiadającego pliku z szablonu Liquid.

Rozwiązywanie konfliktów

Zdarza się, że pliki lokalne nie są zgodne z plikami szablonu Liquid. W takiej sytuacji, w kolumnie Pliki, Liquid Sync wyświetli odpowiedni komunikat. Komunikat zapyta użytkownika, w jaki sposób aplikacja powinna rozwiązać konflikt. Poniżej opisane zostaną przyczyny konfliktów oraz sposoby ich rozwiązania.

Jak zmodyfikować plik w panelu administracyjnym e-Sklep?

Modyfikacja plików po stronie panelu administracyjnego, w przeciwieństwie do modyfikacji plików lokalnych, jest traktowana jako konflikt. Komunikat konfliktu, w przypadku modyfikacji istniejących plików, będzie proponował dwa rozwiązania: pobrać plik szablonu do projektu lokalnego lub wysłać lokalny plik do panelu administracyjnego. Konflikt: Pliki nie są zgodne Jeżeli zmiana zostanie wykonana w podczas aktywnej synchronizacji, należy kliknąć przycisk Odśwież, aby zobaczyć komunikat. Usunięcie pliku po stronie panelu administracyjnego będzie wymagało podjęcia decyzji: usunąć plik z lokalnego systemu plików, czy wysłać istniejący lokalnie plik do panelu administracyjnego e-Sklep. Konflikt: Brak pliku na zdalnym systemie Dodanie nowego pliku w panelu administracyjnym również wyświetli stosowny komunikat. Liquid Sync zaproponuje wtedy pobranie nowego pliku z panelu do projektu lokalnego lub usunięcie nowego pliku z szablonu Liquid. Konflikt: Brak pliku na lokalnym systemie

Jak zmodyfikować plik lokalny, kiedy aplikacja Comarch Liquid Sync była wyłączona?

Liquid Sync nie miał okazji zaktualizować pliku lokalnego po jego modyfikacji, więc wystąpiła niezgodność. W przypadku istniejących plików aplikacja wyświetli komunikat z rozwiązaniami: pobrać plik szablonu do projektu lokalnego lub wysłać plik lokalny do sklepu. Konflikt: Pliki nie są zgodne Jeżeli plik lokalny zostanie usunięty, komunikat będzie zawierał opcję pobrania odpowiadającego pliku ze sklepu lub jego usunięcie. Konflikt: Brak pliku na lokalnym systemie Gdy nowy plik zostanie dodany, rozwiązać konflikt można poprzez wysłanie nowego pliku do sklepu lub usunięcie go. Konflikt: Brak pliku na zdalnym systemie.
Wskazówka
Należy pamiętać, aby w panelu administracyjnym włączyć podgląd zmian w czasie rzeczywistym.

Co to jest Liquid?

Liquid to silnik szablonów graficznych wykorzystywany w Comarch e-Sklep. Szablony graficzne w technologii Liquid umożliwiają swobodną modyfikację wyglądu sklepu. Modyfikacji można dokonywać samodzielnie w ustawianiach szablonu, tym samym łatwo wgrywać nowe bannery, czy dostosować kolorystykę. Posiadając większą wiedzę z zakresu HTML, JS, CSS i Liquid, można głębiej ingerować w wygląd sklepu. W przypadku nie posiadania dostatecznej wiedzy, można zlecić wykonanie szablonu Partnerowi bądź firmie wdrażającej.

Dostępne filtry

Tablice

W skład tych filtrów wchodzą:
First Randomize
Last Join
Skip Map
Take Size
Sort Uniq
Reverse
 

Tekstowe

W skład tych filtrów wchodzą:
Format Size
Append Slice
Prepend Split
Capitalize StripHtml
Downcase StripNewlines
Upcase NewlineToBr
Remove Truncate
RemoveFirst TruncateWords
Replace Times
ReplaceFirst
 

Liczbowe, Matematyczne

W skład tych filtrów wchodzą:
Plus Normalize
Minus Floor
Times Ceil
DividedBy Abs
Modulo Round
 

Data i czas

W skład tych filtrów wchodzą:
Date
 

Cena

W skład tych filtrów wchodzą:
ToPrice
 

HTML

Filtry, które po zastosowaniu zwracają gotowe fragmenty kodów HTML do wykorzystania na stronie. W skład tych filtrów wchodzą:
A Img2
Img
 

Pozostałe

W skład tych filtrów wchodzą:
H ToInt
Escape ToNum
EscapeUri ToTimeSpan
UnEscapeUri DEBUG
ToString
 

 

Opis dostępnych filtrów:

 
First
Pobiera pierwszy element z tablicy. Zwracany typ: zależny co przechowuje tablica. {{ product-details.Product.Images |First |Img }}

 
Last
Pobiera ostatni element z tablicy. Zwracany typ: zależny co przechowuje tablica. {{ product-details.Product.Images |Last |Img }}

 
Skip
Zwraca tablicę, która nie zawiera początkowych elementów z tablicy wejściowej. Omija określoną liczbę elementów. Liczba elementów do ominięcia jest przekazywana w parametrze. Parametry: int. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign kolory = koloryTekst |Split: ',' %}Wszystkie elementy {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Pomiń 3 pierwsze elementy {% assign kolory = kolory |Skip: 3 %} {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Powyższy przykład zwróci: Wszystkie elementy biały czarny zielony czerwony niebieski żółtyPomiń 3 pierwsze elementy czerwony niebieski żółty

 
Take
Zwraca tablicę, która zawiera tylko określoną liczbę początkowych elementów z tablicy wejściowej. Parametry: int. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign kolory = koloryTekst |Split: ',' %}Wszystkie elementy {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Pobierz tylko 3 pierwsze elementy {% assign kolory = kolory |Take: 3 %} {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Powyższy przykład zwróci: Wszystkie elementy biały czarny zielony czerwony niebieski żółtyPobierz tylko 3 pierwsze elementy biały czarny zielony

 
Sort
Sortuje elementy w tablicy według przekazanego argumentu. Argument powinien być właściwością kolekcji elementów tablicy wejściowej. Parametry: string. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign sortedFlags = product-details.Product.Flags |Sort: 'Text' %} {% for flag in sortedFlags -%} Nazwa: {{ flag.Text}} {% endfor -%}

 
Reverse
Odwraca kolejność elementów w tablicy. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign kolory = koloryTekst |Split: ', ' %} {% assign kolory = kolory |Reverse %} Wszystkie elementy w odwróconej kolejności {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Powyższy przykład zwróci: Wszystkie elementy w odwróconej kolejności żółty niebieski czerwony zielony czarny biały

 
Randomize
Zwraca tablicę, w której kolejność elementów jest ustawiona w sposób losowy. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign kolory = koloryTekst |Split: ', ' %} {% assign kolory = kolory |Randomize %} Wszystkie elementy w losowej kolejności {% for kolor in kolory -%} {{ kolor }} {% endfor -%} Powyższy przykład może zwrócić: czerwony niebieski biały żółty czarny zielony Kolejny przykład {% assign losowyObrazek = productdetails.Product.Images |Randomize %} Pierwszy losowy obrazek na towarze {{losowyObrazek |First |Img }}

 
Join
Łączy elementy tablicy w ciąg znaków wstawiając pomiędzy elementy przekazany parametr. Parametry: string. Zwracany typ: string. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign tablicaKolorow = koloryTekst |Split: ', ' %} {{tablicaKolorow |Join: '. ' }} Powyższy przykład zwróci: biały. czarny. zielony. czerwony. niebieski. żółty

 
Map
Zwraca tablicę składającą się z wartości elementów kolekcji wejściowej dla wskazanej właściwości przez przekazany argument. Parametry: string. Zwracany typ: tablica elementów typu wskazanej właściwości. {% assign typyFlag = product-details.Product.Flags |Map: 'Text' %} {% for typFlagi in typyFlag -%} {{typFlagi}} {% endfor -%} Powyższy przykład może zwrócić: Promocja Najlepiej oceniany Kolejny przykład {{ config.Languages |Map: 'Name' |Join: ', ' }} Powyższy przykład może zwrócić: polski, Deutsch, français

 
Size
Zwraca liczbę elementów w tablicy. Zwracany typ: int. Liczba obrazków dla towaru {{ product-details.Product.Images |Size }}

 
Uniq
Zwraca tablicę unikatowych elementów. Tablica ta nie zawiera duplikatów. Zwracany typ: tablica elementów typu zdefiniowanego w tablicy wejściowej. {% assign kolory = "czarny,biały,niebieski,czarny,niebieski" | Split: ',' -%} {% assign unikatoweKolory = kolory | Uniq -%} {% for kolor in unikatoweKolory -%} {{kolor}} {% endfor -%} Powyższy przykład zwróci: czarny biały niebieski

 
Format
Formatuje tekst zgodnie z wartościami przekazanymi w poszczególnych parametrach. Parametry: object p1, object p2 = null, object p3 = null, object p4 = null, object p5 = null, object p6 = null, object p7 = null, object p8 = null, object p9 = null, object p10 = null. Zwracany typ: string. {% assign cenaWaluta = 'Cena: {0}, waluta {1}' -%} {{ cenaWaluta | Format:'25.00', 'PLN' }} Powyższy przykład zwróci: Cena: 25.00, waluta PLN

 
Append
Dodaje tekst przekazany przez argument na koniec tekstu wejściowego. Jeżeli tekst wejściowy == null to filtr zwróci null. Parametry: string. Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' %} {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst1 |Append: tekst2 }} Powyższy przykład zwróci: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.

 
Prepend
Dodaje tekst przekazany przez argument na początek tekstu wejściowego. Jeżeli tekst wejściowy == null to filtr zwróci null. Parametry: string. Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. ' %} {{ tekst1 |Prepend: tekst2 }} Powyższy przykład zwróci: Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

 
Capitalize
Konwertuje tekst tak, aby każde słowo w tekście zaczynało się z dużej litery.Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {{ tekst1 |Capitalize }}

 
Downcase
Konwertuje tekst tak, aby cały tekst (każda litera) był napisany małymi literami. Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {{ tekst1 | Downcase }}

 
Upcase
Konwertuje tekst tak, aby cały tekst (każda litera) był napisany wielkimi literami.Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {{ tekst1 |Upcase}}

 
Remove
Usuwa z tekstu wejściowego fragment tekstu przekazanego przez parametr. Parametry: string. Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {{ tekst1 |Remove: 'ip' }}

 
RemoveFirst
Usuwa z tekstu wejściowego pierwsze wystąpienie fragmentu tekstu przekazanego przez parametr. Parametry: string. Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {{ tekst1 |RemoveFirst: 'ip' }}

 
Replace
Zamienia w tekście wejściowym szukany fragment tekstu innym tekstem (tekst zamienny). Szukany fragment tekstu oraz tekst zamienny przekazywane są przez parametry. Parametry przyjmują wyrażenia regularne. Jeśli chcemy wyszukać znak specjalny i użyć go jak znaku, a nie części wyrażenia regularnego, należy go poprzedzić ukośnikiem \.Parametry: string, string = "". Zwracany typ: string. {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst2 |Replace:'!','.' }} {% assign waga = '31.53kg' %} {{ waga |Replace:'\.',',' }} {% assign spacje = ' Litwo! Ojczyzno moja! Ty jesteś jak zdrowie. ' %} {{ spacje |Replace:'^\s+|\s+$','' }}

 
ReplaceFirst
Zamienia w tekście wejściowym pierwsze wystąpienie szukanego fragmentu tekstu innym tekstem (tekst zamienny). Szukany fragment tekstu oraz tekst zamienny przekazywane są przez parametry. Parametry przyjmują wyrażenia regularne. Jeśli chcemy wyszukać znak specjalny i użyć go jak znaku, a nie części wyrażenia regularnego, należy go poprzedzić ukośnikiem \.Parametry: string, string = "". Zwracany typ: string. {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst2 |ReplaceFirst:'!','.' }}

 
Size
Zwraca długość tekstu - liczba znaków w tekście. Zwracany typ: int. Długość opisu towaru {{ productdetails.Product.Description |Size }} Kolejny przykład Liczba znaków w cenie towaru {{ productdetails.Product.Price |ToString |Size }}

 
Slice
Zwraca fragment z tekstu wejściowego dla podanej pozycji początkowej oraz długości. Pozycja początkowa oraz długość przekazywane są przez parametry. W przypadku, gdy parametr z pozycją początkową jest ujemny to pozycja początkowa liczona jest od od końca tekstu.
Uwaga
Znaki w tekście numerowane są od 0. Należy uwzględnić to przy określaniu pozycji początkowej.
Parametry: int, int = 1. Zwracany typ: string. {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst2 |Slice:0 }} {{ tekst2 |Slice:1 }} {{ tekst2 |Slice:0,20 }} {{ tekst2 |Slice: - 1 }} {{ tekst2 |Slice: - 20,10 }} Powyższy przykład zwróci: L i Litwo! Ojczyzno moja . jesteś jak

 
Split
Tworzy z tekstu wejściowego tablicę, w której każdy element stanowi fragment tekstu rozdzielony przez podany wzorzec. Wzorzec przekazany przez parametr. Parametry: string. Zwracany typ: string[]. {% assign koloryTekst = 'biały, czarny, zielony, czerwony, niebieski, żółty' %} {% assign kolory = koloryTekst |Split: ', ' %}Pierwszy element {{ kolory[0] }} Wszystkie elementy {% for kolor in kolory - %} {{ kolor }} {% endfor - %} Powyższy przykład zwróci: Pierwszy element białyWszystkie elementy biały czarny zielony czerwony niebieski żółty

 
StripHtml
Usuwa wszystkie tagi HTML z tekstu wejściowego. Zwracany typ: string. {{ productdetails.Product.Description |StripHtml }}

 
StripNewlines
Usuwa wszystkie znaki nowej linii (podziały wiersza) z tekstu wejściowego. Zwracany typ: string. {{ productdetails.Product.Description |StripNewlines }}

 
NewlineToBr
Wstawia tag HTML przed każdym znakiem nowej linii w tekście wejściowym. Zwracany typ: string. {{ productdetails.Product.Description |NewlineToBr }}

 
Truncate
Obcina tekst wejściowy do podanej liczby znaków dodając na końcu tekst obcinający. Liczba znaków oraz tekst obcinający przekazywane są przez parametry. Tekst obcinający wliczony jest w liczbę znaków. Parametry: int = 50, string = "...". Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst1 |Truncate }} {{ tekst2 |Truncate: 25, '(...)' }} Powyższy przykład zwróci: Lorem ipsum dolor sit amet, consectetur adipisc... Litwo! Ojczyzno moja(...)

 
TruncateWords
Obcina tekst wejściowy do podanej liczby wyrazów dodając na końcu tekst obcinający. Liczba wyrazów oraz tekst obcinający przekazywane są przez parametry. Parametry: int 15, string = "..." Zwracany typ: string. {% assign tekst1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' %} {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {{ tekst1 |TruncateWords }} {{ tekst2 |TruncateWords: 3,'(...)' }} Powyższy przykład zwróci: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Litwo! Ojczyzno moja!(...)

 
Times
Powtarza tekst wielokrotnie. Liczba powtórzeń przekazywana przez parametr. Parametry: int. Zwracany typ: string. {% assign kropka = '.' %} {% assign liczbaPowtorzen = 3 %} Przykładowy tekst zakończony kropkami{{ kropka|Times: liczbaPowtorzen }}

 
Plus
Dodawanie. Parametry: int/decimal. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba1 = 9 %} {% assign liczba2 = 2 %} Wynik: {{ liczba1 | Plus: liczba2 }}
Uwaga
Jeśli filtr Plus wywołany zostanie na elemencie wejściowym typu string to działanie będzie podobne do użycia filtru Append.
 

 
Minus
Odejmowanie. Parametry: int/decimal. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba1 = 9 %} {% assign liczba2 = 3 %} Wynik: {{ liczba1 |Minus: liczba2 }}

 
Times
Mnożenie. Parametry: int/decimal. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba1 = 9.01 %} {% assign liczba2 = 2 %} Wynik: {{ liczba1 |Times: liczba2 }}

 
DividedBy
Dzielenie. Parametry: int/decimal. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba1 = 9 %} {% assign liczba2 = 3 %} Wynik:{{ liczba1 |DividedBy: liczba2 }}

 
Modulo
Reszta z dzielenia. Parametry: int/decimal. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba1 = 9.01 %} {% assign liczba2 = 2 %} Wynik:{{ liczba1 |Modulo: liczba2 }}

 
Normalize
Formatuje liczbę wejściową usuwając jej „zbędne” zera w części ułamkowej. Typ liczby wejściowej: decimal. Zwracany typ: decimal. Cena: {{ productdetails.Product.Price }} Cena: {{ productdetails.Product.Price |Normalize }} Powyższy przykład może zwrócić: Cena: 10,00 Cena: 10

 
Floor
Zwraca największą liczbę całkowitą, która jest mniejsza lub równa wejściowej. Typ liczby wejściowej: decimal. Zwracany typ: int. {% assign liczba = 6.05 %} Wynik:{{ liczba |Floor }} Powyższy przykład zwróci: Wynik:6

 
Ceil
Zwraca najmniejszą liczbę całkowitą, która jest większa lub równa wejściowej.Typ liczby wejściowej: decimal. Zwracany typ: int. {% assign liczba = 6.05 %} Wynik:{{ liczba |Ceil }} Powyższy przykład zwróci: Wynik:7

 
Abs
Zwraca wartość bezwzględną z liczby. {% assign liczba = -6.05 %} Wynik:{{ liczba |Abs }} Powyższy przykład może zwrócić: Wynik:6.05

 
Round
Zaokrągla liczbę wejściową do określonej ilości miejsc po przecinku. Zwracany typ: taki sam jak element wejściowy, na którym wywołany jest filtr. {% assign liczba = 6.05687 %} Wynik:{{ liczba |Round: 4 }} Powyższy przykład zwróci: Wynik:6.0569

 
Date
Formatuje datę i czas. Zwraca datę i czas zgodnie z formatem przekazanym w parametrze.
Wskazówka
Filtr Date w sklepie korzysta z domyślnych ustawień dla DotLiquid. Należy korzystać z formatu daty zgodnego z konwencją .NET dostępnym pod linkiem: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.100).aspx
Parametry: string. Zwracany typ: string. Data i czas "teraz" {{ config.Now }} Data {{ config.Now |Date:'yyyy-MM-dd' }} Czas {{ config.Now |Date:'HH:mm:ss' }} Powyższy przykład może zwrócić: Data i czas "teraz" 13.10.2022 10:32:39 Data 2022-10-13 Czas 10:32:39

 
ToPrice
Formatuje cenę do formatu wyświetlania zgodnego z kulturą dla ustawionej lokalizacji sklepu (grupowanie tysięcy, kropka czy przecinek, itd.). Lokalizacja sklepu określa, czy sklep został zainstalowany domyślnie na rynek polski, niemiecki, itd. Zwracany typ: string. Cena: {{ product-details.Product.Price }} Cena: {{ product-details.Product.Price |ToPrice }} Powyższy przykład może zwrócić: Cena: 2348,68 Cena: 2 348,68 (lokalizacja na rynek polski)

 
A
Tworzy tag <a>wraz z atrybutami. Wartości dla atrybutów tagu pobierane są z elementu wejściowego. Typ elementu wejściowego: obiekt Liquid. Zwracany typ: string. Filtr ma zastosowanie dla obiektów:
  • Strona
  • Grupa towarowa
  • Towar
  • Blog
  • Tagi
Przykład użycia filtra A dla obiektów: Strona Strony {{ config.DefinedPages.Home |A |H }} {{ config.Pages['6'] |A |H }} {% comment %} Strona o id = 6 {% endcomment %} {{ page.CurrentSiteNode |A |H }} {{ page.GroupNodes[0] |A |H }} {{ page.Breadcrumbs[0] |A |H }} Powyższy przykład może zwrócić: Strony <a href="./">Strona główna</a> <a href="profil-klienta,6">Profil klienta</a> <a href="produkty/owoce-1/banany-555,2,1024703">Banany</a> <a href="produkty/owoce-1,2,76">Owoce</a> <a href="./">Strona główna</a> Przykład użycia filtra A dla obiektów: Towar Towary {{ product-new.Products[0] |A |H }} {{ product-list.Products[1] |A |H }} {{ product-details.Product |A |H }} Powyższy przykład może zwrócić: Towary <a href="banany,3,1024703,81">Banany</a> <a href="minibanany-odrobina-wystarczy,3,1024703,82">Minibanany odrobina wystarczy</a> <a href="minibanany-odrobina-wystarczy,3,1024703,82">Minibanany odrobina wystarczy</a> Przykład użycia filtra A dla obiektów: Blog, Tags Blog {{ blog.PostList.Posts[0] |A |H }} {{ blog.PostDetails |A |H }} Tags {{ config.Tags.Blog[0] |A |H }} Powyższy przykład może zwrócić: Blog <a href="blog-wpis-podstawowy,24,1">Blog wpis podstawowy</a> <a href="blog-wpis-podstawowy,24,1">Blog wpis podstawowy</a> Tags <a rel="tag" href="blog,23?seaBlog=Informacje">Informacje</a>

 
Img
Tworzy tag <img>wraz z atrybutami. Wartości dla atrybutów tagu pobierane są z elementu wejściowego lub mogą być przekazywane przez parametry.
Uwaga
Tag <img> domyślnie ustawiony ma link do obrazka w atrybucie data-src. Należy zastosować funkcję skryptową, która przepisze wartość z atrybutu data-src do atrybutu src (lazy load).
Typ elementu wejściowego: obiekt Liquid, string. Parametry: string size = "small", string alt = null, string title = null. Zwracany typ: string. Dostępne wartości dla parametru size:
Parametr size Rozmiar zdjęcia (dłuższa krawędź) w px
img 0
pico 16
icon 32
thumb 50
small 100
compact 160
medium 240
large 480
grande 600
master 1920
Filtr ma zastosowanie dla obiektów:
  • Towar
  • Zdjęcia towaru (na szczegółach towaru)
  • Producent
  • Marka
  • Blog (w obiekcie blog pomijany jest parametr size. Obrazki zwracane są zawsze w rozmiarze rzeczywistym).
Przykład użycia filtra Img dla obiektów: Towar, Zdjęcia towaru Lista towarów {{ product-list.Products[1] |Img |H }} {{ produc-tlist.Products[1] |Img: 'medium','Świeże banany, Kraków' |H }} Towar (szczegóły) {{ product-details.Product |Img:'large' |H }} {{ product-details.Product.StockLevel.ImageUrl |Img |H }} { % comment % } Tekst z linkiem {% endcomment %} {{ product-details.Product.Images[0] |Img |H }} Powyższy przykład może zwrócić: Lista towarów <img alt="Minibanany odrobina wystarczy" src="usr/alo.gif" data-src="img/small/59/minibanany.jpg"/> <img alt="Świeże banany, Kraków" src="usr/alo.gif" data-src="img/medium/59/minibanany.jpg"/> Towar (szczegóły) <img alt="Minibanany odrobina wystarczy" src="usr/alo.gif" data-src="img/large/59/minibanany.jpg"/> <img src="usr/alo.gif" data-src="Ima.ashx?t=wrs&Id=1"/> <img alt="" src="usr/alo.gif" data-src="img/small/59/.jpg"/> Przykład użycia filtra Img dla obiektów: Producent, Marka Producent, Marka {{ manufacturers-brands.Manufacturers[2] |Img |H }} {{ manufacturers-brands.Manufacturers[2] |Img: 'thumb','Comarch globalny dostawca IT.' |H }} {{ manufacturers-brands.Brands[3] |Img |H }} Powyższy przykład może zwrócić: Producent, Marka <img alt="Comarch" src="usr/alo.gif" data-src="img/small/160/Comarch.jpg"/> <img alt="Comarch globalny dostawca IT." src="usr/alo.gif" data-src="img/thumb/160/Comarch.jpg"/> <img alt="Comarch ALTUM" src="usr/alo.gif" data-src="img/small/92/Comarch%20ALTUM.jpg"/> Przykład użycia filtra Img dla obiektów: Blog Blog {{ blog.LatestPosts[0] |Img |H }} {{ blog.PostList.Posts[0] |Img: 'compact','Blog dla Partnera','Informacje dla Partnerów na blogu sklepu' |H }} {{ blog.PostDetails |Img |H }} Powyższy przykład może zwrócić: Blog <img alt="Blog wpis podstawowy" src="usr/alo.gif" data-src="Ima.ashx?t=blg&id=1"/> <img alt="Blog dla Partnera" title="Blog dla Partnera,'Informacje dla Partnerów na blogu sklepu" src="usr/alo.gif" data-src="Ima.ashx?t=blg&id=1"/> <img alt="Blog wpis podstawowy" src="usr/alo.gif" data-src="Ima.ashx?t=blg&id=1"/> Przykład użycia filtra Img dla tekstu z linkiem do obrazka Tekst z linkiem do obrazka {{ productdetails.Product.StockLevel.ImageUrl |Img |H }} { % comment % } Tekst z linkiem {% endcomment %} {{ 'https://www.domena.pl/file/banner.jpg' |Img:'','atrybut alt','atrybut title' |H }} Powyższy przykład może zwrócić Tekst z linkiem do obrazka <img src="usr/alo.gif" data-src="Ima.ashx?t=wrs&Id=1"/> <img alt="atrybut alt" title="atrybut title"src="usr/alo.gif" data-src="https://www.domena.pl/file/banner.jpg"/>

 
Img2
Filtr Img2 zachowuje się w podobny sposób jak wyżej opisany filtr Img. Różnicą jest to, że utworzony tag <img> ma link do obrazka nie w atrybucie data-src, lecz w atrybucie data-lazy. Dodatkowo filtr Img2 pozwala na dodanie czwartego parametru raw, w którym można wpisać wszystko, np. class="example_class" i znajdzie się to wewnątrz tagu <img>.Typ elementu wejściowego: obiekt Liquid, string. Parametry: string size = "small", string raw = null, string alt = null, string title = null. Zwracany typ: string.Przykład użycia filtra Img2 na szczegółach towaru: {{product.Images[0] |Img2 :'large', '', 'pasek', 'obrazek' }} {{product.Images[0] |Img2: 'large', 'class="open-gallery"', 'pasek', 'obrazek' }} Powyższy przykład może zwrócić: <img src="img/large/27/.jpg" alt="pasek" title="obrazek" style="opacity: 1;"> <img src="img/large/27/.jpg" alt="pasek" title="obrazek" class="open-gallery" style="opacity: 1;">

 
H
Zamienia znaki specjalne na encje HTML (HTMLEncode).Zwracany typ: string. {% assign tekst2HTML = '<p>Litwo! <b>Ojczyzno moja!</b> Ty jesteś jak zdrowie.</p>' %} Tekst z encjami HTML {{ tekst2HTML |H }} Powyższy przykład zwróci: Tekst z encjami HTML <p>Litwo! <b>Ojczyzno moja!</b> Ty jesteś jak zdrowie.</p>

 
Escape
Alias dla filtra H.

 
EscapeUri
Zamienia znaki spoza zakresu ASCII na format zgodny z ASCII. Zwracany typ: string. {% assign tekst2 = 'Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} Link użytkownika {{ '<'|H }}a href="/?tekst={{ tekst2 | EscapeUri }}" (...) Powyższy przykład zwróci: Link użytkownika <a href="/?tekst=Litwo!%20Ojczyzno%20moja!%20Ty%20jeste%C5%9B%20jak%20zdrowie." (...)

 
UnEscapeUri
Filtr przeciwstawny do filtra EscapeUri. Zwracany typ: string.

 
ToString
Konwertuje element wejściowy do typu string. Zwracany typ: string. {% assign tekst2 = ' Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.' %} {% assign liczba = 3 %} Liczba i tekst: {{ liczba |ToString |Append: tekst2 }} Powyższy przykład zwróci: Liczba i tekst: 3 Litwo! Ojczyzno moja! Ty jesteś jak zdrowie.

 
ToInt
Konwertuje element wejściowy do typu int. Zwracany typ: int. {% assign tekstLiczba1 = '9' %} {% assign liczba1 = tekstLiczba1 |ToInt %} ToInt: {{ liczba1 }} | {{ liczba1 |Minus: 4 }} Powyższy przykład zwróci: ToInt: 9 | 5

 
ToNum
Konwertuje element wejściowy zgodnie z formatem dla kultury Invariant (zapewnia zawsze taki sam format). Liczby oraz daty wyświetlane są zgodnie z kulturą dla lokalizacji sklepu. Zwracany typ: string. liczba: {{ 1239,01 }} liczba (Invariant) : {{ 1239,01 |ToNum }} data: {{config.Now }} data (Invariant) {{config.Now |ToNum }} Powyższy przykład może zwrócić: liczba: 1239,01 liczba (Invariant) : 1239.01 data: 29.04.2016 14:45:24 data (Invariant) 04/29/2016 14:45:24

 
ToTimeSpan
Konwertuje tekst do typu TimeSpan zgodnie z formatem dla kultury Invariant. Zwracany typ: TimeSpan. TimeSpan: {{ '509.07:01:01' |ToTimeSpan }}

 
DEBUG
Wyświetla obiekty globalne i lokalne wraz z jego właściwościami oraz odpowiadającymi im wartościami. Przykład wyświetlenia obiektu customer z filtrem DEBUG <fieldset> <legend>DEBUG customer</legend> <code>{{ customer | DEBUG }}</code> </fieldset> </fieldset> Powyższy przykład może zwrócić: { "NewsletterSubscriber" : false, "Authenticated" : false, "CustomerDetailsEditable" : true, "Currency" : "PLN", "CurrencyExt" : { "Code" : "PLN", "Symbol" : "zł" },(...)
Uwaga
Tryb debug dla obiektów dostępny jest tylko, gdy włączony jest parametr Podgląd stron w czasie rzeczywistym
 

Obiekty lokalne

Niniejszy artykuł przedstawia wykaz obiektów lokalnych dostępnych w sklepie. Obiekty mogą być wykorzystywane w szablonach graficznych sklepu. Odwołanie do obiektu w szablonie następuje poprzez jego nazwę zmiennej nadaną w momencie dodania obiektu do szablonu. Dla każgdego obiektu opisano:
  • opcje konfiguracyjne
  • strony, na których może być użyty
  • właściwości obiektu
Wskazówka
Obiekty lokalne domyślnie nie są dostępne w sklepie. Obiekt należy dodać, oraz aktywować na wybranych stronach. Obiekty lokalne są importowane wraz z szablonem. Obiekt udostępnia informacje o aktualnej stronie.

Nowości i promocje

Obiekt zwraca listę towarów wg właściwości, np. nowości, promocje, itd.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Pokaż towary tylko ze zdjęciem
  • Zawężaj do wybranej grupy
  • Ilość
  • Typ
Pokaż towary tylko ze zdjęciem – Towary tylko ze zdjęciem. Wartość domyślna: true. Zawężaj do wybranej grupy – Zawęża wyświetlane towary wg wybranego typu tylko do tych towarów, które należą do tej samej grupy co przeglądany towar na stronie szczegóły towaru. Wartość domyślna: true. Ilość – Liczba towarów. Wartość minimalna: 1. Wartość maksymalna: 50. Wartość domyślna: 12. Typ – Towary wg właściwości. Wartość domyślna: 1 – Promocja. Dostępne wartości:
  1. Promocja
  2. Nowość
  3. Najczęściej oglądane
  4. Najczęściej kupowane
  5. Cross-Selling
  6. Towar z gazetki
  7. Towar polecany
  8. Wyprzedaż
  9. Superjakość
  10. Supercena
  11. Najlepiej oceniany
  12. Rekomendacja sprzedawcy
  13. Dostępność–Zapowiedź
  14. Towary sugerowane (sugerowane do sprzedaży z ERP)
  15. Nagroda

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany wielokrotnie na stronie.
Obiekt posiada właściwość productnew.Products, czyli tablicę z listą towarów.
Wskazówka
Nazwa obiektu jest przykładowa.
Tablica productnew.Products posiada z kolei następujące właściwości:
productnew.Products.AskForPrice productnew.Products.Manufacturer
productnew.Products.Availability productnew.Products.MinPrice
productnew.Products.BasicUnitMinQuantity productnew.Products.Name
productnew.Products.Brand productnew.Products.NameNoHtml
productnew.Products.Code productnew.Products.NoDiscount
productnew.Products.DecimalPlacesPrice productnew.Products.PreviousPrice
productnew.Products.DecimalUnit productnew.Products.Price
productnew.Products.DefaultGroup productnew.Products.Rating
productnew.Products.Flags productnew.Products.RatingCount
productnew.Products.GIDNumber productnew.Products.RegularPrice
productnew.Products.HasAttributes productnew.Products.SaleUnit
productnew.Products.HasOtherUnits productnew.Products.Type
productnew.Products.Id productnew.Products.UPC
productnew.Products.Image productnew.Products.UnitPriceRatio
productnew.Products.ImageId productnew.Products.UnitPriceUnit
productnew.Products.Images productnew.Products.Url
productnew.Products.Link productnew.Products.Weight
 

Siatka towarów

Obiekt zwraca listę towarów wg wybranego kryterium źródła danych.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Pokaż towary tylko ze zdjęciem
  • Ilość
  • Typ
  • Wartość
Pokaż towary tylko ze zdjęciem – Towary tylko ze zdjęciem. Wartość domyślna: true. Ilość – Liczba towarów. Wartość minimalna: 1. Wartość maksymalna: 50. Wartość domyślna: 12. Typ – Towary wg źródła. Wartość domyślna: 1 – Wybór ręczny. Dostępne wartości:
  1. Ręczny
  2. Grupa towarowa
  3. Producent
  4. Marka
  5. Ostatnio oglądane
Wartość – W zależności od wartości parametru Typ przyjmuje wartości:
  1. Id towarów oddzielone przecinkiem
  2. Id grupy
  3. Id producenta
  4. Id marki
Wartość domyślna: Pusty ciąg znaków.

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany wielokrotnie na stronie.
Obiekt posiada właściwość Products.
Wskazówka
Nazwa obiektu jest przykładowa.
W jej skład wchodzą następujące właściwości:
productlastviewed.Products.AskForPrice productlastviewed.Products.Manufacturer
productlastviewed.Products.Availability productlastviewed.Products.MinPrice
productlastviewed.Products.BasicUnitMinQuantity productlastviewed.Products.Name
productlastviewed.Products.Brand productlastviewed.Products.NameNoHtml
productlastviewed.Products.Code productlastviewed.Products.NoDiscount
productlastviewed.Products.DecimalPlacesPrice productlastviewed.Products.PreviousPrice
productlastviewed.Products.DecimalUnit productlastviewed.Products.Price
productlastviewed.Products.DefaultGroup productlastviewed.Products.Rating
productlastviewed.Products.Flags productlastviewed.Products.RatingCount
productlastviewed.Products.GIDNumber productlastviewed.Products.RegularPrice
productlastviewed.Products.HasAttributes productlastviewed.Products.SaleUnit
productlastviewed.Products.HasOtherUnits productlastviewed.Products.Type
productlastviewed.Products.Id productlastviewed.Products.UPC
productlastviewed.Products.Image productlastviewed.Products.UnitPriceRatio
productlastviewed.Products.ImageId productlastviewed.Products.UnitPriceUnit
productlastviewed.Products.Images productlastviewed.Products.Url
productlastviewed.Products.Link productlastviewed.Products.Weight
 

Lista towarów

Obiekt zwraca listę towarów dla wybranej kategorii lub kryterium wyszukiwania.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Ilość
  • Sortuj według
  • pageId
  • sort
Ilość – Liczba towarów. Wartość minimalna: 1. Wartość maksymalna: 50. Wartość domyślna: 12. Sortuj według – Domyślne sortowanie listy towarów. Wartość domyślna: Nazwa (A-Z). Dostępne wartości:
  1. Najczęściej kupowane
  2. Najczęściej oglądane
  3. Nazwa (A-Z)
  4. Nazwa (Z-A)
  5. Cena rosnąco
  6. Cena malejąco
  7. Producent (A-Z)
  8. Kod towaru (A-Z)
  9. Kod towaru (Z-A)
  10. Najlepiej ocenianie
  11. Domyślnie
  12. Ostatnio dodane
  13. Ostatnio zmodyfikowane
pageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: pageId. sort – Nazwa parametru w query string odpowiedzialna za sortowanie. Wartość domyślna: sort.

Dostępny na stronach

Obiekt może być dodany tylko na stronach
  • która pełni funkcję strony z listą towarów
  • która pełni funkcję strony ze szczegółami towaru.
Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
productlist.FilteringOptions productlist.Search
productlist.HeaderData productlist.SelectedSorting
productlist.ItemsPerPage productlist.SortingOptions
productlist.PageCount productlist.SortingQueryGET
productlist.PageNo productlist.Supervisor
productlist.PageQueryGET productlist.TotalItems
productlist.Products.[nr produktu]
 

Prezentacja towaru

Obiekt zwraca szczegółowe informacje o wybranym towarze.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Zawężaj do wybranej grupy
Zawężaj do wybranej grupy – Zawęża wyświetlane towary wybranego producenta oraz wybranej marki tylko do tych towarów, które należą do tej samej grupy co przeglądany towar na stronie szczegóły towaru. Wartość domyślna: true.

Dostępny na stronach

Obiekt może być dodany tylko na stronie, która pełni funkcję strony ze szczegółami towaru. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada właściwość Product w której skład wchodzą następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
productdetails.Product.Accessories productdetails.Product.MetaTitle
productdetails.Product.AddedDate productdetails.Product.ModifiedDate
productdetails.Product.Archival productdetails.Product.MoreInfoUrl
productdetails.Product.AskForPrice productdetails.Product.Name
productdetails.Product.Attachments productdetails.Product.Name1
productdetails.Product.Attributes productdetails.Product.NameNoHtml
productdetails.Product.AttributesEditable productdetails.Product.NetWeight
productdetails.Product.AttributesList productdetails.Product.NoDiscount
productdetails.Product.AttributesPolyvalent productdetails.Product.OrdersCount
productdetails.Product.Availability productdetails.Product.ParentId
productdetails.Product.BasicUnit productdetails.Product.Points
productdetails.Product.BasicUnitMinQuantity productdetails.Product.PointsPrice
productdetails.Product.BasicUnitRatio productdetails.Product.PreviousPrice
productdetails.Product.Batch productdetails.Product.Price
productdetails.Product.Brand productdetails.Product.Rating
productdetails.Product.BrandProducts productdetails.Product.RatingCount
productdetails.Product.CN productdetails.Product.RegularPrice
productdetails.Product.Clip productdetails.Product.Related
productdetails.Product.Code productdetails.Product.RelatedProducts
productdetails.Product.ControlStock productdetails.Product.SaleUnit
productdetails.Product.DecimalPlacesPrice productdetails.Product.Sets
productdetails.Product.DecimalUnit productdetails.Product.ShortDescription
productdetails.Product.DefaultGroup productdetails.Product.Sold
productdetails.Product.DeliveryCostType productdetails.Product
productdetails.Product.Dimensions productdetails.Product.StockLevel
productdetails.Product.Flags productdetails.Product.SubtotalMinPrice
productdetails.Product.GIDNumber productdetails.Product.SubtotalPreviousPrice
productdetails.Product.HasAttributes productdetails.Product.SubtotalPrice
productdetails.Product.HasDefaultUnit productdetails.Product.SubtotalRegularPrice
productdetails.Product.HasOtherUnits productdetails.Product.Supervisor
productdetails.Product.Hits productdetails.Product.Supplies
productdetails.Product.Id productdetails.Product.Symbol
productdetails.Product.Image productdetails.Product.TotalMinPrice
productdetails.Product.ImageId productdetails.Product.TotalPreviousPrice
productdetails.Product.Images productdetails.Product.TotalPrice
productdetails.Product.Link productdetails.Product.TotalRegularPrice
productdetails.Product.Manufacturer productdetails.Product.Type
productdetails.Product.ManufacturerCode productdetails.Product.UPC
productdetails.Product.ManufacturerProducts productdetails.Product.UnitPriceRatio
productdetails.Product.MinPrice productdetails.Product.UnitPriceUnit
productdetails.Product.MetaDescription productdetails.Product.Units
productdetails.Product.MetaKeywords productdetails.Product.Url
productdetails.Product.VAT productdetails.Product.WasteMgmtCost
productdetails.Product.Weight productdetails.Product.YouTubeVideos
 

Nagłówek

Obiekt zwraca menu kategorii i stron.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Poziom rozwinięcia
  • Ilość poziomów
  • Typ
Poziom rozwinięcia – Głębokość do jakiej maksymalnie może rozwinąć się menu. Wartość minimalna: 0 Wartość maksymalna: 10 Wartość domyślna: 0. Ilość poziomów – ilość poziomów na temat których obiekt przetrzymuje dane. Typ – Grupy wg wyboru. Wartość domyślna: Grupy najwyższego poziomu. Dostępne wartości:
  1. Grupy najwyższego poziomu
  2. Podgrupy począwszy od
  3. Wybrane
  4. Zawężaj menu do wybranej grupy

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada właściwość Nodes w której skład wchodzą następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
header.Nodes.Count header.Nodes.ImageId
header.Nodes.Groups header.Nodes.Name
header.Nodes.Heading header.Nodes.Product
header.Nodes.Id header.Nodes.Url
header.Nodes.Image
 

Menu producentów i marek

Obiekt zwraca listę producentów oraz marek.
Konfiguracja

Konfiguracja

Obiekt nie posiada opcji konfiguracyjnych.

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
manufacturersbrands.Brands manufacturersbrands.Manufacturers
 

Tekst

Obiekt zwraca tekst wpisany w panelu administracyjnym.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • Język
  • Treść
Język – Dla jakiego języka będzie wyświetlany wpisany poniżej tekst. Treść – Treść wyświetlana przez obiekt dla danego języka.

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany wielokrotnie na stronie.
Obiekt posiada tylko jedną właściwość:
Wskazówka
Nazwa obiektu jest przykładowa.
text.Content
 

Opinie

Obiekt zwraca oceny, opinie dla wybranego towaru.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • pageId
pageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę(paginacja). Wartość domyślna: rvPageId.

Dostępny na stronach

Obiekt może być dodany tylko na stronie, która pełni funkcję strony ze szczegółami towaru. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
productuserreviews.ItemsPerPage productuserreviews.PageQueryGET
productuserreviews.PageCount productuserreviews.Reviews
productuserreviews.PageNo productuserreviews.TotalItems
 

Porównywarka towarów

Obiekt zwraca listę towarów dodanych do porównania.
Konfiguracja

Konfiguracja

Obiekt nie posiada opcji konfiguracyjnych.

Dostępny na stronach

Obiekt może być dodany tylko na stronie, która pełni funkcję strony z porównywarką towarów. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt ten przetrzymuje informacje na temat porównywanych produktów.
Wskazówka
Nazwa obiektu (comparison-tool) jest przykładowa.
comparison-tool.Attributes comparison-tool.Products
 

Profil klienta

Obiekt zwraca szczegółowe informacje o zalogowanym kliencie.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • orderPageId
  • orderId
  • reviewPageId
  • reviewAwaitingPageId
  • historyPageId
  • complaintsPageId
  • complaintId
  • loyaltyPageId
orderPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: ordPageId. orderId – Nazwa parametru w query string odpowiedzialna za wyświetlanie szczegółów zamówienia. Wartość domyślna: orderId. reviewPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: rvPageId. reviewAwaitingPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: rvAwPageId. historyPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: hsPageId. complaintsPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna:complaintsPageId. complaintId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę. Wartość domyślna: complaintId. loyaltyPageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: ltyPageId.

Dostępny na stronach

Obiekt może być dodany tylko na stronie, która pełni funkcję strony z profilem klienta. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt ten przetrzymuje następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
customerprofile.Complaint customerprofile.LoyaltyHistory
customerprofile.ComplaintQueryGET customerprofile.Newsletter
customerprofile.ComplaintsActive customerprofile.Offer
customerprofile.ComplaintsExecuted customerprofile.OfferDetPageQueryGET
customerprofile.Consents customerprofile.OfferQueryGET
customerprofile.DiscountDetPageQueryGET customerprofile.Offers
customerprofile.DiscountERPDetails customerprofile.OffersPageQueryGet
customerprofile.DiscountQueryGET customerprofile.Order
customerprofile.Discounts customerprofile.OrderDetPageQueryGET
customerprofile.DiscountsERP customerprofile.OrderQueryGET
customerprofile.DiscountsEshop customerprofile.Orders
customerprofile.DiscountsPageQueryGet customerprofile.OrdersActive
customerprofile.Employees customerprofile.OrdersExecuted
customerprofile.History customerprofile.ProductsToRate
customerprofile.Inquiries customerprofile.Reviews
customerprofile.InquiriesPageQueryGet customerprofile.WishList
customerprofile.LinkedAccounts
 

Blog

Obiekt zwraca wpisy z bloga.
Konfiguracja

Konfiguracja

Dostępne opcje konfiguracyjne:
  • pageId
pageId – Nazwa parametru w query string odpowiedzialna za wyświetlaną stronę (paginacja). Wartość domyślna: pageId.

Dostępny na stronach

Obiekt może być dodany na wszystkich dostępnych stronach w sklepie. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt posiada następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
blog.LatestPosts blog.PostList
blog.PostDetails
Uwaga
Obiekt zwraca właściwość LatestPosts zawsze. Aby móc skorzystać z tej właściwości, należy ją obsłużyć w ramach własnej modyfikacji szablonu. Właściwość PostList aktywuje się na stronie, która pełni funkcję listy wpisów na blogu, na pozostałych stronach właściwość zwraca null. Właściwość PostDetails aktywuje się na stronie, która pełni funkcję szczegółów wpisu na blogu, na pozostałych stronach właściwość zwraca null.
 

Zamówienie

Obiekt zwraca dane o zamówieniu oraz informacje niezbędne do złożenia zamówienia (np. sposoby dostawy i płatności).
Konfiguracja

Konfiguracja

Obiekt nie posiada opcji konfiguracyjnych.

Dostępny na stronach

Obiekt może być dodany tylko na stronie, która pełni funkcję strony gdzie składa się zamówienie. Obiekt może być dodany tylko jednokrotnie na stronie.
Obiekt ten przetrzymuje następujące właściwości:
Wskazówka
Nazwa obiektu jest przykładowa.
cart.Attachments cart.PlacedOrder
cart.Attributes cart.Points
cart.AuthenticationRequired cart.PointsForValue
cart.CartEmpty cart.PointsPaid
cart.Changes cart.PointsPrice
cart.CollectionPointMapUrl cart.PointsPriceTotalValue
cart.CompanyOnly cart.PreOrder
cart.Coupon cart.Products
cart.Currency cart.ProductsMinimumTotalValue
cart.CurrencyExt cart.ProductsSubtotalValue
cart.Customer cart.ProductsSubtotalValueBeforeDiscount
cart.DeliveryMethods cart.ProductsTotalValue
cart.Demo cart.ProductsTotalValueBeforeDiscount
cart.Discount cart.ProductsValue
cart.EditedOrderId cart.ProductsValueBeforeDiscount
cart.GratisItems cart.SelectedDelivery
cart.NotDeterminedDeliveryCost cart.SelectedDeliveryPaymentChannelKey
cart.NotDeterminedProductsDeliveryCost cart.SelectedDeliveryPaymentId
cart.Note cart.SplitPayment
cart.OSS cart.SubtotalPrices
cart.OrderStep cart.ThirdPartyHTML
cart.OrderTotalValue cart.ThirdPartyScripts
cart.OrderValueDiscounts cart.VATValue
 

Dodatkowe właściwości dla wersji Enterprise

Właściwości obiektów dostępne tylko w sklepach w wersji Enterprise.  

Towary

Właściwości:
  • Batch
  • TotalPreviousPrice
  • SubtotalPreviousPrice
  • TotalPrice
  • SubtotalPrice
  • TotalRegularPrice
  • SubtotalRegularPrice
 

Zamówienie, koszyk

Właściwości:
  • ProductsSubtotalValue
  • ProductsTotalValueBeforeDiscount
  • ProductsSubtotalValueBeforeDiscount
  • SubtotalPrices
  • ProductsTotalValue
 

Reklamacje, zwroty

Właściwości:
  • SubtotalPrice
  • TotalPrice
  • SubtotalPrices
  • TotalValue
  • SubtotalValue
 

Kontrahenci

Właściwości:
  • VATEU
 

Config

Właściwości:
  • VATEU
 

Config.Currencies

Dla wersji Enterpise zwraca listę walut przesłanych z systemu ERP. Dla pozostałych wersji zwraca domyślną walutę. Obiekt zwraca szczegółowe informacje o wybranym towarze.  

 

Opis używanych obiektów lokalnych:

 
productnew.Products.AskForPrice
Zawiera informacje czy włączono opcję zapytaj o cenę.
 
 
productnew.Products.Availability
Zawiera informacje na temat dostępności.Właściwości:
  • Date – służy do wyświetlenia informacji na temat ustawionej daty dla danego towaru (np. przy zapowiedzi produktu),
  • ImageUrl – url obrazu,
  • Status – Id statusu dostępności,
  • Text – opis tekstowy dla danego statusu,
  • Type – wyświetla typ dostępności,
 
 
productnew.Products.BasicUnitMinQuantity
Informacja o minimalnej ilości zakupu w jednostce podstawowej towaru.
 
 
productnew.Products.Brand
Informacje na temat marki.Właściwości:
  • Heading – tytuł,
  • Id – numer Id,
  • Image - informacja o obrazie, zawiera:
    • ExternalUrl - link zewnętrzny do obrazu,
    • Id - numer id obrazu,
    • Link - link do obrazu,
  • ImageId – id obrazu,
  • Name – nazwa,
  • Url – adres Url,
  • UrlWithManufacturer – adres do produktów danego producenta,
 
 
productnew.Products.Code
Zawiera informacje o kodzie produktu.
 
 
productnew.Products.DecimalPlacesPrice
Liczba miejsc po przecinku do wyświetlania ceny.
 
 
productnew.Products.DecimalUnit
Informacja czy jednostki mogą być liczbami niecałkowitymi.
 
 
productnew.Products.DefaultGroup
Informacja o grupie domyślnej.
 
 
productnew.Products.Flags
Zwraca informacje o flagach (np. nowość, wyprzedaż).
 
 
productnew.Products.GIDNumber
Numer Id produktu z bazy systemu ERP.
 
 
productnew.Products.HasAttributes
Informacja czy produkt posiada atrybuty.
 
 
productnew.Products.HasOtherUnits
Informacja czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt).
 
 
productnew.Products.Id
Numer Id produktu.
 
 
productnew.Products.Image
Informacja o zdjęciu produktu.Właściwości:
  • ExternalUrl - link zewnętrzny do zdjęcia,
  • Id - numer Id zdjęcia,
  • Link - link do zdjęcia,
 
 
productnew.Products.ImageId
Numer Id obrazu produktu.
 
 
productnew.Products.Images
Informacje o zdjęciach produktu. Dla każdego ze zdjęć posiada te same pola, co właściwość productnew.Products.Image.
 
 
productnew.Products.Link
Link do produktu.
 
 
productnew.Products.Manufacturer
W skład tej właściwości wchodzą Name, Id, Heading, Image, ImageId, Url, Website.
 
 
productnew.Products.MinPrice
Cena minimalna z ostatnich 30 dni.
 
 
productnew.Products.Name
Nazwa produktu.
 
 
productnew.Products.NameNoHtml
Nazwa produktu bez znaczników HTML.
 
 
productnew.Products.NoDiscount
Informacja czy produkt może być objęty zniżką.
 
 
productnew.Products.PreviousPrice
Poprzednia cena produktu.
 
 
productnew.Products.Price
Cena produktu.
 
 
productnew.Products.Rating
Średnia ocena produktu.
 
 
productnew.Products.RatingCount
Ilość ocen produktu.
 
 
productnew.Products.RegularPrice
Cena normalna produktu.
 
 
productnew.Products.SaleUnit
Jednostka sprzedażowa (np. para).
 
 
productnew.Products.Type
Typ towaru.
 
 
productnew.Products.UPC
Kod EAN z ERP.
 
 
productnew.Products.UnitPriceRatio
Przelicznik ceny za jednostkę miary.
 
 
productnew.Products.UnitPriceUnit
Możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej.
 
 
productnew.Products.Url
Adres URL produktu.
 
 
productnew.Products.Weight
Waga produktu.
 
 
productlastviewed.Products.AskForPrice
Informacja czy włączono opcję zapytaj o cenę.
 
 
productlastviewed.Products.Availability
Informacje na temat dostępności.Właściwości:
  • Date - zwraca datę kiedy produkt będzie dostępny (np. jeżeli produkt jest zapowiedzią),
  • ImageUrl - adres url dla obrazka,
  • Status - status,
  • Text - wartość tekstowa (np. "od ręki"),
  • Type - typ,
 
 
productlastviewed.Products.BasicUnitMinQuantity
Informacja o minimalnej ilości zakupu w jednostce podstawowej towaru.
 
 
productlastviewed.Products.Brand
Informacje o marce produktu.Właściwości:
  • Heading - tytuł,
  • Id - numer Id,
  • Image - informacja o obrazie, zawiera:
    • ExternalUrl - link zewnętrzny do obrazu,
    • Id - numer id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Name - nazwa,
  • Url - adres url,
  • UrlWithManufacturer - adres URL do strony producenta,
 
 
productlastviewed.Products.Code
Zwraca kod produktu.
 
 
productlastviewed.Products.DecimalPlacesPrice
Liczba miejsc po przecinku do wyświetlania ceny.
 
 
productlastviewed.Products.DecimalUnit
Informacja czy jednostki mogą być liczbami niecałkowitymi.
 
 
productlastviewed.Products.DefaultGroup
Informacja o domyślnej grupie.
 
 
productlastviewed.Products.Flags
Zwraca flagi dla produktów (np. promocja, nowość itd.).
 
 
productlastviewed.Products.GIDNumber
Numer Id produktu z bazy systemu ERP.
 
 
productlastviewed.Products.HasAttributes
Informacja czy produkt posiada atrybuty.
 
 
productlastviewed.Products.HasOtherUnits
Informacja czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt).
 
 
productlastviewed.Products.Id
Id produktu.
 
 
productlastviewed.Products.Image
Informacja o zdjęciu produktu.Właściwości:
  • ExternalUrl - link zewnętrzny do zdjęcia,
  • Id - numer Id zdjęcia,
  • Link - link do zdjęcia,
 
 
productlastviewed.Products.ImageId
Zwraca Id obrazka.
 
 
productlastviewed.Products.Images
Informacje o zdjęciach produktu. Dla każdego ze zdjęć posiada te same pola, co właściwość productlastviewed.Products.Image.
 
 
productlastviewed.Products.Link
Link do strony produktu.
 
 
productlastviewed.Products.Manufacturer
Informacje na temat producenta.Właściwości:
  • Heading - tytuł,
  • Id - id,
  • Image - informacja o obrazie, zawiera:
    • ExternalUrl - link zewnętrzny do obrazu,
    • Id - numer id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Name - nazwa,
  • Url - adres url,
  • Website - adres strony
 
 
productlastviewed.Products.MinPrice
Cena minimalna produktu z ostatnich 30 dni.
 
 
productlastviewed.Products.Name
Nazwa produktu.
 
 
productlastviewed.Products.NameNoHtml
Nazwa produktu (pozbawiona znaczników HTML).
 
 
productlastviewed.Products.NoDiscount
Informacja czy produkt może być objęty zniżką.
 
 
productlastviewed.Products.PreviousPrice
Poprzednia cena produktu.
 
 
productlastviewed.Products.Price
Cena produktu.
 
 
productlastviewed.Products.Rating
Średnia ocena produktu.
 
 
productlastviewed.Products.RatingCount
Liczba wszystkich ocen produktu.
 
 
productlastviewed.Products.RegularPrice
Cena normalna produktu.
 
 
productlastviewed.Products.SaleUnit
Jednostka sprzedażowa (np. para).
 
 
productlastviewed.Products.Type
Typ towaru.
 
 
productlastviewed.Products.UPC
Kod EAN z ERP.
 
 
productlastviewed.Products.UnitPriceRatio
Przelicznik ceny za jednostke miary.
 
 
productlastviewed.Products.UnitPriceUnit
Możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej.
 
 
productlastviewed.Products.Url
Adres strony produktu (dokładniejszy niż w przypadku Link).
 
 
productlastviewed.Products.Weight
Waga produktu.
 
 
productlist.FilteringOptions
Właściwość odpowiada za opcje filtracji przedmiotów.Właściwości:
  • Filters - odpowiada za opcje filtracji, zawiera:
    • Field - nazwa dla danego filtru,
    • Heading - tytuł danego filtru (np. Producent),
    • Values - wartości dla konkretnych filtrów, zawiera:
      • Count - liczba przedmiotów spełniających dany warunek,
      • Field - nazwa (zazwyczaj tożsama z polem field elementu nadrzędnego),
      • Selected - czy opcja została wybrana,
      • Text - nazwa danego pola,
      • TotalCount - całkowita liczba przedmiotów tego typu na liście,
      • Value - wartość pola,
      Wskazówka
      Aby dostać się do powyższych właściwości productlist.FilteringOptions.Filters.[numer].Nazwa należy użyć nr produktu w tablicy. Przykładowo, aby dostać się do pierwszego przedmiotu w nawiasie kwadratowym należy wpisać właściwą cyfrę. Należy pamiętać, że tablice numerowane są od 0.
  • Groups - odpowiada za opcje filtracji po kategoriach, zawiera:
    • Group - opis kategorii, zawiera:
      • Heading - alternatywna nazwa kategorii,
      • Id - id kategorii,
      • Image - informacje o obrazie (zawiera ExternalUrl, Id, Link),
      • ImageId - id obrazka,
      • Name - nazwa kategorii,
      • Url - url kategorii,
    • Nodes - lista podkategorii, zawiera:
      • Count - ilość towarów,
      • Group - opis kategorii (zawiera Heading, Id, Image, ImageId, Name, Url),
    • Parent - opis kategorii nadrzędnej (zawiera Heading, Id, Image, ImageId, Name, Url),
    Wskazówka
    Aby dostać się do powyższych właściwości productlist.FilteringOptions.Groups.[numer].Nazwa należy użyć nr produktu w tablicy. Przykładowo, aby dostać się do pierwszego przedmiotu w nawiasie kwadratowym należy wpisać właściwą cyfrę. Należy pamiętać, że tablice numerowane są od 0.
  • MaxPrice - najwyższa cena produktów z danej listy,
  • MinPrice - najniższa cena produktów z danej listy,
  • PriceFrom - cena od (wpisana przez użytkownika),
  • PriceTo - cena do (wpisana przez użytkownika),
  • Results - czy są wyniki filtrowania, czy zwykła lista,
  • SearchGroups - grupy na podstawie filtrowania,
 
 
productlist.HeaderData
Informacje na temat nagłówka danej kategorii (np. jej tytuł, opis).Właściwości:
  • Description - opis,
  • Heading - tytuł,
  • Image - informacja o obrazie, zawiera:
    • ExternalUrl - link zewnętrzny do obrazu,
    • Id - numer Id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • MetaDescription - opis meta,
  • MetaKeywords - meta słowa kluczowe,
  • MetaTitle - tytuł meta,
  • ShortDescription - krótki opis,
 
 
productlist.ItemsPerPage
Określa liczbę produktów na stronie.
 
 
productlist.PageCount
Liczba stron.
 
 
productlist.PageNo
Numer strony.
 
 
productlist.PageQueryGET
Zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId).
 
 
productlist.Products.[nr produktu]
Informacje o produkcie.Właściwości:
  • AskForPrice - czy włączono opcję zapytaj o cenę,
  • AttributesList - lista atrybutów, zawiera:
    • Attributes - atrbuty, zawiera:
      • Id - numer id,
      • Format - liczbę określającą format,
      • Name - nazwa,
      • Values - wartości, zawiera:
        • Object - obiekt,
        • Value - wartość,
        • ValueId - numer id wartości,
    • AttributesEditable - atrybuty edytowalne,
    • AttributesPolyvalent - atrybuty wielowartościowe,
    • Clip - informuje, czy towar jest fantomem,
  • Availability – dostępność, zawiera:
    • Date - służy do wyświetlenia informacji na temat ustawionej daty dla danego towaru (np. przy zapowiedzi produktu),
    • ImageUrl - adres obrazu
    • Status - Id statusu dostępności,
    • Text - opis tekstowy dla danego statusu,
    • Type - wyświetla typ dostępności,
  • BasicUnitMinQuantity - informacja o minimalnej ilości zakupu w jednostce podstawowej towaru,
  • Brand - informacje na temat marki, zawiera:
    • Heading - tytuł,
    • Id - numer Id,
    • Image - informacje o obrazie (zawiera ExternalUrl, Id, Link),
    • ImageId - id obrazu,
    • Name - nazwa,
    • Url - adres Url,
    • UrlWithManufacturer - adres do produktów danego producenta,
  • Code - kod,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - czy jednostki mogą być liczbami niecałkowitymi,
  • DefaultGroup - domyślna grupa,
  • Flags - zwraca flagi dla produktu (np. promocja, nowość itd.),
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • HasAttributes - czy posiada atrybuty,
  • HasOtherUnits - czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt),
  • Id - id,
  • ImageId - id obrazu,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - link zewnętrzny,
    • Id - id obrazu,
    • Link - link do obrazu,
  • Images - informacje o obrazach, zawiera:
    • ExternalUrl - link zewnętrzny,
    • Id - id obrazu,
    • Link - link do obrazu,
  • Link - link,
  • Manufacturer – informacje na temat producenta, zawiera:
    • Heading - tytuł,
    • Id - numer Id,
    • Image - informacje o obrazie (zawiera ExternalUrl, Id, Link),
    • ImageId - id obrazu,
    • Name - nazwa,
    • Url - adres url,
    • Website - adres strony,
  • MinPrice - cena minimalna z ostatnich 30 dni,
  • Name - nazwa,
  • NameNoHtml - nazwa bez znacznikow HTML,
  • NoDiscount - informacja czy produkt może być objęty zniżką,
  • PreviousPrice - poprzednia cena,
  • Price - cena,
  • Rating - średnia ocena,
  • RatingCount - liczba wszystkich ocen,
  • RegularPrice - cena normalna,
  • SaleUnit - jednostka sprzedażowa (np. para),
  • ShortDescription - krótki opis,
  • StockLevel - informacja o stanie magazynowym, zawiera:
    • Control - informuje czy kontrola jest włączona,
    • ImageUrl - adres grafiki obrazującej stan,
    • QuantityControl - informuje czy kontrola ilości jest włączona,
    • Text - tekst informujący o stanie magazynowym,
    • Type - wyświetla typ dostepności stanu magazynowego,
    • Value - dostępna ilość produktu,
  • Type - typ towaru,
  • UPC - kod EAN z ERP,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej,
  • Url - adres Url,
  • Weight - waga
Wskazówka
Aby dostać się do powyższych właściwości productlist.Products[nr produktu].Nazwa należy użyć nr produktu w tablicy. Przykładowo, aby dostać się do pierwszego przedmiotu w nawiasie kwadratowym należy wpisać właściwą cyfrę. Należy pamiętać, że tablice numerowane są od 0.
 
 
productlist.Search
Zwraca informacje na temat wyniku wyszukiwania.Właściwości:
  • Brand - marka,
  • Group - zwraca string z nazwą kategorii,
  • GroupId - Id grupy,
  • Manufacturer - producent,
  • PriceFrom - cena od,
  • PriceTo - cena do,
  • Search - wartość pola wpisanego w wyszukiwarkę,
  • SearchAll - wartość pola wpisanego w wyszukiwarkę,
  • SearchAny - wyszukiwanie którejkolwiek z fraz,
  • SearchId - numer id wyszukiwania,
  • SearchWild - wyszukiwanie losowe (odpowiednik ,,szczęśliwego trafu"),
  • TotalItems - liczba przedmiotów spełniająca podane kryterium,
  • Url - adres Url,
 
 
productlist.SelectedSorting
Wybrany sposób sortowania.
 
 
productlist.SortingOptions
Opcje sortowania.Właściwości:
  • Text - wartość tekstowa danej właściwości wyszukiwania,
  • Value - wartość,
 
 
productlist.SortingQueryGET
Podobnie jak w przypadku SortingQueryGET zwraca string ustawiony z poziomu Panelu administratora (np. PageId).
 
 
productlist.Supervisor
Opiekun towaru.
 
 
productlist.TotalItems
Łączna liczba przedmiotów.
 
 
productdetails.Product.Accessories
Akcesoria produktu.
 
 
productdetails.Product.AddedDate
Data dodania produktu.
 
 
productdetails.Product.Archival
Informacja, czy produkt jest produktem archiwalnym.
 
 
productdetails.Product.AskForPrice
Informacja czy włączono opcję zapytaj o cenę.
 
 
productdetails.Product.Attachments
Lista załączników dodanych do produktu.
 
 
productdetails.Product.Attributes
Atrybuty produktu.Właściwości:
  • Format - format atrybutu: tekst, liczba, data itp.,
  • Id - Id danej właściwości,
  • Name - nazwa właściwości (np. materiał),
  • Object - właściwy obiekt dla atrbutu, zgodnie z Format,
  • Value - wartość danej właściwości (np. tworzywo sztuczne)
 
 
productdetails.Product.AttributesEditable
Pole edytowalne (przykładowo treść graweru na biżuterii).
 
 
productdetails.Product.AttributesList
Lista atrybutów produktu.
 
 
productdetails.Product.AttributesPolyvalent
W skład tej właściwości wchodzą: Format, Id, Name oraz Values (Values może posiadać Object, ValueId oraz Value).
 
 
productdetails.Product.Availability
Informacja o dostępności produktu.Właściwości:
  • Date - ustawienie daty kiedy towar będzie dostępny,
  • ImageUrl - adres URL obrazu,
  • Status - status,
  • Text - opis tekstowy,
  • Type - typ,
 
 
productdetails.Product.BasicUnit
Domyślna jednostka sprzedaży (np. sztuka).
 
 
productdetails.Product.BasicUnitMinQuantity
Minimalna ilość towaru do zakupu w jednostce podstawowej.
 
 
productdetails.Product.BasicUnitRatio
Przelicznik jednostki produktu.
 
 
productdetails.Product.Batch
Cechy towaru, (zwraca true jeżeli towar posiada konfigurację jednak nie jest ona odrębnym towarem).
 
 
productdetails.Product.Brand
Marka produktu.Właściwości:
  • Heading - nazwa,
  • Id - numer Id,
  • Image - informacje o obrazie (zawiera ExternalUrl, Id, Link),
  • ImageId - id obrazu,
  • Name - nazwa,
  • Url - adres Url,
  • UrlWithManufacturer - adres url Producenta,
 
 
productdetails.Product.BrandProducts
Towary danej marki.Właściwości:
  • AskForPrice - czy włączono opcję zapytaj o cenę,
  • Availability - dostępność. W skład tej właściwości wchodzą: Text, Type, Status, Date, ImageUrl
  • BasicUnitMinQuantity - minimalna ilość towaru do zakupu w jednostce podstawowej,
  • Brand - marka. W skład tej właściwości wchodzą: Name, Id, Heading, Image, ImageId, Url, UrlWithManufacturer
  • Code - kod produktu,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - określa, czy jednostki mogą być liczbami niecałkowitymi,
  • DefaultGroup - grupa domyślna,
  • Flags - zwraca flagi (np. nowość, wyprzedaż),
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • HasAttributes - czy posiada atrybuty,
  • HasOtherUnits - czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt),
  • Id - numer Id,
  • Image - zawiera informacje o obrazie. W skład tej właściwości wchodzą:
    • ExternalUrl - link zewnętrzny,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Images - zawiera informacje o zdjęciach. W skład tej właściwości wchodzą:
    • ExternalUrl - link zewnętrzny,
    • Id - id zdjęcia,
    • Link - link do zdjęcia,
  • Link - link,
  • Manufacturer - producent. W skład tej właściwości wchodzą Name, Id, Heading, Image, ImageId, Url, Website,
  • MinPrice - cena minimalna z ostatnich 30 dni,
  • Name - nazwa,
  • NameNoHtml - nazwa bez znaczników HTML,
  • NoDiscount - informacja czy produkt może być objęty zniżką,
  • PreviousPrice - poprzednia cena,
  • Price - cena,
  • Rating - średnia ocen,
  • RatingCount - liczba ocen,
  • RegularPrice - cena normalna,
  • SaleUnit - jednostka sprzedażowa,
  • Type - typ,
  • UPC - kod EAN z ERP,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej,
  • Url - adres URL,
  • Weight - waga,
 
 
productdetails.Product.CN
 
 
productdetails.Product.Clip
Właściwość informująca, czy jest to fantom.
 
 
productdetails.Product.Code
Kod produktu.
 
 
productdetails.Product.ControlStock
Pokazuje czy stany magazynowe zostały włączone.
 
 
productdetails.Product.DecimalPlacesPrice
Liczba miejsc po przecinku do wyświetlania ceny.
 
 
productdetails.Product.DecimalUnit
Informacja czy jednostki mogą być liczbami niecałkowitymi.
 
 
productdetails.Product.DefaultGroup
Informacja czy produkt posiada grupę domyślną.
 
 
productdetails.Product.DeliveryCostType
Typ kosztu dostawy (np. gdy towar jest bardzo duży).
 
 
productdetails.Product.Dimensions
Informuje o wymiarach, zawiera właściwości: Length (długość), Width (szerokość) i Height (wysokość).
 
 
productdetails.Product.Flags
Wyświetla informacje o flagach dla danego produktu (np. promocja, nowość) - zawiera pole text (nazwa, np. Nagroda) oraz type (typ, np. Reward).
 
 
productdetails.Product.GIDNumber
Numer Id produktu z bazy systemu ERP.
 
 
productdetails.Product.HasAttributes
Informacja czy produkt posiada atrybuty.
 
 
productdetails.Product.HasDefaultUnit
Informacja czy produkt posiada domyślną jednostkę.
 
 
productdetails.Product.HasOtherUnits
Informacja czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt).
 
 
productdetails.Product.Hits
Ilość wyświetleń danego towaru.
 
 
productdetails.Product.Id
Numer Id produktu.
 
 
productdetails.Product.Image
Informacje o obrazie produktu.Właściwości:
  • ExternalUrl - zewnetrzny link,
  • Id - id obrazu,
  • Link - link do obrazu,
 
 
productdetails.Product.ImageId
Id obrazu produktu.
 
 
productdetails.Product.Images
Informacje na temat obrazków dołączonych do produktu.Właściwości:
  • Alt - alternatywny tekst, który wyświetli się zamiast obrazka,
  • ExternalUrl - zewnętrzny link,
  • Id - id obrazu,
  • Link - link obrazu,
  • Name - nazwa,
  • NoFollow - czy wykorzystywany jest atrybut nofollow,
  • Title - tytuł,
Wskazówka
Aby dostać się do powyższych właściwości productdetails.Product.Images[numer].Nazwa należy użyć nr zdjęcia w tablicy. Przykładowo, aby dostać się do pierwszego przedmiotu w nawiasie kwadratowym należy wpisać właściwą cyfrę. Należy pamiętać, że tablice numerowane są od 0.
 
 
productdetails.Product.Link
Link do produktu.
 
 
productdetails.Product.Manufacturer
Producent. W skład tej właściwości wchodzą Heading, Id, Image, ImageId, Name, Url, Website.
 
 
productdetails.Product.ManufacturerCode
Kod Producenta.
 
 
productdetails.Product.ManufacturerProducts
Towary danego producenta. Cechy tej właściwości są tożsame z w.w. właściwością BrandProducts.
 
 
productdetails.Product.MinPrice
Najniższa cena towaru lub usługi, jaka obowiązywała w okresie 30 dni przed wprowadzeniem obniżki.
 
 
productdetails.Product.MetaDescription
Opis Meta.
 
 
productdetails.Product.MetaKeywords
Słowa kluczowe Meta.
 
 
productdetails.Product.MetaTitle
Tytuł Meta.
 
 
productdetails.Product.ModifiedDate
Data ostatniej modyfikacji produktu.
 
 
productdetails.Product.MoreInfoUrl
Adres Url z większą ilością informacji.
 
 
productdetails.Product.Name
Nazwa produktu.
 
 
productdetails.Product.Name1
Nazwa produktu.
 
 
productdetails.Product.NameNoHtml
Nazwa produktu bez znaczników HTML.
 
 
productdetails.Product.NetWeight
Waga netto produktu.
 
 
productdetails.Product.NoDiscount
Informacja czy produkt może być objęty zniżką.
 
 
productdetails.Product.OrdersCount
Ilość osób (unikalnych klientów), które zakupiły dany produkt.
 
 
productdetails.Product.ParentId
Numer Id rodzica produktu.
 
 
productdetails.Product.Points
Liczba punktów lojalnościowych, które klient otrzyma za zakup tego towaru.
 
 
productdetails.Product.PointsPrice
Koszt towaru podany w punktach lojalnościowych.
 
 
productdetails.Product.PreviousPrice
Poprzednia cena produktu.
 
 
productdetails.Product.Price
Cena produktu.
 
 
productdetails.Product.Rating
Średnia ocen produktu.
 
 
productdetails.Product.RatingCount
Ilość ocen produktu.
 
 
productdetails.Product.RegularPrice
Cena standardowa produktu.
 
 
productdetails.Product.Related
Wyświetla produkty powiązane z obecnie oglądanym.Właściwości:
  • AskForPrice - czy włączono opcję zapytaj o cenę,
  • Availability - w skład tej właściwości wchodzą: Text, Type, Status, Date, ImageUrl
  • BasicUnitMinQuantity - minimalna ilość towaru do zakupu w jednostce podstawowej,
  • Brand - marka, w skład tej właściwości wchodzą: Name, Id, Heading, ImageId, Url, UrlWithManufacturer
  • Code - kod produktu,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - czy jednostki mogą być liczbami niecałkowitymi,
  • DefaultGroup - grupa domyślna,
  • Flags - zwraca flagi (np. nowość, wyprzedaż),
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • HasAttributes - czy posiada atrybuty,
  • HasOtherUnits - czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt),
  • Id - numer Id,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - zewnetrzny link,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Images - obrazy, zawiera właściwości ExternalUrl, Id oraz Link,
  • Link - link,
  • Manufacturer - w skład tej właściwości wchodzą Name, Id, Heading, ImageId, Url, Website,
  • MinPrice - cena minimalna z ostatnich 30 dni,
  • Name - nazwa,
  • NameNoHtml - nazwa bez znaczników HTML,
  • NoDiscount - informacja czy produkt może być objęty zniżką,
  • PreviousPrice - poprzednia cena,
  • Price - cena,
  • Rating - średnia ocen,
  • RatingCount - liczba ocen,
  • RegularPrice - cena normalna,
  • SaleUnit - jednostka sprzedażowa,
  • Type - typ,
  • UPC - kod EAN z ERP,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej,
  • Url - adres Url,
  • Weight - waga
 
 
productdetails.Product.RelatedProducts
Wyświetla inne produkty powiązane z obecnie oglądanym (np. akcesoria do danego produktu).Właściwości:
  • AIProductsRecommendations - towary podobne do przeglądanego, rekomendowane przez dodatek Sztucznej inteligencji (AI),
  • Accessories - akcesoria do danego produktu,
  • Crossselling - produkty powiązane z przeglądanym,
  • Custom - dodatkowy typ ustawiany w systemie ERP,
  • Substitutes - produkty zastępcze do przeglądanego produktu,
  • Suggested - produkty sugerowane.
Wskazówka
Wyżej wymienione właściwości posiadają:
  • AskForPrice - czy włączono opcję zapytaj o cenę,
  • Availability - w skład tej właściwości wchodzą: Text, Type, Status, Date, ImageUrl
  • BasicUnitMinQuantity - minimalna ilość towaru do zakupu w jednostce podstawowej,
  • Brand - marka, w skład tej właściwości wchodzą: Name, Id, Heading, ImageId, Url, UrlWithManufacturer
  • Code - kod produktu,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - czy jednostki mogą być liczbami niecałkowitymi,
  • DefaultGroup - grupa domyślna,
  • Flags - zwraca flagi (np. nowość, wyprzedaż),
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • HasAttributes - czy posiada atrybuty,
  • HasOtherUnits - czy przedmiot ma inne jednostki sprzedażowe (np. para, pojedynczy produkt),
  • Id - numer Id,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - zewnetrzny link,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Images - obrazy, zawiera właściwości ExternalUrl, Id oraz Link,
  • Link - link,
  • Manufacturer - w skład tej właściwości wchodzą Name, Id, Heading, ImageId, Url, Website,
  • MinPrice - cena minimalna z ostatnich 30 dni,
  • Name - nazwa,
  • NameNoHtml - nazwa bez znaczników HTML,
  • NoDiscount - informacja czy produkt może być objęty zniżką,
  • PreviousPrice - poprzednia cena,
  • Price - cena,
  • Rating - średnia ocen,
  • RatingCount - liczba ocen,
  • RegularPrice - cena normalna,
  • SaleUnit - jednostka sprzedażowa,
  • Type - typ,
  • UPC - kod EAN z ERP,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej,
  • Url - adres Url,
  • Weight - waga
 
 
productdetails.Product.SaleUnit
Jednostka sprzedażowa produktu.
 
 
productdetails.Product.Sets
Informacje o zestawach.Właściwości:
  • PreviousPrice - wcześniejsza cena,
  • Price - cena,
  • Products - lista produktów wchodzących w skład zestawu,
  • SetId - id zestawu,
  • SetName - nazwa zestawu,
 
 
productdetails.Product.ShortDescription
Krótki opis produktu.
 
 
productdetails.Product.Sold
Ilość sprzedanych sztuk towaru.
 
 
productdetails.Product.SplitPayment
Podział płatności.
 
 
productdetails.Product.StockLevel
Stany magazynowe produktu.Właściwości:
  • Control - czy włączone są stany magazynowe,
  • ImageUrl - adres URL obrazu,
  • QuantityControl - kontrola ilości towaru,
  • Text - opis dla stanu,
  • Type - typ,
  • Value - wartość,
 
 
productdetails.Product.SubtotalMinPrice
Najniższa cena netto towaru lub usługi, jaka obowiązywała w okresie 30 dni przed wprowadzeniem obniżki (dotyczy sklepów Enterprise i B2B).
 
 
productdetails.Product.SubtotalPreviousPrice
Cena bez VAT produktu przed obniżką.
 
 
productdetails.Product.SubtotalPrice
Cena produktu bez VAT.
 
 
productdetails.Product.SubtotalRegularPrice
Cena produktu netto.
 
 
productdetails.Product.Supervisor
Opiekun produktu.
 
 
productdetails.Product.Supplies
Właściwości fantoma.Właściwości:
  • AttributeNames - zawiera nazwy poszczególnych fantomów (tj. opcji danego towaru, takich jak np. kolor), w skład tej właściwości wchodzi Id oraz Name (nazwa danej opcji)
  • Key - lista Id kolejnych właściwości prowadząca do opcji która jest nadrzędna
  • Supplies - informacje na temat opcji, zawiera:
    • Format - format atrybutu: tekst, liczba data itp.,
    • Object - obiekt właściwy dla atrbutu, zgodny z Format,
    • Supplies - właściwości fantoma - analogicznie właściwości jak w obecnie opisywanej właściwości Supplies,
    • Value - wartość danej właściwości towaru (np. rozmiar "M"/"L"),
    • ValueId - Id wartości,
 
 
productdetails.Product.Symbol
Symbol (w formie stringa).
 
 
productdetails.Product.TotalMinPrice
Najniższa cena brutto towaru lub usługi, jaka obowiązywała w okresie 30 dni przed wprowadzeniem obniżki (dotyczy sklepów Enterprise i B2B).
 
 
productdetails.Product.TotalPreviousPrice
Poprzednia cena towaru brutto.
 
 
productdetails.Product.TotalPrice
Cena z podatkiem VAT.
 
 
productdetails.Product.TotalRegularPrice
Cena produktu brutto.
 
 
productdetails.Product.Type
Typ towaru.
 
 
productdetails.Product.UPC
Zwraca kod EAN z ERP.
 
 
productdetails.Product.UnitPriceRatio
Przelicznik ceny za jednostkę miary.
 
 
productdetails.Product.UnitPriceUnit
Możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość to null, to nie wyświetlamy ceny jednostkowej.
 
 
productdetails.Product.Units
Jednostka sprzedażowa produktu.Właściwości:
  • Default - czy jest to wartość domyślna,
  • Dimensions - wymiary, zawiera Length (długość), Width (szerokość), Height (wysokość),
  • Id - Id danej jednostki,
  • Name - nazwa jednostki (np. para),
  • Ratio - przelicznik ceny przy zmianie jednostki,
 
 
productdetails.Product.Url
Adres Url produktu.
 
 
productdetails.Product.VAT
Stawka VAT.
 
 
productdetails.Product.WasteMgmtCost
Koszt gospodarowania odpadami.
 
 
productdetails.Product.Weight
Waga produktu.
 
 
productdetails.Product.YouTubeVideos
Załączone pliki video Youtube.
 
 
header.Nodes.Count
Liczba przedmiotów dostępna w danej kategorii menu.
 
 
header.Nodes.Groups
Jeżeli zawiera podmenu, to wyświetla pola wymienione w tym punkcie (Count, Heading, Id, Image, ImageId, Name, Nodes, Url oraz dodatkowe pole HasChildren)
 
 
header.Nodes.Heading
Nazwa dostępna po najechaniu kursorem.
 
 
header.Nodes.Id
Numer Id.
 
 
header.Nodes.Image
Informacje o obrazie.Właściwości:
  • ExternalUrl - zewnetrzny link,
  • Id - id obrazu,
  • Link - link do obrazu,
 
 
header.Nodes.ImageId
Id obrazu.
 
 
header.Nodes.Name
Wyświetlana nazwa.
 
 
header.Nodes.Product
Wyświetla informacje dotyczące produktów (productdetails).
 
 
header.Nodes.Url
Adres Url.
 
 
manufacturersbrands.Brands
Marka.Właściwości:
  • Heading - tytuł,
  • Id - Id,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - zewnetrzny link,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazka,
  • Name - nazwa,
  • Url - adres Url,
  • UrlWithManufacturer - adres Url,
 
 
manufacturersbrands.Manufacturers
Producenci.Właściwości:
  • Brands - tablica z markami danego producenta,
  • Heading - tytuł,
  • Id - Id,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - zewnetrzny link,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazka,
  • Name - nazwa,
  • Url - adres Url,
  • Website - adres Url,
 
 
text.Content
Treść wpisana w panelu administracyjnym
 
 
productuserreviews.ItemsPerPage
Dopuszczalna liczba opinii na każdej stronie.
 
 
productuserreviews.PageCount
Liczba stron.
 
 
productuserreviews.PageNo
Numer strony na której obecnie się znajdujemy.
 
 
productuserreviews.PageQueryGET
Zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId).
 
 
productuserreviews.Reviews
Przetrzymuje recenzje danego produktu.Właściwości:
  • CreatedDate - kiedy recenzja została napisana,
  • Rating - ocena (w formie graficznej gwiazdek),
  • Author - autor recenzji,
  • Comment - komentarz/opis oceny,
  • RegisteredAuthor - czy autor recenzji był zalogowany
 
 
productuserreviews.TotalItems
Łączna liczba opinii.
 
 
comparison-tool.Attributes
Lista atrybutów.
 
 
comparison-tool.Products
Obiekt z produktami do porównania.Właściwości:
  • AddedDate - data dodania produktu,
  • AskForPrice - zapytaj o cenę,
  • Attributes - atrybuty,
  • AttributesList - listę atrybutów,
  • Availability - dostępność, zawiera:
    • Date - data,
    • ImageUrl - adres URL zdjęcia,
    • Status - status,
    • Text - opis słowny,
    • Type - numer oznaczający dostępność,
  • BasicUnit - domyślna jednostka sprzedaży (np. sztuka),
  • BasicUnitMinQuantity - minimalna ilość towaru do zakupu w jednostce podstawowej,
  • BasicUnitRatio - przelicznik jednostki,
  • Brand - marka, zawiera:
    • Heading - tytuł,
    • Id - numer id,
    • Image - informacje o obrazie, zawiera:
      • ExternalUrl - zewnetrzny link,
      • Id - id obrazu,
      • Link - link do obrazu,
    • ImageId - id obrazu,
    • Name - nazwa,
    • Url - adres URL,
    • UrlWithManufacturer - adres url producenta,
  • Code - kod produktu,
  • ControlStock - pokazuje, czy stany magazynowe zostały włączone,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - czy jednostki moga być liczbami niecałkowitymi,
  • DefaultGroup - czy posiada grupę domyślną,
  • Flags - wyświetla informacje o flagach dla danego produktu, np. promocja, nowość. zawiera pole text - nazwa oraz typ,
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • HasAttributes - czy posiada atrybuty,
  • HasDefaultUnit - czy posiada domyślną jednostkę,
  • HasOtherUnits - czy posiada inne jednostki sprzedażowe,
  • Hits - ilość wyświetleń danego towaru,
  • Id - numer id,
  • Image - informacje o obrazie, zawiera:
    • ExternalUrl - zewnetrzny link,
    • Id - id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • Images - zdjęcia produktu, dla każdego z nich posiada:
    • ExternalUrl - zewnętrzny link,
    • Id - id zdjęcia,
    • Link - link do zdjęcia,
  • Link - link,
  • Manufacturer - producent, zawiera:
    • Heading - nazwa,
    • Id - numer id,
    • Image - informacje o obrazie, zawiera:
      • ExternalUrl - zewnetrzny link,
      • Id - id obrazu,
      • Link - link do obrazu,
    • ImageId - id obrazu,
    • Name - nazwa,
    • Url - adres URL,
    • Website - adres URL,
  • ManufacturerCode - kod producenta,
  • MetaDescription - opis (metadane),
  • MetaKeywords - słowa kluczowe (metadane),
  • MetaTitle - tytuł (metadane),
  • MinPrice - cena minimalna z ostatnich 30 dni,
  • ModifiedDate - data modyfikacji,
  • MoreInfoUrl - adres URL z większą ilością informacji,
  • Name - nazwa,
  • Name1 - nazwa,
  • NameNoHtml - nazwe bez znaczników HTML,
  • NetWeight - waga netto,
  • NoDiscount - informacja czy produkt może być objęty zniżką,
  • OrdersCount - ilość osób (unikalnych klientów), które zakupiły dany produkt,
  • ParentId - numer id rodzica,
  • Points - liczba punktów lojalnościowych przyznawana za zakup tego towaru,
  • PointsPrice - koszt towaru podany w punktach lojalnościowych,
  • PreviousPrice - cena poprzednia,
  • Price - cena,
  • Rating - średnia ocen,
  • RatingCount - ilość ocen,
  • RegularPrice - cena standardowa,
  • SaleUnit - jednostka sprzedażowa,
  • ShortDescription - krótki opis,
  • Sold - informacja o liczbie sprzedanych sztuk danego towaru,
  • StockLevel - stany magazynowe,
  • SubtotalMinPrice - cena minimalna netto z ostatnich 30 dni od daty wprowadzenia promocji,
  • SubtotalPreviousPrice - cena poprzednia bez VAT,
  • SubtotalPrice - cena bez VAT,
  • SubtotalRegularPrice - cena netto,
  • Symbol - symbol (w formie stringa),
  • TotalMinPrice - cena minimalna brutto z ostatnich 30 dni od daty wprowadzenia promocji,
  • TotalPreviousPrice - cena poprzednia brutto,
  • TotalPrice - cena z podatkiem VAT,
  • TotalRegularPrice - cena produktu brutto,
  • Type - typ towaru,
  • UPC - zwraca kod EAN z ERP,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itp.). Jeżeli wartość wynosi null, to nie wyświetlamy ceny jednostkowej,
  • Url - adres URL produktu,
  • VAT - stawka VAT,
  • WasteMgmtCost - koszt gospodarowania odpadami,
  • Weight - waga,
 
 
customerprofile.Complaint
Przetrzymuje szczegóły na temat reklamacji.
 
 
customerprofile.ComplaintQueryGET
Zwraca string ComplaintQueryGET ustawiony z poziomu Panelu administratora (np.PageId).
 
 
customerprofile.ComplaintsActive
Lista z trwającymi właśnie reklamacjami i zwrotami.Właściwości:
  • Complaints - zawiera informacje o reklamacjach i zwrotach. W jego skład wchodzą właściwości:
    • ComplaintId - id reklamacji/zwrotu,
    • CreatedDate - data utworzenia reklamacji/zwrotu,
    • Currency - waluta,
    • Informacje o walucie. Zawiera:
      • Code - waluta przesłana z systemu ERP,
      • Symbol - symbol wprowadzony w panelu administracyjnym,
    • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
    • DefaultGroup - grupa domyślna produktu,
    • Description - opis reklamacji/zwrotu,
    • Id - id produktu,
    • Image - informacje o obrazie, zawiera:
      • ExternalUrl - zewnetrzny link,
      • Id - id obrazu,
      • Link - link do obrazu,
    • ImageId - id zdjęcia produktu,
    • Link - link do produktu,
    • NameNoHtml - nazwa produktu,
    • OrderId - numer zamówienia,
    • Price - cena,
    • Quantity - ilość,
    • Status - numer określający aktualny status reklamacji/zwrotu,
    • StatusText - tekst określający aktualny status reklamacji/zwrotu,
    • SubtotalPrice - cena netto,
    • SubtotalPrices - czy wyświetlane ceny są cenami netto,
    • SubtotalValue - wartość netto,
    • TotalPrice - cena brutto,
    • TotalValue - wartość brutto,
    • Type - numer określający typ (reklamacja czy zwrot),
    • TypeText - tekst określający typ (reklamacja czy zwrot),
    • Unit - jednostka,
    • Url - adres strony z produktem,
    • Value - wartość,
  • ItemsPerPage - ilość przedmiotów które mają być wyświetlane na stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łącznie przedmiotów
 
 
customerprofile.ComplaintsExecuted
Informacje na temat rozstrzygniętych reklamacji i zwrotów, zawiera pola analogicznie jak ComplaintsActive.
 
 
customerprofile.Consents
Informacje o zgodach Klienta.Właściwości:
  • Channels - kanały,
  • Checked - czy zgoda została zaakceptowana,
  • Contents - treści regulaminów przypisane do konkretnej zgody,
  • Date - data wyrażenia zgody,
  • Id - numer id zgody,
  • PublishedDate - data publikacji zgody,
  • Required - czy zgoda jest wymagana,
  • Statement - czy jest to forma oświadczenia,
  • Text - treść zgody,
  • Type - numer oznaczający typ zgody,
  • Updated - kiedy była aktualizacja tresci,
 
 
customerprofile.DiscountDetPageQueryGET
Zwraca string DiscountDetPageQueryGet ustawiony z poziomu Panelu Administratora.
 
 
customerprofile.DiscountERPDetails
Informacje nt. zniżki z systemu ERP.
 
 
customerprofile.DiscountQueryGET
Zwraca string DiscountQueryGET ustawiony z poziomu Panelu Administratora.
 
 
customerprofile.Discounts
Informacje na temat zniżek przysługujących Klientowi.Właściwości:
  • CustomerGroups - ulubione kategorie danego Klienta,
  • CustomerProducts - ulubione produkty danego Klienta,
  • FirstOrder - jeśli zwraca true to jest to pierwsze zamówienie Klienta zaś w Panelu Administracyjnym znajduje się obniżka dla pierwszych zamówień,
  • Groups - zniżka grupowa (dotyczy danej grupy produktów, np. obuwia damskiego). Zawiera Currency, DateTill, Discount, DiscountType, Treshold oraz Group, które zawiera Count, HasChildren, Heading, Id, Image, ImageId, Name oraz Url,
  • OrderValue - wartość zamówienia (po przeliczeniu zniżki),
  • Products - produkty, na które klient ma zniżkę,
  • Regular - standardowa obniżka (jeżeli została taka przypisana w Panelu Administracyjnym),
 
 
customerprofile.DiscountsERP
Informacje na temat zniżek z systemu ERP.Właściwości:
  • Discounts - lista produktów ze zniżkami, zawiera:
    • Code - kod,
    • DateFrom - data, początek ważności zniżki,
    • DateTill - data, koniec ważności zniżki,
    • Description - opis,
    • Id - numer id,
    • Name - nazwa produktu ze zniżką,
    • Type - typ zniżki,
  • ItemsPerPage- ilość produktów na stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu Administratora,
  • TotalItems - łączna ilość towarów ze zniżkami (odpowiada ilości produktów w tym obiekcie we właściwości Discounts,
 
 
customerprofile.DiscountsEshop
Zniżki z e-Sklepu.Właściwości:
  • FirstOrder - jeśli zwraca true to jest to pierwsze zamówienie Klienta zaś w Panelu Administracyjnym znajduje się obniżka dla pierwszych zamówień,
  • OrderValue - rabat od wartości zamówienia,
  • Regular - rabat dla stałego klienta,
 
 
customerprofile.DiscountsPageQueryGet
Zwraca string DiscountsPageQueryGet ustawiony z poziomu Panelu Administratora.
 
 
customerprofile.Employees
Lista pracowników jakich posiada sklep, wraz z ich danymi.Właściwości:
  • Active - czy pracownik ma status aktywnego,
  • Email - adres email pracownika,
  • ExportedToERP - czy pracownik został wyeksportowany do systemu ERP,
  • Id - id pracownika,
  • LanguageId - id języka,
  • Name - nazwa pracownika,
  • Name2 - nazwa pracownika,
  • Owner - czy jest właścicielem,
  • PhoneNo - numer telefonu pracownika,
 
 
customerprofile.History
Zawiera informacje na temat działań na koncie, np. logowań (i nieudanych prób logowania) czy zmiany danych.Właściwości:
  • Items - zawiera następujące informacje:
    • Category - rodzaj wykonanej akcji (np. Logowanie),
    • Date - data wykonania akcji,
    • Event - opis akcji (np. Logowanie poprawne),
    • User - kto wykonał akcję,
    • UserType - typ użytkownika, który wykonał akcję
  • ItemsPerPage - ilość akcji wyświetlanych na jednej stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGet - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łączna liczba akcji,
 
 
customerprofile.Inquiries
Zawiera informacje odnośnie zapytań ofertowych.Właściwości:
  • ItemsPerPage - maksymalna ilość zapytań wyświetlana na jednej stronie,
  • List - lista zapytań, zawiera:
    • Date - data złożenia zapytania,
    • Id - id zapytania,
    • Status - numer określający status zapytania,
    • StatusText - tekst opisujący status zapytania,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - ilość zapytań ofertowych,
 
 
customerprofile.InquiriesPageQueryGet
Zwraca string InquiriesPageQueryGet ustawiony z poziomu Panelu administratora.
 
 
customerprofile.LinkedAccounts
Powiązane konta.
 
 
customerprofile.LoyaltyHistory
Historia wydawanych i zdobywanych punktów lojalnościowych.Właściwości:
  • Items - informacje odnośnie płatności punktami lojalnościowymi, zawiera:
    • Date - data,
    • Event - numer oznaczający zdarzenie,
    • EventText - tekst opisujący zdarzenie,
    • Id - numer id,
    • Points - ilość punktów,
    • User - typ użytkownika (słownie),
    • UserType - numer określający typ użytkownika,
  • ItemsPerPage - ilość akcji wyświetlanych na jednej stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łączna liczba akcji,
 
 
customerprofile.Newsletter
Informacje o subskrypcji newslettera oraz Id języka.Właściwości:
  • LanguageId - id języka, w jakim newsletter ma się wyświetlać,
  • Subscriber - czy użytkownik jest subskrybentem newslettera,
 
 
customerprofile.Offer
 
 
customerprofile.OfferDetPageQueryGET
Zwraca string OfferDetPageQueryGET ustawiony z poziomu Panelu administratora.
 
 
customerprofile.OfferQueryGET
Zwraca string OfferQueryGET ustawiony z poziomu Panelu administratora.
 
 
customerprofile.Offers
Lista ofert.Właściwości:
  • ItemsPerPage - ilość ofert na stronie,
  • List - lista ofert, zawiera:
    • Date - data utworzenia oferty,
    • Id - numer id oferty,
    • Status - numer określający status oferty,
    • StatusText - tekst opisujący aktualny status oferty,
  • PageCount - ilość stron,
  • PageNo - aktualna strona,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora,
  • TotalItems - ilość ofert,
 
 
customerprofile.OffersPageQueryGet
Zwraca string OffersPageQueryGet ustawiony z poziomu Panelu administratora.
 
 
customerprofile.Order
Zawiera informacje na temat złożonego zamówienia.Właściwości:
  • Attachments - załączniki,
  • Attributes – atrybuty nagłówkowe zamówienia,
  • CanAccept - czy zamówienie może być zaakceptowane,
  • CanCancel - czy zamówienie może być anulowane,
  • CanCopy - czy zamówienie może zostać skopiowane,
  • CanEdit – czy zamówienie można edytować,
  • CanRestorePayment - jeżeli wartość true, to umożliwia to umożliwia ponowne opłacenie towaru (np. w przypadku awarii Banku, nieudanej płatności itp.),
  • Currency - zwraca walutę,
  • Customer- zwraca informacje dotyczące Klienta:
    • Buyer - trzecie dane klienta,
    • Company - czy Klient jest firmą,
    • DeliveryAddress- zwraca informacje na temat adresu dostawy:
      • City - miasto,
      • Country - kraj,
      • Name - dane kupującego,
      • Name2 - dane kupującego,
      • Name3 - dane kupującego,
      • PhoneNo - numer telefonu,
      • State - województwo,
      • Street - ulica,
      • StreetNo - numer domu,
      • UnitNo - numer mieszkania,
      • ZipCode - kod pocztowy,
    • Email - zwraca adres mailowy,
    • Employee- zwraca informacje na temat pracownika, zawiera:
      • Email - adres mailowy,
      • LanguageId - id języka,
      • Name - nazwa,
      • Name2 - dodatkowe pole nazwa,
      • PhoneNo - numer telefonu
    • Invoice - czy wybrano fakturę,
    • InvoiceAddress - zawiera dane adresowe na jakie ma być wystawiona faktura. Zawiera te same pola co DeliveryAddress oraz dodatkowo pole Email wskazujące na adres mailowy,
    • RegisteredUser - czy użytkownik jest zarejestrowany,
    • SSN - numer PESEL,
    • TIN - numer NIP,
    • VATEU - zwraca kraj właściwy dla VAT,
  • Date - data złożenia zamówienia,
  • Delivery - wybrany sposób dostawy, zawiera:
    • CollectionPoint - punkt odbioru,
    • CollectionPointAddress - dane adresowe punktu odbioru,
    • CollectionPointId - numer id punktu odbioru,
    • CollectionPointTypeId - numer id oznaczający typ punktu odbioru,
    • DateText - data,
    • Description - opis,
    • MethodId - numer id sposobu dostawy,
    • Name - nazwa sposobu dostawy,
    • PackageCount - ilość paczek,
    • Status - status dostawy (numer),
    • StatusText - status dostawy (tekst),
    • SubtotalValue - wartość bez podatku VAT,
    • TotalValue - wartość zamówienia,
    • Waybill - list przewozowy,
    • Waybills - informacje o listach przewozowych,
  • DeliveryDate - zawiera liczbę (zazwyczaj dni) w ciągu których towar zostanie dostarczony,
  • Discount - zniżka,
  • Documents - załączone dokumenty/pliki,
  • ERPOrderNumber – numer zamówienia z ERPa,
  • EditingAllowed – jeśli true to zamówienie jest w trakcie edycji,
  • ExpectedDate - dzień dostarczenia towaru ,
  • ExpirationDate - dzień do którego towar zostanie dostarczony,
  • Hash - unikalny numer oznaczający zamówienie,
  • Id - numer Id,
  • IsEdited – jeśli true to zamówienie zostało wyedytowane,
  • ItemsPerPage – ilość towarów na stronie na szczegółach zamówienia,
  • LanguageId - Id języka,
  • NotDeterminedDeliveryCost - wyświetla informacje czy koszt dostawy został zdefiniowany,
  • Note - dodatkowe informacje,
  • OrderTotalValue - łączna wartość zamowienia,
  • PageCount – ilość stron z towarami na szczegółach zamówienia,
  • PageNo – numer strony z towarami na szczegółach zamówienia,
  • Payment - informacje odnośnie płatności, zawiera:
    • Description - opis,
    • DueDateText - określa termin/moment płatności,
    • MethodId - Id danej metody,
    • MethodIdText - opis danego Id,
    • MethodType - typ metody,
    • Name - nazwa,
    • OnlineNumber - Id transakcji z platności online,
    • Status - status płatności (numer),
    • StatusText - status płatności (tekst),
    • SubtotalValue - koszt płatności bez podatku VAT,
    • TotalValue - łączny koszt płatności,
  • Points – punkty lojalnościowe otrzymane za złożenie zamówienia,
  • PointsPaid – punkty lojalnościowe wydane w tym zamówieniu,
  • ProcessedDate - data wysłania,
  • Products - informacje o produktach w zamówieniu, zawiera:
    • Attributes – atrybuty elementu zamówienia,
    • CanComplain - czy można złożyć reklamację,
    • CanReturn - czy można zwrócić towar,
    • Code - kod produktu,,
    • DefaultGroup - grupa domyślna produktu,
    • Description - pole opis (np. rozmiar buta),
    • Id - numer Id,
    • Image - obraz,
    • ImageId - Id obrazu,
    • IsDeleted – czy usunięty,
    • IsEdited – czy wyedytowany,
    • IsModified – czy modyfikowany,
    • IsSetElement - czy jest częścią zestawu,
    • IsSetParent - czy przedmiot jest przedmiotem głównym,
    • Link - link,
    • NameNoHtml - nazwa bez tagów HTML,
    • No - numer,
    • Price - cena,
    • Quantity - ilość zakupionego towaru,
    • ReturnedQuantity - ilość zwróconego towaru,
    • SetName - nazwa zestawu,
    • SubtotalPrice - cena bez VAT,
    • SubtotalValue - cena całkowita (cena * ilość) bez VAT,
    • TotalPrice - cena z podatkiem VAT,
    • TotalValue - całkowita wartość zamówienia,
    • UPC - zwraca kod EAN z ERP,
    • Unit - jednostka sprzedażowa (np. para),
    • Url - adres URL,
    • VAT - wartość podatku VAT,
    • Value - wartość brutto towaru,
    • WasteMgmtCost - koszty gospodarowania odpadami,
  • ProductsSubtotalValue - cena towarów bez podatku VAT,
  • ProductsTotalValue - łączna cena towarów w koszyku,
  • ProductsValue - wartość towarów,
  • ProductsValueBeforeDiscount – wartość towarów przed zniżką,
  • ProductsVatValue - wartość podatku VAT (w złotówkach),
  • RecalculationRequired – czy wymagane przeliczenie zamówienia,
  • RelatedOffers - powiązane oferty sprzedaży,
  • RelatedOrders - powiązane zamówienia,
  • ReportUrl - wygenerowany link do raportu,
  • SelectedDeliveryDate – wybrana przez klienta data dostawy,
  • Source - źródło,
  • SplitPayment - podział płatności,
  • Status - status,
  • StatusText - opis tekstowy statusu,
  • SubtotalPrices - czy wyświetlane ceny są cenami netto,
  • TotalItems – ilość wszystkich towarów z zamówienia,
  • Url - adres URL do zamówienia, zawiera hash,
  • Weight - waga,
 
 
customerprofile.OrderDetPageQueryGET
Zwraca string OrderDetPageQueryGET ustawiony w panelu administracyjnym.
 
 
customerprofile.OrderQueryGET
Zwraca string OrderQueryGET ustawiony z poziomu Panelu administratora (np.PageId).
 
 
customerprofile.Orders
Połączenie danych z customerprofile.Active i customerprofile.Executed.Właściwości:
  • ItemsPerPage - maksymalna ilość na jednej stronie,
  • Orders - zawiera informacje o zamówieniach, posiada właściwości:
    • Currency - waluta,
    • CurrencyExt - informacje o walucie. Zawiera Code i Symbol,
    • Date - data złożenia zamówienia,
    • DeliveryStatus - status zamówienia (numer),
    • DeliveryStatusText - status zamówienia (tekst),
    • Email - adres email,
    • OrderId - numer id zamówienia,
    • PaymentStatus - status płatności (numer),
    • PaymentStatusText - status płatności (tekst),
    • Status - status zamówienia (numer),
    • StatusText - status zamówienia (tekst),
    • SubtotalValue - wartość zamówienia bez podatku VAT,
    • TotalValue - wartość zamówienia z podatkiem VAT,
    • Value - wartość zamówienia,
  • PageCount - ilość stron,
  • PageNo - aktualny numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora,
  • TotalItems - łączna ilość zamówień,
 
 
customerprofile.OrdersActive
Informacje na temat aktywnych zamówień.Właściwości:
  • ItemsPerPage - ilość przedmiotów wyświetlanych na jednej stronie,
  • Orders - lista aktywnych zamówień zawiera następujące informacje:
    • Currency - waluta,
    • CurrencyExt - informacje o walucie. Zawiera Code i Symbol,
    • Date - data złożenia zamówienia,
    • DeliveryStatus - status zamówienia (numer),
    • DeliveryStatusText - status zamówienia (tekst),
    • Email - adres email,
    • OrderId - numer id zamówienia,
    • PaymentStatus - status płatności (numer),
    • PaymentStatusText - status płatności (tekst),
    • Status - status zamówienia (numer),
    • StatusText - status zamówienia (tekst),
    • SubtotalValue - wartość zamówienia bez podatku VAT,
    • TotalValue - wartość zamówienia z podatkiem VAT,
    • Value - wartość zamówienia,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGet - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łączna liczba aktywnych zamówień,
 
 
customerprofile.OrdersExecuted
Zamówienia zrealizowane.Właściwości:
  • ItemsPerPage - ilość przedmiotów wyświetlanych na jednej stronie,
  • Orders - lista aktywnych zamówień zawiera następujące informacje:
    • Currency - waluta,
    • CurrencyExt - informacje o walucie. Zawiera Code i Symbol,
    • Date - data złożenia zamówienia,
    • DeliveryStatus - status zamówienia (numer),
    • DeliveryStatusText - status zamówienia (tekst),
    • Email - adres email,
    • OrderId - numer id zamówienia,
    • PaymentStatus - status płatności (numer),
    • PaymentStatusText - status płatności (tekst),
    • Status - status zamówienia (numer),
    • StatusText - status zamówienia (tekst),
    • SubtotalValue - wartość zamówienia bez podatku VAT,
    • TotalValue - wartość zamówienia z podatkiem VAT,
    • Value - wartość zamówienia,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGet - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łączna liczba zrealizowanych zamówień,
 
 
customerprofile.ProductsToRate
Produkty zakupione ale jeszcze nie ocenione.Właściwości:
  • ItemsPerPage - maksymalna ilość przedmiotów na stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGet - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora,
  • Products - informacje o produktach, zawiera:
    • OrderDate - data złożenia zamówienia,
    • OrderId - id zamówienia,
    • Product - informacja o produkcie, zawiera:
      • DefaultGroup - domyślna grupa,
      • Id - id produktu,
      • Image - informacje o obrazie, zawiera:
        • ExternalUrl - zewnetrzny link,
        • Id - id obrazu,
        • Link - link do obrazu,
      • ImageId - id zdjęcia,
      • Link - link do produktu,
      • NameNoHtml - nazwa produktu bez znaczników HTML,
      • Url - adres URL produktu,
  • TotalItems - łączna ilość produktów do oceny,
 
 
customerprofile.Reviews
Zawiera informacje na temat opinii napisanych przez użytkownika.Właściwości:
  • AverageRating - średnia ocen,
  • ItemsPerPage - ilość przedmiotów na stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora,
  • Reviews - opinie. Zawiera:
    • Active - czy opinia jest aktywna,
    • Comment - treść opinii,
    • CreatedDate - data utworzenia,
    • OrderId - id zamówienia,
    • Product - informacje o produkcie. Zawiera:
      • DefaultGroup - domyślna grupa,
      • Id - id produktu,
      • Image - informacje o obrazie, zawiera:
        • ExternalUrl - zewnetrzny link,
        • Id - id obrazu,
        • Link - link do obrazu,
      • ImageId - id obrazka,
      • Link - link,
      • NameNoHtml - nazwa (bez znaczników html),
      • Url - adres strony produktu,
    • Rating - ocena,
  • TotalItems - łączna ilość opinii,
 
 
customerprofile.WishList
Lista towarów znajdujących się na liście życzeń/przechowalni.Właściwości:
  • Note - uwagi,
  • Notify - powiadomienie,
  • NofifyDate - data powiadomienia,
  • Product - informacje o produkcie, zawiera:
    • AskForPrice - zapytaj o cenę,
    • Availability - dostępność, zawiera:
      • Date - data,
      • ImageUrl - adres URL zdjęcia,
      • Status - status dostępności (numer),
      • Text - status dostępności (tekst),
      • Type - typ,
    • BasicUnitMinQuantity - informacja o minimalnej ilości zakupu w jednostce podstawowej towaru,
    • Brand - marka, zawiera:
      • Heading - tytuł,
      • Id - id marki,
      • Image - informacje o obrazie, zawiera:
        • ExternalUrl - zewnetrzny link,
        • Id - id obrazu,
        • Link - link do obrazu,
      • ImageId - numer id obrazu,
      • Name - nazwa marki,
      • Url - adres url marki,
      • UrlWithManufacturer - adres do produktów danego producenta,
    • Code - kod,
    • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
    • DecimalUnit - czy jednostki mogą być liczbami niecałkowitymi,
    • DefaultGroup - domyślna grupa,
    • Flags - flagi (np. nowość, wyprzedaż),
    • GIDNumber - numer Id produktu z bazy systemu ERP,
    • HasAttributes - czy posiada atrybuty,
    • HasOtherUnits - czy posiada inne jednostki sprzedażowe,
    • Id - numer id,
    • Image - zdjęcie, zawiera:
      • ExternalUrl - zewnętrzny link,
      • Id - numer id obrazu,
      • Link - link do obrazu,
    • ImageId - id obrazu,
    • Images - zdjęcia, zawiera:
      • ExternalUrl - zewnętrzny link,
      • Id - numer id obrazu,
      • Link - link do obrazu,
    • Link - link do produktu,
    • Manufacturer - producent, zawiera:
      • Heading - tytuł,
      • Id - numer id producenta,
      • Image - zdjęcie, zawiera:
        • ExternalUrl - zewnętrzny link,
        • Id - numer id obrazu,
        • Link - link do obrazu,
      • ImageId - id obrazu,
      • Name - nazwa,
      • Url - adres URL,
      • Website - strona WWW producenta,
    • MinPrice – cena minimalna z ostatnich 30 dni,
    • Name - nazwa produktu,
    • NameNoHtml - nazwa produktu bez znaczników HTML,
    • NoDiscount - informacja, czy produkt może być objęty zniżką,
    • PreviousPrice - cena poprzednia,
    • Price - cena,
    • Rating - średnia ocena,
    • RatingCount - ilość ocen,
    • RegularPrice - cena normalna,
    • SaleUnit - jednostka sprzedażowa (np. para),
    • Type - typ,
    • UPC – kod EAN z ERP,
    • UnitPriceRatio - przelicznik ceny za jednostkę miary,
    • UnitPriceUnit - możliwa jednostka przeliczniowa (np. litry na mililitry, gramy na kilogramy itd.),
    • Url - adres url,
    • Weigth - waga,
  • Quantity - ilość,
 
 
blog.LatestPosts
Zwraca informacje na temat ostatnich postów.Właściwości:
  • Content - zawartość wpisu (jego treść),
  • Heading - tytuł,
  • Id - numer Id,
  • ImageUrl - URL obrazu,
  • PublishedDate - data publikacji,
  • Url - adres URL,
  • Tags - tagi, zawiera właściwości:
    • Text - tekst,
    • Url - adres URL,
    • Weight - waga,
 
 
blog.PostDetails
Informacje o szczegółach posta.Właściwości:
  • Content - treść,
  • Heading - nagłówek,
  • Id - id,
  • ImageUrl - url obrazka,
  • MetaDescription - meta opis,
  • MetaKeywords - meta słowa kluczowe,
  • MetaTitle - meta tytuł,
  • Next - informacje o następnym poście, zawiera:
    • Heading - nagłówek,
    • Id - id,
    • PublishedDate - data publikacji,
    • Url - url,
  • Previous - informacje o poprzednim poście (analogicznie do Next),
  • PublishedDate - data publikacji,
  • Tags - informacje o tagach, zawiera:
    • Text - nazwa taga,
    • Url - url do listy postów z danym tagiem,
    • Weight - waga,
  • Url - url,
 
 
blog.PostList
Informacje o liście postów.Właściwości:
  • ItemsPerPage - ilość wpisów wyświetlanych na jednej stronie,
  • PageCount - ilość stron,
  • PageNo - numer strony,
  • PageQueryGET - zwraca string PageQueryGET ustawiony z poziomu Panelu administratora (np. PageId),
  • TotalItems - łączna liczba postów ,
  • Posts - zawiera informacje na temat wpisów na stronie. Właściwość ta zawiera dokładnie te same elementy co LatestPosts,
  • Search - informacje o wyszukaniu. Zawiera element Url,
 
 
cart.Attachments
Załączniki dodane do zamówienia.
 
 
cart.Attributes
Atrybuty nagłówkowe zamówienia.
 
 
cart.AuthenticationRequired
Informacja czy wymagane jest aby użytkownik był zalogowany.
 
 
cart.CartEmpty
Informacja czy koszyk jest pusty.
 
 
cart.Changes
Zwraca true jeśli dokonano zmiany w koszyku (np. dodanie produktu jako użytkownik zalogowany, wylogowanie i ponowne dodanie produktu jako zalogowany użytkownik).
 
 
cart.CollectionPointMapUrl
Link do mapy z punktami odbioru.
 
 
cart.CompanyOnly
Jeśli true to zamówienie można złożyć tylko jako firma.
 
 
cart.Coupon
Zwraca użyty kod rabatowy.
 
 
cart.Currency
Waluta w koszyku.
 
 
cart.CurrencyExt
Informacje o walucie w koszyku. Zawiera Code i Symbol).
 
 
cart.Customer
Informacje na temat Klienta.Właściwości:
  • Buyer - trzecie dane klienta,
  • Company - czy Klient jest firmą,
  • CustomerDetailsEditable - czy można edytować dane,
  • DeliveryAddress- właściwość odpowiada za możliwość zmiany adresu dostawy, składa się z:
    • City - miasto,
    • Country - kraj,
    • Name - dane odbiorcy,
    • Name2 - dane odbiorcy,
    • Name3 - dane odbiorcy,
    • PhoneNo - numer telefonu,
    • State - województwo,
    • Street - ulica,
    • StreetNo - numer domu,
    • UnitNo - numer mieszkania,
    • ZipCode - kod pocztowy,
  • Email - adres e-mail,
  • Id - numer Id,
  • Invoice - czy Klient chce aby wystawiona została faktura,
  • InvoiceAddress - właściwość odpowiada za możliwość wybrania danych do faktury, takich jak:
    • City - miasto,
    • Country - kraj,
    • Name - dane odbiorcy faktury,
    • Name2 - dane odbiorcy faktury,
    • Name3 - dane odbiorcy faktury,
    • PhoneNo - numer telefonu,
    • State - województwo,
    • Street - ulica,
    • StreetNo - numer domu,
    • UnitNo - numer mieszkania,
    • ZipCode - kod pocztowy,
  • SSN - numer PESEL,
  • TIN - numer NIP,
  • VATEU - numer VATEU,
 
 
cart.DeliveryMethods
Informacje na temat sposobów dostawy.Właściwości:
  • CalculationId - id kalkulacji,
  • CollectionPointTypeId - numer id oznaczający typ punktu odbioru,
  • DateText - opis sposobu dostawy,
  • Description - opis,
  • FastDelivery - czy obsługuje opcję szybkiej dostawy,
  • FreeDeliveryFrom - opcja darmowej dostawy od określonej kwoty,
  • ImageUrl - url do obrazu,
  • Name - nazwa,
  • NotDeterminedDeliveryCost - zwraca true jeżeli koszt dostawy zostanie ustalony przez obsługę sklepu,
  • Payments - informacje na temat sposobu płatności dostępnego dla wybranego sposobu dostawy. Zawiera:
    • AdditionalDataHTML - dodatkowo przekazany HTML,
    • COD - płatność za pobraniem,
    • Channels - kanały płatności,
    • Description - opis,
    • DueDateText - określa termin płatności,
    • FreePaymentFrom - darmowa płatność od (kwota),
    • Id - numer Id,
    • ImageUrl - adres URL obrazu,
    • MethodId - numer id metody płatności,
    • Name - Nazwa,
    • TotalValue - kwota,
  • TotalValue - wartość sposobu dostawy (cena),
 
 
cart.Demo
Gdy true, nie można składać zamówień.
 
 
cart.Discount
Wartość rabatu wyrażona w procentach.
 
 
cart.EditedOrderId
Id wyedytowanego zamówienia.
 
 
cart.GratisItems
Informuje o przysługujących produktach promocyjnych. Właściwości:
  • Attributes - atrybuty produktu, zawiera:
    • Format – format atrybutu: tekst, liczba, data itp.,
    • Id – Id danej właściwości,
    • Name – nazwa właściwości (np. materiał),
    • Object – właściwy obiekt dla atrbutu, zgodnie z Format,
    • Value – wartość danej właściwości (np. tworzywo sztuczne)
  • AttributesEditable - pole z atrybutami edytowalnymi (przykładowo treść graweru na biżuterii),
  • AttributesPolyvalent - lista atrybutów produktu,
  • DiscountId - numer Id rabatu,
  • DiscountType - typ przyznanego rabatu,
  • DiscountValue - wartość przyznanego rabatu,
  • ElementId - numer Id produktu promocyjnego,
  • HasAttributes - informacja czy produkt posiada atrybuty,
  • Image - informacje o obrazie produktu, zawiera:
    • ExternalUrl - zewnętrzny link,
    • Id - numer id obrazu,
    • Link - link do obrazu,
  • IsNetPrice - informacja czy cena jest wartością netto,
  • Name - nazwa rabatu,
  • NameNoHtml - nazwa produktu,
  • ProductGroupId - numer Id grupy rabatowej do której należy produkt,
  • ProductId - numer Id produktu,
  • Quantity - ilość danego przedmiotu na którą naliczany jest towar po cenie promocyjnej,
  • SaleUnit - jednostka sprzedażowa,
  • Url - adres URL,
  • Value - wartość produktu promocyjnego,
 
 
cart.NotDeterminedDeliveryCost
Zwraca true jeżeli koszt dostawy zostanie ustalony przez obsługę sklepu.
 
 
cart.NotDeterminedProductsDeliveryCost
 
 
cart.Note
Informacje/uwagi dodatkowe wpisane przez Klienta.
 
 
cart.OSS
Informacja o obsłudze szczególnej procedury rozliczania VAT dla e-Commerce.
 
 
cart.OrderStep
Nazwa kroku w zamówieniu.
 
 
cart.OrderTotalValue
Łączna wartość do zapłaty.
 
 
cart.OrderValueDiscounts
Łączna wartość zniżek.
 
 
cart.PlacedOrder
Wszystkie dane odnośnie danego zamówienia.
 
 
cart.Points
Punkty lojalnościowe, które klient otrzyma za złożenie tego zamówienia.
 
 
cart.PointsForValue
Ilość punktów lojalnościowych za wartość zamówienia.
 
 
cart.PointsPaid
Punkty lojalnościowe wydane przy składaniu tego zamówienia.
 
 
cart.PointsPrice
Cena zamówienia (netto lub brutto w zależności od rodzaju klienta – prywatny lub firma) przy użyciu punktów lojalnościowych.
 
 
cart.PointsPriceTotalValue
Cena brutto zamówienia przy użyciu punktów lojalnościowych.
 
 
cart.PreOrder
Informacja czy produkt jest zapowiedzią (nie jest jeszcze dostępny).
 
 
cart.Products
Informacje o produkcie/produktach w koszyku.Właściwości:
  • AskForPrice - czy włączono opcję zapytaj o cenę,
  • AskForPriceId - numer id zapytania o cenę,
  • Attributes - atrybuty,
  • BasicUnit - podstawowa jednostka,
  • BasicUnitRatio - przelicznik jednostki,
  • CanChangeQuantity - czy można zmienić ilość,
  • CanDelete - czy można usunąć,
  • Changed - jeśli wartość zwraca true należy dokonać ponownego przeliczenia koszyka,
  • Code - kod produktu,
  • DecimalPlacesPrice - liczba miejsc po przecinku do wyświetlania ceny,
  • DecimalUnit - czy jednostka może być liczbą niecałkowitą,
  • DefaultGroup - do jakiej grupy domyślnej przedmiot należy,
  • Description - opis przedmiotu (np. rozmiar buta),
  • Discount - zniżka,
  • GIDNumber - numer Id produktu z bazy systemu ERP,
  • Id - numer Id,
  • Image - zdjęcie, zawiera:
    • ExternalUrl - zewnętrzny link,
    • Id - numer id obrazu,
    • Link - link do obrazu,
  • ImageId - id obrazu,
  • IsSetElement - czy należy do zestawu,
  • IsSetParent - czy przedmiot jest główną częścią np. zestawu,
  • Link - link,
  • NameNoHtml - nazwa bez znaczników HTML,
  • No - numer przedmiotu w koszyku,
  • NoDiscount - czy nie ma zniżki,
  • Points - punkty,
  • PointsForValue - ilość punktów lojalnościowych za wartość produktu,
  • PointsPrice – cena towaru po użyciu punktów lojalnościowych,
  • Price - cena,
  • Quanity - ilość danego przedmiotu w koszyku,
  • SaleUnit - jednostka sprzedażowa,
  • SetName - nazwa zestawu,
  • SplitPayment - podział płatności,
  • Status- zawiera:
    • Date - jeżeli produkt jest zapowiedzią, to w tym miejscu znajduje się data kiedy stanie się on dostępny,
    • ImageUrl - adres URL obrazu,
    • Status - status,
    • Text - opis tekstowy,
    • Type - typ,
  • SubtotalPrice - cena bez VAT,
  • SubtotalValue - wartość bez VAT (produkt * ilość),
  • SubtotalValueBeforeDiscount - wartość bez VAT (produkt * ilość) przed obniżką,
  • TotalPrice - cena z podatkiem VAT,
  • TotalValue - cena za towary (cena * ilość),
  • TotalValueBeforeDiscount - cena za towary przed obniżką,
  • UPC - kod EAN towaru,
  • UnitPriceRatio - przelicznik ceny za jednostkę miary,
  • UnitPriceUnit - możliwa jednostka przeliczeniowa (np. litry na mililitry, gramy na kilogramy itd.). Jeżeli wartość jest nullem nie wyświetlamy ceny jednostkowej,
  • Url - adres URL,
  • VAT - stawka VAT,
  • Value - suma zamówienia brutto,
  • ValueBeforeDiscount - wartość przed rabatem,
  • WasteMgmCost -koszty gospodarowania odpadami,
  • Weight - waga,
 
 
cart.ProductsMinimumTotalValue
Minimalna cena zamówienia.
 
 
cart.ProductsSubtotalValue
Cena towarów (produkt * ilość) bez podatku VAT.
 
 
cart.ProductsSubtotalValueBeforeDiscount
Cena towarów (produkt * ilość) bez podatku VAT przed rabatem.
 
 
cart.ProductsTotalValue
Łączna cena towarów w koszyku.
 
 
cart.ProductsTotalValueBeforeDiscount
Łączna cena towarów bez rabatu.
 
 
cart.ProductsValue
Wartość towarów.
 
 
cart.ProductsValueBeforeDiscount
Cena towarów przed rabatem.
 
 
cart.SelectedDelivery
Wybrany sposób dostawy.Właściwości:
  • CalculationId - id kalkulacji,
  • CollectionPoint – dane wybranego punktu odbioru wprowadzone w panelu administracyjnym (np. adres, nazwa, godziny otwarcia),
  • CollectionPointId – numer Id punktu dostawy,
  • CollectionPointMapData - informacje o punktach dostawy,
  • CollectionPointMapUrl - adres do mapy punktów dostawy,
  • CollectionPointTypeId – numer Id typu punktu dostawy,
  • CollectionPointTypeText – opis tekstowy typu punktu odbioru (np. "Personal"),
  • DateText – opis,
  • Description – opis danej metody dostawy (jeżeli opis został uzupełniony w Panelu Administratora),
  • FastDelivery - czy obsługuje opcję szybkiej dostawy,
  • FreeDeliveryFrom – darmowa dostawa (od określonej kwoty),
  • ImageUrl - adres URL zdjęcia,
  • MethodId – numer Id metody dostawy,
  • Name - nazwa sposobu dostawy,
  • NotDeterminedDeliveryCost - brak ustalonych kosztów dostawy,
  • Payment - informacje odnośnie płatności, zawiera:
    • AdditionalDataHTML – dodatkowo przekazany HTML,
    • COD - płatność za pobraniem,
    • Channel,
    • Description – opis danej metody płatności (jeżeli opis został uzupełniony w Panelu Administratora),
    • DueDateText – opis (np. w formie tekstu lub liczby) terminu płatności,
    • Id – numer Id,
    • ImageUrl – url obrazka,
    • MethodId – Id danej metody,
    • MethodIdText - nazwa dla danego ID,
    • MethodType – typ metody dostawy,
    • Name – nazwa,
    • SubtotalValue – całkowity koszt netto płatności,
    • TotalValue – koszt całkowity płatności (np. dodatkowa opłata związana z przedpłatą),
    • VAT - stawka podatku VAT,
  • PhoneRequired – czy wymagane jest podanie numeru telefonu,
  • SelectedDate – data dostawy wybrana przez klienta,
  • SubtotalValue – całkowita cena netto kosztu dostawy,
  • Time – ilość dni, którą należy dodać do dzisiejszej daty, aby uzyskać najwcześniejszą możliwą do wyboru datę dostawy,
  • TotalValue – cen całkowita kosztu dostawy,
  • VAT - stawka podatku VAT,
 
 
cart.SelectedDeliveryPaymentChannelKey
Wybrany kanał płatności.
 
 
cart.SelectedDeliveryPaymentId
Id wybranej metody płatności.
 
 
cart.SplitPayment
Podział płatności.
 
 
cart.SubtotalPrices
Informacja czy ceny w koszyku pokazywane są z podatkiem VAT.
 
 
cart.ThirdPartyHTML
Zawiera kod wywoływanego skryptu, jeśli została wprowadzona odpowiednia konfiguracja w Panelu administracyjnym związana z obsługą Wiarygodne Opinie - Opineo.pl, Zaufane Opinie, Program Ochrony Kupujących - Ceneo.pl, lub Wiarygodne Opinie - Okazje.info.
 
 
cart.ThirdPartyScripts
Zawiera kod wywoływanego skryptu, jeśli została wprowadzona odpowiednia konfiguracja w Panelu administracyjnym związana z obsługą Wiarygodne Opinie - Opineo.pl, Zaufane Opinie, Program Ochrony Kupujących - Ceneo.pl, lub Wiarygodne Opinie - Okazje.info.
 
 
cart.VATValue
Wartość podatku VAT w koszyku.
 
 

Jak wykonać kopię bezpieczeństwa mojego szablonu?

Jak wykonać kopię bezpieczeństwa mojego szablonu?

Oprawa wizualna sklepu jest bardzo ważnym elementem podczas prowadzenia sprzedaży w sieci. Narzędzie Kreator Wyglądu Comarch e-Sklep umożliwia stworzenie własnych, niepowtarzalnych szablonów wedle preferencji i potrzeb użytkowników. W intuicyjnym narzędziu jakim jest Kreator, będziesz w stanie zaprojektować wszelkie niezbędne funkcje, takie jak stronę główną, listę towarów, szczegóły towaru oraz koszyk. Jeśli Twój projekt szablonu został zaimportowany do e-Sklepu oraz skonfigurowany wedle Twoich preferencji (dodanie grafik do bannerów, modyfikacje kolorystyczne) masz możliwość jego zapisania, co będzie stanowić kopię bezpieczeństwa. Kopia bezpieczeństwa to dane, które w każdej chwili można odtworzyć w przypadku ich utracenia (np. poprzez przypadkowe usunięcie) lub częstego wprowadzania zmian. Dane, jakie może zawierać kopia bezpieczeństwa to szablon, który wcześniej został przez nas wygenerowany wraz z bannerami. Zaleca się wykonywanie kopii zapasowych oraz zabezpieczenie ich hasłem. Każda wykonana kopia zapasowa powinna zostać zapisana w bezpiecznym i dogodnym dla Użytkownika miejscu.

Jak wykonać kopię bezpieczeństwa?

W Panelu Administracyjnym przejdź do sekcji Wygląd sklepu/ Ustawienia/ Edytuj ustawienia zaawansowane, a następnie przejdź do zakładki Eksport szablonu. W pustych polach znajdujących się w zakładce Eksport szablonu, opcjonalnie przed eksportem możesz uzupełnić powyższe dane, tj. Autora szablonu, e-mail, telefon i stronę WWW sklepu. Aby wyeksportować szablon, kliknij Eksportuj szablon. Wyeksportowany plik jest w formacie XML, a jego nazwa zawiera szablon oraz wersję, co znacznie ułatwia zarządzanie kopiami bezpieczeństwa w przypadku wykonywania ich regularnie.

Jak wyeksportować bannery?

Bannery, które znajdują się w Twoim sklepie możesz również wyeksportować tworząc kopię bezpieczeństwa. W tym celu także musisz przejść do Wygląd sklepu/ Ustawienia/ Edytuj ustawienia zaawansowane, a następnie do zakładki Eksport szablonu. Obok przycisku Eksportuj szablon, znajduje się przycisk Eksportuj bannery, który musisz kliknąć aby bannery, które posiadasz w e-Sklepie zostały weksportowane. Kopia bezpieczeństwa jest również zapisywana w formacie XML, a nazwa pliku wskazuje na szablon, wersję i zawartość bannerów.

Jak zabezpieczyć hasłem swój szablon?

Jeśli chcesz, aby Twój szablon został zabezpieczony hasłem, a znajomość hasła była niezbędna podczas zaimportowania tego szablonu do e-Sklepu, musisz w tym celu przejść w Panelu Administracyjnym do sekcji Wygląd sklepu/ Ustawienia/ Ustawienia zaawansowane, następnie do zakładki Szablon. W tym miejscu nadasz hasło dla swojego szablonu. Zgodnie z Polityką bezpieczeństwa haseł, hasło powinno:
  • Składać się z minimum 8 znaków,
  • Zawierać dużą literę,
  • Zawierać małą literę,
  • Zawierać cyfrę 0-9,
  • Zawierać znak specjalny – ‘!.+?;^]=-(&_)#=
Gotowe! Teraz Twój szablon został zabezpieczony hasłem. Jeśli wyeksportujesz szablon, który zabezpieczyłeś hasłem – podczas importu tego szablonu, będziesz musiał podać nadane wcześniej hasło. Jego brak uniemożliwi import szablonu, a podanie błędnego hasła spowoduje nieprawidłowe działanie szablonu po imporcie. Więcej informacji znajdziesz:

Dodanie konfigurowalności strony głównej w szablonie Szafir

Dodanie konfigurowalności strony głównej w szablonie Szafir

W tym artykule dowiesz się jak zmodyfikować szablon Szafir, aby strona główna była konfigurowalna.
Wskazówka
Instrukcja przeznaczona jest dla sklepów od wersji 2022.4, które posiadają starsze szablony. Artykuł przeprowadzi Cię przez proces modyfikacji plików js oraz scss. Dodatkowe informacje o kompilacji i minifikacji znajdziesz w centrum pomocy.

Krok 1.

W panelu administracyjnym przejdź do sekcji Wygląd sklepu/Ustawienia. Następnie, mając wybrany szablon Szafir, w prawym górnym rogu wybierz więcej, po czym przejdź do Edytuj ustawienia zaawansowane/więcej/edytuj HTML.

Krok 2.

Odnajdź plik __settings.liquid. Następnie w drugiej linijce dodaj poniższy kod: {% assign homepage = "Strona główna" -%} {% assign elementsAtHomepage = "Lista elementów na stronie głównej sklepu" -%} {% assign name = "Nazwa" -%} {% assign parameters = "Parametry" -%} {% assign mainBanner = "Baner główny" -%} {% assign mainBannerLink = "Przejdź do edycji tego bannera" -%} {% assign newsSection = "Sekcja Nowości" -%} {% assign newsSectionLink = "Przejdź do edycji zawartości tej sekcji" -%} {% assign newsletter = "Newsletter" -%} {% assign manufacturersSlider = "Slider Producenci" -%} {% assign news = "Aktualności" -%} {% assign newsLink = "Przejdź do listy artykułów bloga" -%} {% assign infographicBanner = "Banner infografika" -%} {% assign infographicBannerLink = "Przejdź do edycji tego bannera" -%} {% assign animationOnHover = "Animacja na hoverze" -%} {% assign brandsSlider = "Slider Marki" -%} Następnie wyszukaj linijkę border-bottom: 1px solid #ddd; i pod nią dodaj display: flex;. Parę linijek niżej znajduje się kod: #lg-settings-content .row::after { display: block; clear: both; content: ''; } #lg-settings-content .cell { border-left: 1px solid #ddd; display: inline-block; vertical-align: middle; width: calc((100% - 308px)/4); min-height: 20px; padding: 10px; float: left; } Usuń go, a następnie wklej następujący kod: #lg-settings-content .cell { border-left: 1px solid #ddd; width: calc((100% - 308px)/4); padding: 10px; } #lg-settings-content .elements-at-homepage .cell.name{ width: 130px; } #lg-settings-content .elements-at-homepage .cell.translation{ width: 160px; } #lg-settings-content .elements-at-homepage .cell.parameters{ width: calc(100% - 515px); } #lg-settings-content .elements-at-homepage .cell.goto{ width: 100%; } Wyszukaj frazę {{navigationBarSettings}} i zamień ją na {{homepage}}. Następnie odszukaj frazę {{newsletter}} i usuń całą sekcję fieldset w której się ona znajduje. To samo zrób w przypadku fraz {{homepageBannerTranslation}}, {{blogOnHomepage}} oraz {{categoryMenu}}. Kilka linijek niżej znajdziesz id="tab1Content". Pod tą linijką dodaj poniższy fragment:

{{navigationBarSettings}}

Następnie znajdź frazę id="tab2Content" i dwie linijki wyżej wklej następujący kod:
{{categoryMenu}}

{{categoryMenuInfo}}

{{elementsAtHomepage}}
{{available}}
{{number}}
{{name}}
{{translationId}}
{{parameters}}
{{mainBanner}}

{{animationTypeTranslation}}

{{newsSection}}

{{animationOnHover}}

{{newsletter}}
{{manufacturersSlider}}

{{animationOnHover}}

{{brandsSlider}}

{{animationOnHover}}

{{news}}

{{blogPresentationOnHomepage}}

{{animationOnHover}}

{{infographicBanner}}

{{animationOnHover}}

Teraz wyszukaj funkcję __SaveLiquidSettings i linijkę wyżej wklej poniższy kod: $('.pa-translation-link').each(function(){ var id = $(this).text(); var url = $(this).attr('href').replaceAll('__ID__', id); $(this).attr('href', url); }); $('.pa-link').each(function(){ var id = $(this).data('id'); var url = $(this).attr('href').replaceAll('__ID__', id); $(this).attr('href', url); });

Krok 3.

Następnie w pliku home.html w pierwszych linijkach znajdziesz taki fragment kodu: {% include 'common/banner.html' -%}

{{translations.NewProducts}}

{% if customer.HidePrices -%} {% include 'product/hidden-prices-msg.html' -%} {% endif -%} {% include 'product/minibox-grid.html' -%}
{% unless customer.NewsletterSubscriber or settings.newsletter == 'no' -%}

Przykładowe modyfikacje

Wyszukiwarka zaawansowana w szablonie Topaz

Wyszukiwarka zaawansowana w szablonie Topaz

W tym artykule dowiesz się jak zmodyfikować swój szablon Topaz, aby obsługiwał wyszukiwarkę zaawansowaną.
Wskazówka
Niniejsza instrukcja przeznaczona jest dla sklepów w wersji 2020.2 lub nowszej!
Wskazówka
Kopiowanie fraz, które należy wyszukać w kodzie, może powodować problemy. Frazy do wyszukania najlepiej przepisać ręcznie, lub skopiować, ale po skopiowaniu podmienić znaki typu - _ ' " itp. W przeciwnym wypadku, fraza może nie zostać odnaleziona w kodzie!
Wskazówka
W tym artykule trzeba będzie wprowadzać zmiany w plikach js i css. Z tego artykułu dowiesz się jak je minifikować
Pierwszym krokiem jest dodanie obiektu wykorzystywanego w wyszukiwarce. Aby to zrobić, otwórz Panel Administracyjny, a następnie zakładkę Wygląd sklepu -> Ustawienia. Kliknij w prawym górnym rogu na ikonkę z trzema kwadratami i z rozwiniętego menu wybierz opcję Edytuj ustawienia zaawansowane. Przejdź do zakładki Obiekty. Kliknij przycisk Dodaj. W polu Typ wybierz Menu producentów i marek a w polu Nazwa podaj manufacturer-brand, po czym kliknij Dodaj. W ten sposób utworzony został obiekt, dzięki któremu wyszukiwarka będzie mogła wybierać spośród producentów i marek. Następnie należy przypisać obiekt do wyszukiwarki. Podobnie jak przed chwilą, otwórz Panel Administracyjny, a następnie zakładkę Wygląd sklepu -> Ustawienia -> Edytuj ustawienia zaawansowane. Wybierz zakładkę Strony. Znajdź stronę Wyszukiwanie zaawansowane (18). W tym samym wierszu, w kolumnie z nazwą pliku, wpisz advanced-search.html, a następnie zapisz. Kliknij na pole z napisem Wyszukiwanie zaawansowane (18). Pojawi się lista dostępnych obiektów. Kliknij kwadrat przy utworzonym wcześniej obiekcie manufacturer-brand, by pokazał się znak wyboru (tzw. "ptaszek"). A następnie zapisz. Kolejnym krokiem jest utworzenie nowego pliku o nazwie advanced-search.html w głównym katalogu z plikami Twojego szablonu Topaz. Treść tego pliku powinna wyglądać następująco: {% extends '_layout.html' -%} {% block pageContent -%} {% include 'elements/advanced-search/advanced-search.html' -%} {% endblock -%} Następnie, przejdź do katalogu elements. Utwórz w nim nowy katalog pod nazwą advanced-search. Przejdź do nowo utworzonego katalogu, a następnie utwórz w nim plik o nazwie advanced-search.html. Do nowo utworzonego pliku wklej poniższy kod: {% include 'partials/common/breadcrumbs.html' -%} {% assign filters = products.FilteringOptions.Filters %}
 
 
 
 
   
 
{{translations.SearchIn}}
 

{{translations.Pro_ProductDescription}}

{{translations.Pro_ProductSymbol}}

{{translations.EanCode}}

{{translations.Man_ManufacturerCode}}

{{translations.Pro_productAttributes}}

{{translations.Pro_ProductCode}}
 
 
 
{{translations.Pro_productAttributes}}
 
{% if customer.HidePrices != true -%}
{{translations.PriceFrom}}
{{translations.PriceTo}}
 

{{translations.PricesDifference}}

 
{% endif -%}

{{translations.WithPhoto}}

{{translations.NewProduct}}

{{translations.Prize}}

{{translations.ExtraQuality}}

{{translations.ExtraPrice}}

{{translations.ProductFromNewsletter}}

{{translations.Promotion}}

{{translations.RecommendedProduct}}

{{translations.SellerRecomendation}}

{{translations.Sale}}

{{translations.BestReviewed}}
 
 
{% if manufacturer-brand.Manufacturer != 0 -%}
 
{{translations.Manufacturer}}
 
{% assign i = 1 -%} {% for manufacturer in manufacturer-brand.Manufacturers -%}

{{manufacturer.Name}} {% assign i = i | Plus: 1 -%} {% endfor -%}
 
{% endif -%} {% if manufacturer-brand.Brand != 0 -%}
 
{{translations.Brand}}
 
{% assign i = 1 -%} {% for brand in manufacturer-brand.Brands -%}

{{brand.Name}} {% assign i = i | Plus: 1 -%} {% endfor -%}
 
{% endif -%}
{% include 'partials/newsletter-global.html' -%}
Wskazówka
W przypadku problemów z narzędziem Liquid Sync, pliki należy dodać bezpośrednio przez Panel Administracyjny, w zakładce Wygląd sklepu -> Ustawienia -> Edytuj ustawienia zaawansowane -> Edytuj HTML.
Kolejny krok to dodanie odpowiedniej treści do plików .css, odpowiedzialnych za wygląd zaawansowanej wyszukiwarki towarów. W tym celu wróć do głównego katalogu z plikami Topaza, a następnie otwórz katalog css. Do znajdującego się w nim pliku layout.css Wklej na samym dole następujący, już zminifikowany kod: *{line-height:1.5em}.advancedSearch{max-width:1100px;height:auto;margin:40px auto;user-select:none}.advancedSearch select{-webkit-appearance:none;-moz-appearance:none;text-indent:1px;text-overflow:""}.advancedSearch input[type="checkbox"]{visibility:hidden;width:0;height:0}.advancedSearch .form__invalid-input{visibility:hidden}.advancedSearch .title{font-size:17px;font-weight:600;color:{{settings.primaryFontColor}};margin-bottom:20px;text-transform:uppercase}.advancedSearch .search{width:100%;height:40px;display:flex}.advancedSearch .search .searchInput{width:50%;height:42px;padding-left:20px;font-size:14px;color:{{settings.secondaryFontColor}};border:1px solid {{settings.inputLabelColor}};border-right:none}.advancedSearch .search .searchCategory{width:30%;height:42px;font-size:14px;color:{{settings.secondaryFontColor}};border:1px solid {{settings.inputLabelColor}};border-right:none;padding:0 10px;background-color:{{settings.primaryPageBgColor}};-webkit-appearance:none;-moz-appearance:none;appearance:none;text-indent:5px;background-position-x:97%;transition:200ms}.advancedSearch .search .searchCategory option:checked{color:#000000 !important}.advancedSearch .search .searchCategory:hover{background-image:url("https://static.comarchesklep.pl/files/fonts/fontawesome-pro-5.6.3-web/svgs/solid/caret-up.svg") !important}.advancedSearch .search .searchButton{width:20%;height:22px;background-color:{{settings.primaryBtnBgColor}};color:{{settings.primaryBtnFontColor}};border:1px solid {{settings.primaryBtnBorderColor}};text-align:center;text-decoration:none;text-transform:uppercase;padding:11px 0 7px;font-size:14px;cursor:pointer;transition:200ms}.advancedSearch .search .searchButton:hover{background-color:{{settings.primaryBtnHoverBgColor}};color:{{settings.primaryBtnHoverFontColor}};border:1px solid {{settings.primaryBtnHoverBorderColor}};transition:200ms}.advancedSearch .searchType{padding:30px 0 30px 15px;border-bottom:1px solid {{settings.borderColor}};display:block;flex-direction:row;width:calc(100% - 15px);list-style:none}.advancedSearch .searchType li{display:inline}.advancedSearch .searchType li>*{cursor:pointer}.advancedSearch .searchType li input{visibility:hidden;display:none}.advancedSearch .searchType li .option{font-size:14px;color:{{settings.primaryFontColor}};border-radius:50%;background-color:{{settings.primaryPageBgColor}};border:80% solid {{settings.primaryFontColor}}}.advancedSearch .searchType li label{margin:0 30px 0 5px;font-size:14px}.advancedSearch .searchType li label:before{height:15px;width:16px;margin-right:10px;border-radius:50%;border:1px solid #0000005e;content:"";display:inline-block}.advancedSearch .searchType li.selected label:before{border-color:#000000;-webkit-box-shadow:inset 0 0 0 5px #000000;-moz-box-shadow:inset 0 0 0 5px #000000;box-shadow:inset 0 0 0 5px #000000}.advancedSearch .propertyContainer{width:100%;padding:30px 0;border-bottom:1px solid {{settings.borderColor}}}.advancedSearch .propertyContainer .checkboxContainer{width:100%;display:flex;flex-direction:row;justify-content:space-between;flex-wrap:wrap}.advancedSearch .propertyContainer .checkboxContainer span{flex:0 1 25%;margin:10px 0;font-size:14px;color:{{settings.primaryFontColor}}}.advancedSearch .propertyContainer .checkboxContainer span .checkIcon{position:relative;top:-14px;left:-25px;fill:{{settings.checkColor}}}.advancedSearch .propertyContainer .checkboxContainer span .checkIcon svg{width:12px;height:12px}.advancedSearch .propertyContainer .checkboxContainer span label{margin-left:10px;display:inline-flex;height:20px}.advancedSearch .propertyContainer .checkboxContainer span input:checked+label:before{text-align:center;background-color:{{settings.checkActiveBgColor}};overflow:hidden;border:solid 1px {{settings.checkActiveBgColor}}}.advancedSearch .propertyContainer .checkboxContainer span input+label:before{content:" ";display:inline-block;cursor:pointer;position:relative;width:15px;height:15px;border-radius:4px;background-color:transparent;color:{{settings.borderColor}};border:1px solid {{settings.borderColor}};transition:all 200ms ease;margin-right:10px}.advancedSearch .propertyContainer .checkboxContainer span:hover,.advancedSearch .propertyContainer .checkboxContainer input:hover,.advancedSearch .propertyContainer .checkboxContainer label:hover{cursor:pointer}.advancedSearch .propertyContainer .checkboxContainer:after{content:"";flex:1 0 25%}.advancedSearch .propertyContainer .productFeaturesContainer{display:flex;width:100%;flex-direction:row;flex-wrap:wrap}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer{width:25%}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span{display:block}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span .price{width:100%;font-size:14px;margin-bottom:10px;color:{{settings.primaryFontColor}};display:block}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span input[type="number"]{height:40px;width:60%;font-size:14px;color:{{settings.secondaryFontColor}};border:1px solid {{settings.inputLabelColor}};margin-bottom:20px;text-align:right;padding-right:42px;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span .currency{position:relative;top:0;left:-40px;width:fit-content;margin:0;color:{{settings.secondaryFontColor}};font-size:14px}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures{width:75%;margin-top:15px}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures span{flex:0 1 33%;margin:10px 0;font-size:14px;color:{{settings.primaryFontColor}}}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures span label{margin-left:10px}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures:after{content:"";flex:0 1 33%}.advancedSearch .propertyContainer .productFeaturesContainer .hidePricesFeatures{width:100%}.advancedSearch .lastProperty{border:none} Do pliku layout-m.css wklej poniższy kod: @media only screen and (max-width: 768px){.advancedSearch{width:calc(100% - 40px);margin:0 auto}.advancedSearch input[type="checkbox"]{position:fixed}.advancedSearch .search{margin-top:20px;display:block;width:100%}.advancedSearch .search .searchInput{width:100%;display:block;border-right:1px solid {{settings.inputLabelColor}};margin-bottom:20px}.advancedSearch .search .searchCategory{width:100%;display:block;border-right:1px solid {{settings.inputLabelColor}};margin-bottom:20px}.advancedSearch .search .searchButton{display:block;width:100%}.advancedSearch .search .scrollingButton{display:block;width:100%;position:fixed;top:0;left:0;z-index:1}.advancedSearch .searchType{margin-top:110px;padding-left:0;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.advancedSearch .searchType li{display:inline-block;flex:50%;margin-bottom:10px}.advancedSearch .searchType li>label{margin:0}.advancedSearch .propertyContainer{margin:10px 0}.advancedSearch .propertyContainer .checkboxContainer span{flex:0 1 100%}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer{width:100%;display:flex;flex-direction:row;justify-content:space-between;flex-wrap:wrap}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span{flex:1 0 50%}.advancedSearch .propertyContainer .productFeaturesContainer .priceContainer span input[type="number"]{width:75%}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures{width:100%;display:flex;flex-direction:row;justify-content:space-between}.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures span{flex:0 1 100%}} Do pliku layout-d.css wklej poniższy kod: @media only screen and (min-width: 768px) and (max-width: 1150px){.advancedSearch{width:calc(100% - 40px);margin:0 auto}.advancedSearch .search{margin-top:20px}}@media only screen and (min-width: 768px) and (max-width: 1000px){.advancedSearch .propertyContainer .productFeaturesContainer .productFeatures span{flex:0 1 43%}} W ten sposób w Topazie znalazł się kod odpowiedzialny za wygląd wyszukiwarki zaawansowanej. Kolejny krok to dodanie tłumaczeń. W tym celu należy w Panelu Administratora wejść w Wygląd sklepu -> Ustawienia i wybrać zakładkę Tłumaczenia. Przycisk Dodaj pozwala na dodanie nowego tłumaczenia. Aby tłumaczenie zostało dodane, należy wprowadzić odpowiednie Id oraz frazę (Tekst). Lista Id oraz fraz do wprowadzenia: 1. AllCategories - Wszystkie kategorie 2. SearchElement - Szukaj towaru... 3. WithSequence - Wyrażenie 4. WithAllWords- Wszystkie słowa 5. WithAnyWord - Dowolne ze słów 6. WithPartOfWord - Część słowa 7. SearchIn - Szukaj w 8. EanCode - Kod EAN 9. PriceFrom - Cena od 10. PriceTo - Cena do 11. PricesDifference - Cena maksymalna musi być większa od ceny minimalnej 12. WithPhoto - Tylko ze zdjęciem 13. NewProduct - Nowość 14. Prize - Nagroda 15. ExtraQuality - Superjakość 16. ExtraPrice - Supercena 17. ProductFromNewsletter - Towar z gazetki 18. Promotion - Promocja 19. RecommendedProduct - Towar polecany 20. SellerRecomendation - Rekomendacja sprzedawcy 21. Sale - Wyprzedaż 22. BestReviewed - Najlepiej oceniany 23. Manufacturer - Producent 24. Brand - Marka
Wskazówka
<strong.Uwaga! Kopiując Id z powyższej instrukcji do Panelu Administracyjnego, upewnij się, że po danym Id nie została skopiowana żadna spacja.
Następnie należy dodać odpowiedni kod do plików js. W tym celu, w plikach Topaza, otwórz folder js a następnie plik layout0.js. Odszukaj linijkę z frazą productListFunctions.init();. Pod znalezioną linijką znajduje się linia ze znakiem }. Pod nią wklej następujący kod: if($('body').find('.advancedSearch').index() >= 0) { advancedSearchFunctions.init(); } Następnie otwórz plik layout1.js znajdujący się w tym samym katalogu. Poniższy kod możesz wkleić na samym początku pliku: var advancedSearchFunctions = { init: function () { this.events(); }, events: function () { $('body').on('click', '.js-search-item', function (e) { $(e.currentTarget).closest('.searchType').children('.selected').removeClass('selected'); $(e.currentTarget).parent().addClass('selected'); }); $('body').on('click', '.checkboxContainer > span', function (e) { var input = $(this).children('input'); if(input.prop("checked") == true) { input.prop( "checked", false); } else { input.prop("checked", true); } }); $('body').on('click','.search-radio', function(e) { if ($('.search-radio[value=searchAll]').is(":checked")) { $('.advanced-search-input').attr('name', 'searchAll'); } else if ($('.search-radio[value=searchWild]').is(":checked")) { $('.advanced-search-input').attr('name', 'searchWild'); } else if ($('.search-radio[value=searchAny]').is(":checked")) { $('.advanced-search-input').attr('name', 'searchAny'); } else { $('.advanced-search-input').attr('name', 'name'); } }); $('body').on('change', '#priceTo, #priceFrom', function(e) { var priceTo = Number($('#priceTo').val()); var priceFrom = Number($('#priceFrom').val()); if(priceTo != '') { $('#priceTo').val(parseInt(priceTo)); } if(priceFrom != '') { $('#priceFrom').val(parseInt(priceFrom)); } if(priceFrom > priceTo) { $('.form__invalid-input').css('visibility', 'visible'); $('.searchButton').prop('disabled', true); } else { $('.form__invalid-input').css('visibility', 'hidden'); $('.searchButton').prop('disabled', false); } }); $(window).scroll(function(){ let scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop(); if($('.newsletter1-wrapper')[0]) { if ($(this).scrollTop() > 300 && scrollBottom > 20 ) { $('.searchButton').addClass('scrollingButton'); } else { $('.searchButton').removeClass('scrollingButton'); } } else { if ($(this).scrollTop() > 300 ) { $('.searchButton').addClass('scrollingButton'); } else { $('.searchButton').removeClass('scrollingButton'); } } }); $(function(){ $('body').on('click', '.searchButton', function(e) { var t=$(this).parents('.advancedSearch'),hasValue=false,arr=$('#SearchAdvancedForm input[type!=hidden],#SearchAdvancedForm select').serializeArray(),i, data = t.find('input:not([disabled]), select:not([disabled]), textarea:not([disabled])').serializeArray(); var tab = []; for(i in arr) if(arr[i].value) {hasValue=true;break;} data.push({name: "__csrf", value: __CSRF}); $.post(null, data, function (d) { if (d.action.Redirect302) location.href = d.action.Redirect302; }); }); }); } } Ostatnim krokiem jest dodanie możliwości otwarcia wyszukiwarki zaawansowanej przy pomocy linku umieszczonego w stopce sklepu. Aby to zrobić, przejdź do pliku elements -> footer -> footer-1.html (jeśli w Kreatorze wybrałeś drugi rodzaj stopki, plik będzie nazywał się footer-2.html). Następnie wyszukaj linijkę z frazą advanced-search-link. W linijce tej znajduje się fragment href="#". Zamień znak # na {{config.DefinedPages.AdvancedSearch.Url}}. W ten sposób z poziomu stopki będzie można w prosty sposób otworzyć zaawansowane wyszukiwanie.

Ustawienia paska nawigacji w szablonie Szafir

Ustawienia paska nawigacji w szablonie Szafir

W tym artykule dowiesz się jak ustawić pasek nawigacji w swoim szablonie. Zmiany te pozwolą na dodanie m.in. przycisku importu koszyka i przycisku do pobrania przykładowego pliku CSV.
Wskazówka
W tym artykule trzeba będzie wprowadzać zmiany w plikach js i css. Z tego artykułu dowiesz się jak je minifikować

Uwaga
Zapis nazwa_folderu/nazwa_pliku.rozszerzenie oznacza, że aby znaleźć dany plik należy udać się do folderu o nazwie podanej przed ukośnikiem. Przykładowo: order/thx.html oznacza plik thx.html w folderze order

Pierwszym krokiem będzie zamiana treści w pliku common/navigation-bars/main-navigation-bar-partial.html. Ze względu na znaczną rozbudowę nie można wskazać konkretnych zmian, zatem udostępniamy cały kod, którym należy zastąpić kod obecny: {% if config.DefinedPages.WithdrawalRight.Id != page.PageId and config.DefinedPages.Payment.Id != page.PageId and config.DefinedPages.Shipping.Id != page.PageId and config.DefinedPages.Complaints.Id != page.PageId and config.DefinedPages.Loyalty.Id != page.PageId and config.DefinedPages.Registration.Id != page.PageId and config.DefinedPages.Login.Id != page.PageId and config.DefinedPages.Terms.Id != page.PageId and config.DefinedPages.Contact.Id != page.PageId and config.DefinedPages.Privacy.Id != page.PageId and config.DefinedPages.Blog.Id != page.PageId and config.DefinedPages.BlogDetails.Id != page.PageId and config.DefinedPages.PasswordReminder.Id != page.PageId and config.DefinedPages.CustomerProfile.Id != page.PageId and config.DefinedPages.About.Id != page.PageId and config.DefinedPages.SocialMedia.Id != page.PageId -%} {% assign togglingClass = '' -%} {% if page.PageId == config.DefinedPages.ProductDetails.Id -%} {% assign togglingClass = 'toggle-categories-lq' -%} {% endif -%} <nav class="header-categories-ui main-navigation-bar-ui"> <ul class="manufacturer-container-ui"> <li class="{% if config.DefinedPages.ProductList.Id == page.PageId or config.DefinedPages.Home.Id == page.PageId or config.DefinedPages.Manufacturers.Id == page.PageId -%} categories-opened-ui {% endif -%} {% if config.DefinedPages.AdvancedSearch.Id == page.PageId -%} login-back-ui {% endif -%} categories-option-ui categories-option-lq" > <a class="categories-label-ui category-links-ui categories-link-lq {{togglingClass}}" aria-label="categories-label" href="{{ config.DefinedPages.ProductList.Url }}" title="{{ translations.Contact }}"> <i class="va-mid-ui header-categories-icon-ui ti-menu"></i> <span class="va-mid-ui line-height-1-ui">{{translations.Categories}}</span> </a> </li> <li class="main-navigation-bar-links-ui"> <ul> {% assign manufacturersSize = manufacturer-brand.Manufacturers | Size -%} {% if usr.Authenticated == true -%} {% if settings.discountsPresentationInCustomerProfileInPromotionsTab == 'yes' and settings.promotions -%} <li class="no-on-mobile-ui" style="order: {{settings.promotionsNo}};"> <a href="{{settings.promotionsLink}}"> {% if settings.promotionsIcon != '' -%} <i class="va-mid-ui {{settings.promotionsIcon}} header-manufacturers-icon-ui header-categories-icon-ui"></i> {% endif -%} <span class="va-mid-ui line-height-1-ui documents-ui"> {% if settings.promotionsTranslation != '' -%} {{ translations[settings.promotionsTranslation] }} {% else -%} {{ settings.promotionsLabel }} {% endif -%} </span> </a> </li> {% endif -%} {% if settings.documents -%} <li class="no-on-mobile-ui" style="order: {{settings.documentsNo}};"> <a href="{{settings.documentsLink}}"> {% if settings.documentsIcon != '' -%} <i class="va-mid-ui {{settings.documentsIcon}} header-manufacturers-icon-ui header-categories-icon-ui"></i> {% endif -%} <span class="va-mid-ui line-height-1-ui documents-ui"> {% if settings.documentsTranslation != '' -%} {{ translations[settings.documentsTranslation] }} {% else -%} {{ settings.documentsLabel }} {% endif -%} </span> </a> </li> {% endif -%} {% assign manufacturers = settings.authenticatedManufacturers -%} {% assign manufacturersNo = settings.authenticatedManufacturersNo -%} {% assign manufacturersIcon = settings.authenticatedManufacturersIcon -%} {% assign manufacturersLabel = settings.authenticatedManufacturersLabel -%} {% assign manufacturersTranslation = settings.authenticatedManufacturersTranslation -%} {% assign manufacturersLink = settings.authenticatedManufacturersLink -%} {% assign searchAdvanced = settings.authenticatedSearchAdvanced -%} {% assign searchAdvancedNo = settings.authenticatedSearchAdvancedNo -%} {% assign searchAdvancedIcon = settings.authenticatedSearchAdvancedIcon -%} {% assign searchAdvancedLabel = settings.authenticatedSearchAdvancedLabel -%} {% assign searchAdvancedTranslation = settings.authenticatedSearchAdvancedTranslation -%} {% assign searchAdvancedLink = settings.authenticatedSearchAdvancedLink -%} {% assign cartImport = settings.authenticatedCartImport -%} {% assign cartImportNo = settings.authenticatedCartImportNo -%} {% assign cartImportIcon = settings.authenticatedCartImportIcon -%} {% assign cartImportLabel = settings.authenticatedCartImportLabel -%} {% assign cartImportTranslation = settings.authenticatedCartImportTranslation -%} {% assign cartImportLink = settings.authenticatedCartImportLink -%} {% assign downloadCSV = settings.authenticatedDownloadCSV -%} {% assign downloadCSVNo = settings.authenticatedDownloadCSVNo -%} {% assign downloadCSVIcon = settings.authenticatedDownloadCSVIcon -%} {% assign downloadCSVLabel = settings.authenticatedDownloadCSVLabel -%} {% assign downloadCSVTranslation = settings.authenticatedDownloadCSVTranslation -%} {% assign downloadCSVLink = settings.authenticatedDownloadCSVLink -%} {% assign customerLinks = settings.authenticatedCustomerLinks -%} {% else -%} {% assign manufacturers = settings.notAuthenticatedManufacturers -%} {% assign manufacturersNo = settings.notAuthenticatedManufacturersNo -%} {% assign manufacturersIcon = settings.notAuthenticatedManufacturersIcon -%} {% assign manufacturersLabel = settings.notAuthenticatedManufacturersLabel -%} {% assign manufacturersTranslation = settings.notAuthenticatedManufacturersTranslation -%} {% assign manufacturersLink = settings.notAuthenticatedManufacturersLink -%} {% assign searchAdvanced = settings.notAuthenticatedSearchAdvanced -%} {% assign searchAdvancedNo = settings.notAuthenticatedSearchAdvancedNo -%} {% assign searchAdvancedIcon = settings.notAuthenticatedSearchAdvancedIcon -%} {% assign searchAdvancedLabel = settings.notAuthenticatedSearchAdvancedLabel -%} {% assign searchAdvancedTranslation = settings.notAuthenticatedSearchAdvancedTranslation -%} {% assign searchAdvancedLink = settings.notAuthenticatedSearchAdvancedLink -%} {% assign cartImport = settings.notAuthenticatedCartImport -%} {% assign cartImportNo = settings.notAuthenticatedCartImportNo -%} {% assign cartImportIcon = settings.notAuthenticatedCartImportIcon -%} {% assign cartImportLabel = settings.notAuthenticatedCartImportLabel -%} {% assign cartImportTranslation = settings.notAuthenticatedCartImportTranslation -%} {% assign downloadCSV = settings.notAuthenticatedDownloadCSV -%} {% assign downloadCSVNo = settings.notAuthenticatedDownloadCSVNo -%} {% assign downloadCSVIcon = settings.notAuthenticatedDownloadCSVIcon -%} {% assign downloadCSVLabel = settings.notAuthenticatedDownloadCSVLabel -%} {% assign downloadCSVTranslation = settings.notAuthenticatedDownloadCSVTranslation -%} {% assign customerLinks = settings.notAuthenticatedCustomerLinks -%} {% endif -%} {% assign manufacturersSize = manufacturer-brand.Manufacturers | Size -%} {% if manufacturers and manufacturersSize > 0 -%} <li class="{% if page.PageId == config.DefinedPages.Manufacturers.Id -%} active-bar-ui {% else -%} no-on-mobile-ui {% endif -%}" style="order: {{manufacturersNo}};"> {% if page.PageId == config.DefinedPages.Manufacturers.Id -%} <span class="block-ui page-label-ui"> {% else -%} <a href="{{manufacturersLink}}"> {% endif -%} {% if manufacturersIcon != '' -%} <i class="va-mid-ui {{manufacturersIcon}} header-manufacturers-icon-ui"></i> {% endif -%} <span class="va-mid-ui line-height-1-ui"> {% if manufacturersTranslation != '' -%} {{ translations[manufacturersTranslation] }} {% else -%} {{ manufacturersLabel }} {% endif -%} </span> {% if page.PageId != 20 -%} </a> {% else -%} </span> {% endif -%} </li> {% endif -%} {% if searchAdvanced -%} <li class="{% if config.DefinedPages.AdvancedSearch.Id == page.PageId -%} active-bar-ui {% else -%} no-on-mobile-ui {% endif -%}" style="order: {{searchAdvancedNo}};"> {% if config.DefinedPages.AdvancedSearch.Id == page.PageId -%} <span class="block-ui page-label-ui"> {% else -%} <a href="{{searchAdvancedLink}}"> {% endif -%} {% if searchAdvancedIcon != '' -%} <i class="va-mid-ui {{searchAdvancedIcon}} header-manufacturers-icon-ui"></i> {% endif -%} <span class="va-mid-ui line-height-1-ui"> {% if searchAdvancedTranslation != '' -%} {{ translations[searchAdvancedTranslation] }} {% else -%} {{ searchAdvancedLabel }} {% endif -%} </span> {% if config.DefinedPages.AdvancedSearch.Id != page.PageId -%} </a> {% else -%} </span> {% endif -%} </li> {% endif -%} {% if cartImport -%} <li class="no-on-mobile-ui" style="order: {{cartImportNo}};"> <label for="file" class="import-cart-lq import-cart-ui block-ui page-label-ui"> {% if cartImportIcon != '' -%} <i class="{{cartImportIcon}} header-manufacturers-icon-ui"></i> {% endif -%} {% if cartImportTranslation != '' -%} {{ translations[cartImportTranslation] }} {% else -%} {{ cartImportLabel }} {% endif -%} </label> <input class="import-cart-input-lq" id="file" type="file" name="file" accept=".csv" {% if settings.afterAddingToCart == 1 -%} data-redirect-url="{{ page.BaseHref }}{{ config.DefinedPages.Order.Url }}" {% endif -%} /> {% if settings.afterAddingToCart == 3 -%} <div class="message-popup-background-ui after-importing-cart-popup-lq container-to-hide-lq hide-container-lq hidden-lq"> {% include 'product/after-adding-to-cart.html' -%} </div> {% endif -%} <div class="importing-cart-succeed-lq message-popup-background-ui hidden-lq hide-lq container-to-hide-lq" data-url="{{ page.BaseHref }}{{ config.DefinedPages.Order.Url }}"> <div class="message-popup-ui box-ui after-adding-to-cart-popup-ui after-importing-popup-container-lq"> <div class="box-ui product-added-to-cart-ui"> <i class="va-mid-ui ti-check"></i> <span class="va-mid-ui line-height-1-ui"> {% if customer.Cart.EditedOrderId -%} {{ translations.AddedToOrder }} {% else -%} {{ translations.AddedToCart }} {% endif -%} </span> </div> </div> </div> <div class="during-ajax-modal-lq during-ajax-modal-ui hidden-lq"> <div class="loader-ui big-ui"></div> </div> </li> {% endif -%} {% if downloadCSV -%} <li class="no-on-mobile-ui" style="order: {{downloadCSVNo}};"> <a href="usr/cart_importcsv_file.csv"> {% if downloadCSVIcon != '' -%} <i class="{{downloadCSVIcon}} header-manufacturers-icon-ui"></i> {% endif -%} {% if downloadCSVTranslation != '' -%} {{ translations[downloadCSVTranslation] }} {% else -%} {{ downloadCSVLabel }} {% endif -%} </a> </li> {% endif -%} {% for customerLink in customerLinks -%} {% if customerLink.available -%} <li class="no-on-mobile-ui" style="order: {{customerLink.no}};"> <a href="{{customerLink.link}}"> {% if customerLink.icon != '' -%} <i class="{{customerLink.icon}} header-manufacturers-icon-ui"></i> {% endif -%} {% if customerLink.translation != '' -%} {{ translations[customerLink.translation] }} {% else -%} {{ customerLink.label }} {% endif -%} </a> </li> {% endif -%} {% endfor -%} </ul> </li> </ul> </nav> {% endif -%} Następnie dodamy ustawienia do szablonu. W tym celu należy użyć narzędzia wyszukiwania w pliku _settings.liquid i wyszukać pierwsze wystąpienie frazy {% else %}, a następnie wkleić następujący kod linijkę wyżej: {% assign general = "Ogólne" -%} {% assign navigationBarSettings = "Ustawienia paska nawigacji na stronie głównej" -%} {% assign notAuthenticatedInfo = "Lista elementów zawartych w pasku nawigacji dla klientów niezalogowanych" -%} {% assign authenticatedInfo = "Lista elementów zawartych w pasku nawigacji dla klientów zalogowanych" -%} {% assign available = "Dostępne" -%} {% assign number = "Lp" -%} {% assign icon = "Ikona" -%} {% assign polishLabel = "Etykieta PL" -%} {% assign translationId = "Id tłumaczenia" -%} {% assign linkAction = "link/akcja" -%} {% assign cartImport = "Import koszyka" -%} {% assign cartImportInfo = "Opcja importu koszyka z pliku CSV" -%} {% assign downloadCSV = "Pobierz przykładowy plik CSV" -%} {% assign downloadCSVInfo = "Przykładowy plik CSV do importu koszyka" -%} {% assign searchAdvanced = "Wyszukiwarka zaawansowana" -%} {% assign promotions = "Promocje" -%} {% assign documents = "Dokumenty" -%} {% assign addLink = "Dodaj link" -%} {% assign delete = "Usuń" -%} W tym sam pliku szukamy pierwszego wystąpienia frazy {% endcase %} i wklejamy następujący kod linijkę wyżej: {% assign general = "General" -%} {% assign navigationBarSettings = "Homepage navigation bar settings" -%} {% assign notAuthenticatedInfo = "List of elements in navigation bar for not authenticated customers" -%} {% assign authenticatedInfo = "List of elements in navigation bar for authenticated customers" -%} {% assign available = "Available" -%} {% assign number = "No" -%} {% assign icon = "Icon" -%} {% assign polishLabel = "Label PL" -%} {% assign translationId = "Translation Id" -%} {% assign linkAction = "link/action" -%} {% assign cartImport = "Cart import" -%} {% assign cartImportInfo = "Cart import option from CSV file" -%} {% assign downloadCSV = "Download sample CSV file" -%} {% assign downloadCSVInfo = "Sample CSV file for cart import" -%} {% assign searchAdvanced = "Search advanced" -%} {% assign promotions = "Promotions" -%} {% assign documents = "Documents" -%} {% assign addLink = "Add link" -%} {% assign delete = "Delete" -%}

Kolejnym krokiem jest wyszukanie frazy <script> oraz wklejenie bezpośrednio nad nią następującego kodu:

<div id="tab1Content"> <fieldset> <legend>{{notAuthenticatedInfo}}</legend> <div> <div class="row"> <div class="cell available">{{available}}</div> <div class="cell no">{{number}}</div> <div class="cell">{{icon}}</div> <div class="cell">{{polishLabel}}</div> <div class="cell">{{translationId}}</div> <div class="cell">{{linkAction}}</div> <div class="cell delete">{{delete}}</div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="notAuthenticatedCartImport" {% if settings.notAuthenticatedCartImport -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="notAuthenticatedCartImportNo" value="{{ settings.notAuthenticatedCartImportNo }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCartImportIcon" value="{{ settings.notAuthenticatedCartImportIcon }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCartImportLabel" value="{{ settings.notAuthenticatedCartImportLabel }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCartImportTranslation" value="{{ settings.notAuthenticatedCartImportTranslation }}" /></div> <div class="cell">{{cartImportInfo}}</div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="notAuthenticatedDownloadCSV" {% if settings.notAuthenticatedDownloadCSV -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="notAuthenticatedDownloadCSVNo" value="{{ settings.notAuthenticatedDownloadCSVNo }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedDownloadCSVIcon" value="{{ settings.notAuthenticatedDownloadCSVIcon }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedDownloadCSVLabel" value="{{ settings.notAuthenticatedDownloadCSVLabel }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedDownloadCSVTranslation" value="{{ settings.notAuthenticatedDownloadCSVTranslation }}" /></div> <div class="cell">{{downloadCSVInfo}}</div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="notAuthenticatedSearchAdvanced" {% if settings.notAuthenticatedSearchAdvanced -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="notAuthenticatedSearchAdvancedNo" value="{{ settings.notAuthenticatedSearchAdvancedNo }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedSearchAdvancedIcon" value="{{ settings.notAuthenticatedSearchAdvancedIcon }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedSearchAdvancedLabel" value="{{ settings.notAuthenticatedSearchAdvancedLabel }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedSearchAdvancedTranslation" value="{{ settings.notAuthenticatedSearchAdvancedTranslation }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedSearchAdvancedLink" value="{{ settings.notAuthenticatedSearchAdvancedLink }}" /></div> <div class="cell delete"></div> </div> {% for customerLink in settings.notAuthenticatedCustomerLinks -%} <div class="row notAuthenticatedCustomerLink" data-index="{{forloop.index0}}"> <div class="cell available"><input type="checkbox" name="notAuthenticatedCustomerLink{{forloop.index0}}" {% if customerLink.available -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="notAuthenticatedCustomerLinkNo{{forloop.index0}}" value="{{ customerLink.no }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCustomerLinkIcon{{forloop.index0}}" value="{{ customerLink.icon }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCustomerLinkLabel{{forloop.index0}}" value="{{ customerLink.label }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCustomerLinkTranslation{{forloop.index0}}" value="{{ customerLink.translation }}" /></div> <div class="cell"><input type="text" name="notAuthenticatedCustomerLinkLink{{forloop.index0}}" value="{{ customerLink.link }}" /></div> <div class="cell delete"><div class="fa fa-trash"></div></div> </div> {% endfor -%} </div> <button class="add-link">{{addLink}}</button> <input name="customer-links" type="hidden" value="{{settings.notAuthenticatedCustomerLinks | Size }}" /> </fieldset> <fieldset> <legend>{{authenticatedInfo}}</legend> <div> <div class="row"> <div class="cell available">{{available}}</div> <div class="cell no">{{number}}</div> <div class="cell">{{icon}}</div> <div class="cell">{{polishLabel}}</div> <div class="cell">{{translationId}}</div> <div class="cell">{{linkAction}}</div> <div class="cell delete">{{delete}}</div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="authenticatedCartImport" {% if settings.authenticatedCartImport -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="authenticatedCartImportNo" value="{{ settings.authenticatedCartImportNo }}" /></div> <div class="cell"><input type="text" name="authenticatedCartImportIcon" value="{{ settings.authenticatedCartImportIcon }}" /></div> <div class="cell"><input type="text" name="authenticatedCartImportLabel" value="{{ settings.authenticatedCartImportLabel }}" /></div> <div class="cell"><input type="text" name="authenticatedCartImportTranslation" value="{{ settings.authenticatedCartImportTranslation }}" /></div> <div class="cell">{{cartImportInfo}}</div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="authenticatedDownloadCSV" {% if settings.authenticatedDownloadCSV -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="authenticatedDownloadCSVNo" value="{{ settings.authenticatedDownloadCSVNo }}" /></div> <div class="cell"><input type="text" name="authenticatedDownloadCSVIcon" value="{{ settings.authenticatedDownloadCSVIcon }}" /></div> <div class="cell"><input type="text" name="authenticatedDownloadCSVLabel" value="{{ settings.authenticatedDownloadCSVLabel }}" /></div> <div class="cell"><input type="text" name="authenticatedDownloadCSVTranslation" value="{{ settings.authenticatedDownloadCSVTranslation }}" /></div> <div class="cell">{{downloadCSVInfo}}</div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="promotions" {% if settings.promotions -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="promotionsNo" value="{{ settings.promotionsNo }}" /></div> <div class="cell"><input type="text" name="promotionsIcon" value="{{ settings.promotionsIcon }}" /></div> <div class="cell"><input type="text" name="promotionsLabel" value="{{ settings.promotionsLabel }}" /></div> <div class="cell"><input type="text" name="promotionsTranslation" value="{{ settings.promotionsTranslation }}" /></div> <div class="cell"><input type="text" name="promotionsLink" value="{{ settings.promotionsLink }}" /></div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="documents" {% if settings.documents -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="documentsNo" value="{{ settings.documentsNo }}" /></div> <div class="cell"><input type="text" name="documentsIcon" value="{{ settings.documentsIcon }}" /></div> <div class="cell"><input type="text" name="documentsLabel" value="{{ settings.documentsLabel }}" /></div> <div class="cell"><input type="text" name="documentsTranslation" value="{{ settings.documentsTranslation }}" /></div> <div class="cell"><input type="text" name="documentsLink" value="{{ settings.documentsLink }}" /></div> <div class="cell delete"></div> </div> <div class="row"> <div class="cell available"><input type="checkbox" name="authenticatedSearchAdvanced" {% if settings.authenticatedSearchAdvanced -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="authenticatedSearchAdvancedNo" value="{{ settings.authenticatedSearchAdvancedNo }}" /></div> <div class="cell"><input type="text" name="authenticatedSearchAdvancedIcon" value="{{ settings.authenticatedSearchAdvancedIcon }}" /></div> <div class="cell"><input type="text" name="authenticatedSearchAdvancedLabel" value="{{ settings.authenticatedSearchAdvancedLabel }}" /></div> <div class="cell"><input type="text" name="authenticatedSearchAdvancedTranslation" value="{{ settings.authenticatedSearchAdvancedTranslation }}" /></div> <div class="cell"><input type="text" name="authenticatedSearchAdvancedLink" value="{{ settings.authenticatedSearchAdvancedLink }}" /></div> <div class="cell delete"></div> </div> {% for customerLink in settings.authenticatedCustomerLinks -%} <div class="row authenticatedCustomerLink" data-index="{{forloop.index0}}"> <div class="cell available"><input type="checkbox" name="authenticatedCustomerLink{{forloop.index0}}" {% if customerLink.available -%} checked {% endif -%} /></div> <div class="cell no"><input type="number" name="authenticatedCustomerLinkNo{{forloop.index0}}" value="{{ customerLink.no }}" /></div> <div class="cell"><input type="text" name="authenticatedCustomerLinkIcon{{forloop.index0}}" value="{{ customerLink.icon }}" /></div> <div class="cell"><input type="text" name="authenticatedCustomerLinkLabel{{forloop.index0}}" value="{{ customerLink.label }}" /></div> <div class="cell"><input type="text" name="authenticatedCustomerLinkTranslation{{forloop.index0}}" value="{{ customerLink.translation }}" /></div> <div class="cell"><input type="text" name="authenticatedCustomerLinkLink{{forloop.index0}}" value="{{ customerLink.link }}" /></div> <div class="cell delete"><div class="fa fa-trash"></div></div> </div> {% endfor -%} </div> <button class="add-link authenticated">{{addLink}}</button> <input name="customer-links" type="hidden" value="{{settings.authenticatedCustomerLinks | Size }}" /> </fieldset> </div> </div>

Po wykonaniu powyższych instrukcji należy wyszukać frazy </style> i wkleić następujący kod bezpośrednio nad wyszukaną linijką:

#lg-settings-content #tab1Content fieldset { width: calc(100% - 50px); } #lg-settings-content .row { border-bottom: 1px solid #ddd; } #lg-settings-content .row:first-child { border-top: 1px solid #ddd; border-bottom: 2px solid #ddd; font-weight: 700; } #lg-settings-content .row::after { display: block; clear: both; content: ''; } #lg-settings-content .cell { border-left: 1px solid #ddd; display: inline-block; vertical-align: middle; width: calc((100% - 308px)/4); min-height: 20px; padding: 10px; float: left; } #lg-settings-content .cell:last-child { border-right: 1px solid #ddd; } #lg-settings-content .cell input { width: 100%; height: 20px; } #lg-settings-content .cell.available { width: 70px; } #lg-settings-content .cell.available input { display: block; margin: 0; cursor: pointer; } #lg-settings-content .cell.no { width: 50px; } #lg-settings-content .cell.no input { width: 40px; height: 14px; } #lg-settings-content .cell.delete { width: 40px; text-align: center; } #lg-settings-content .cell.delete .fa { cursor: pointer; } #lg-settings-content .yellow-box { padding: 20px; border: 1px solid #fec42f; font-size: 14px; font-weight: 400 !important; position: relative; } #lg-settings-content .yellow-box:after { content: ''; width: 30px; height: 30px; position: absolute; top: 10px; right: 15px; background: url(../../Content/Images/all/important.png) no-repeat; } Ostatnią zmianą w pliku będzie dodanie kodu bezpośrednio nad wyszukaną frazą } </script>: $('#lg-settings-content').on('click', '.fa-trash', function(e){ $(e.currentTarget).parents('.row').remove(); }); function addCustomerLinksArr(name, o){ var customerLinks = []; $('#lg-settings-content .'+name).each(function(i,el) { var index = $(this).data('index'); var available = $(this).find('[name='+name+index+']').prop('checked'); var no = $(this).find('[name='+name+'No'+index+']').val(); var icon = $(this).find('[name='+name+'Icon'+index+']').val(); var label = $(this).find('[name='+name+'Label'+index+']').val(); var translation = $(this).find('[name='+name+'Translation'+index+']').val(); var link = $(this).find('[name='+name+'Link'+index+']').val(); if(no && (label || translation) && link){ var obj = {available: available, no: no, icon: icon, label: label, translation: translation, link: link}; customerLinks.push(obj); } }); if(customerLinks.length > 0){ o[name+'s'] = customerLinks; } } function __SaveLiquidSettings(){ var o = {}; $('#lg-settings-content input[name]').each(function(i,el) { if($(el).attr('type') == 'radio' || $(el).attr('type') == 'checkbox') { if($(el).is(':checked')) { o[el.name] = el.value; } } else { o[el.name] = el.value; } }); addCustomerLinksArr('authenticatedCustomerLink', o); addCustomerLinksArr('notAuthenticatedCustomerLink', o); return o; } Następnie przechodzimy do pliku scss/desktop2.scss i na jego końcu wklejamy kod: .main-navigation-bar-ui{ background: $bgColor; .manufacturer-container-ui{ border-top: none; border-bottom: none; li{ margin-right: -1px; border-bottom: 1px solid $lightBorderColor; } .categories-opened-ui{ vertical-align: bottom; float: none; display: inline-block; margin-right: -5px; border-top: 1px solid $lightBorderColor; margin-bottom: 0px; height: 68px; } .main-navigation-bar-links-ui{ width: calc(100% - 320px); vertical-align: bottom; background: $menuBackgroundColor; float: none; display: inline-block; border-left: 1px solid $lightBorderColor; border-top: 1px solid $lightBorderColor; border-bottom: none; border-right: none; ul{ display: flex; flex-wrap: wrap; } } } } Teraz przejdź do Panelu Administratora. Wybierz Wygląd Sklepu/ Ustawienia i przejdź w zakładkę Tłumaczenia. Po kliknięciu w przycisk Dodaj należy wpisać Id tłumaczenia oraz Tekst, który będzie się wyświetlał w e-Sklepie. Zmiany należy zatwierdzić przyciskiem Dodaj.
  • Id: ShowProducts -- Tekst: Pokaż produkty
  • Id: ShowMore -- Tekst: Pokaż więcej
Ostatnim krokiem jest dodanie nowego elementu do nawigacji. W tym celu przejdź w zakładkę Szablon, a następnie Ustawienia paska nawigacji na stronie głównej, gdzie należy uzupełnić pola według własnych upodobań.
  • Etykieta PL - nazwa etykiety (na przykład: ti-import)
  • Id tłumaczenia - nazwa jaka będzie widoczna na elemencie
  • Link/Akcja - link do strony

Aktualizacja filtrów i wyszukiwarki w szablonach

Wskazówka
Od 1 czerwca 2025 roku zakończyliśmy aktualizację oraz wydawanie nowych wersji szablonów Bursztyn, Agat i Opal, a tym samym ich wsparcie, aby skupić się na nowoczesnych rozwiązaniach, które jeszcze lepiej odpowiadają na potrzeby dynamicznie rozwijającego się rynku e-commerce. Zachęcamy Was do przejścia na nasze nowe, udoskonalone szablony. Dla sklepów B2C polecamy szablony Topaz, One Page Shop oraz Dla Gastronomii, natomiast dla platform B2B idealnym wyborem będą Rubin i Szafir.

Aktualizacja filtrów i wyszukiwarki w szablonach

W tym artykule dowiesz się jak zmodyfikować swój szablon, aby w lepszy sposób obsługiwał filtry i wyszukiwarkę.
Wskazówka
W tym artykule trzeba będzie wprowadzać zmiany w plikach js. Z tego artykułu dowiesz się jak je minifikować.

Szafir

W pliku common/pagination.html wyszukaj frazę {% if products.Search -%}. W tym warunku znajduje się tylko jedna linijka. Podmień ją na {% capture url -%}{{products.Search.Url}}{% endcapture -%} Następnie w pliku js/init.js, wyszukaj funkcję filter, a w niej $.get. Zastąp go wraz z całą jego zawartością poniższym kodem: $.get('', param, function (result) { app.serverMessage(result, form, e); if (result.action.Result) { if(result.action.Redirect302 != null){ app.replace(result.action.Redirect302); } else { app.replace(window.location.pathname); } } });

Agat

W pliku partials/blog/list-pagination.html wyszukaj frazę {% if products.Search -%}. W tym warunku znajduje się tylko jedna linijka. Podmień ją na {% capture url -%}{{products.Search.Url}}{% endcapture -%} Następnie na początku pliku js/init2.js, wyszukaj funkcję oznaczoną komentarzem // filters, a w niej warunek if (d.length == 2 && !d[0].value && !d[1].value) {. Usuń ten warunek wraz z jego zawartością. Kilka linijek niżej jest $.get. Zastąp go wraz z całą jego zawartością poniższym kodem: $.get('', p, function (d) { if (d.action.Result) { if (d.action.Redirect302 != null) { LoadList(d.action.Redirect302); } } });

Bursztyn lub Opal

W pliku product/listpagination.html wyszukaj frazę {% if products.Search -%}. W tym warunku znajduje się tylko jedna linijka. Podmień ją na {% capture url -%}{{products.Search.Url}}{% endcapture -%} Następnie w pliku js/list.js, wyszukaj funkcję oznaczoną komentarzem // filters, a w niej warunek if (d.length == 2 && !d[0].value && !d[1].value) {. Usuń ten warunek wraz z jego zawartością. Kilka linijek niżej jest $.get. Zastąp go wraz z całą jego zawartością poniższym kodem: $.get('', p, function (d) { if (d.action.Result) { if (d.action.Redirect302 != null) { LoadList(d.action.Redirect302+'#products'); } } });

Topaz

W pliku partials/list-pagination.html wyszukaj frazę {% if products.Search -%}. W tym warunku znajduje się tylko jedna linijka. Podmień ją na {% capture url -%}{{products.Search.Url}}{% endcapture -%} Następnie w pliku js/layout.js, wyszukaj funkcję getSearchFilters, a w niej warunek if (d.length == 2 && !d[0].value && !d[1].value) {. Usuń ten warunek wraz z jego zawartością. Kilka linijek niżej jest $.get. Zastąp go wraz z całą jego zawartością poniższym kodem: $.get('', p, function (d) { if (d.action.Result) { if (d.action.Redirect302 != null) { location.href = d.action.Redirect302; } } });

Dodanie nowego widoku filtrów

Dodanie nowego widoku filtrów

Szablon Szafir umożliwia dodanie w nim nowego widoku filtrów oraz modyfikowację ustawienia szablonu, aby był bardziej czytelny. Zmiany wyglądu dotyczą opisu danej kategorii i graficznych odnośników do podkategorii.
Wskazówka
W tym artykule dowiesz się jak wprowadzać zmiany w plikach js i scss. Dodatkowe informacje o kompilacji i minifikacji znajdziesz w centrum pomocy.

Szafir

W pliku __settings.liquid dodaj poniżesze tłumaczenia: {% assign productsList = "Lista towarów" -%} {% assign filterPanel = "Panel filtra" -%} {% assign filterPanelView = "Widok panelu filtra" -%} {% assign filterPanelViewOption1 = "Po lewej pod menu kategorii" -%} {% assign filterPanelViewOption2 = "U góry nad listą towarów" -%} {% assign defaultSection = "Sekcja domyślnie" -%} {% assign closed = "Zwinięta" -%} {% assign opened = "Rozwinięta" -%} {% assign graphMenu = "Graficzne menu" -%} {% assign graphMenuInfo = "Dodatkowe, graficzne menu nawigacji do podgrup" -%} {% assign category = "Kategoria" -%} {% assign nameGraphDescCategory = "Nazwa, grafika i opis kategorii" -%} {% assign overProductsList = "Nad listą towarów" -%} {% assign underProductsList = "Pod listą towarów" -%} {% assign graphFormOfNameDescImgCategory = "Forma graficzna prezentowania nazwy, opisu i zdjęcia kategorii" -%} {% assign backgroundImage = "Zdjęcie w tle" -%} {% assign leftImage = "Zdjęcie po lewej" -%} W tym samym pliku wyszukaj frazę id="tab1" i linijkę niżej wklej: {{productsList}} Teraz wyszukaj frazę: {% endif -%}
{% endblock -%}
products/product-filters.html
{% if settings.filterPanelView == "left" -%}

{{translations.Filters}}

{% endif -%}
    {% assign fo = products.FilteringOptions -%} {% unless customer.HidePrices -%}
  • {{ translations.Price }}
    {{translations.RangeFrom | Downcase }} {{translations.RangeTo | Downcase }} {{ currencyExt }}
  • {% endunless -%} {% if settings.graphicColorFilter == 'yes' and color-filter.Content and color-filter.Content != '' %} {% assign colorFilterArr = color-filter.Content | StripNewlines | Split: '|||' -%} {% assign colorFilterName = colorFilterArr[0] -%} {% assign colorFilterValues = colorFilterArr[1] | Split: '||' -%} {% endif -%} {% for filter in fo.Filters -%} {% unless filter.Field == 'MARK' and config.Reviews.Enabled == false -%} {% assign isSthSelected = false -%} {% assign allSelected = false -%} {% assign selectedQuantity = 0 -%} {% for value in filter.Values -%} {% if value.Selected -%} {% if isSthSelected == false and settings.toggleFilters == 2 -%} {% assign isSthSelected = true -%} {% endif -%} {% capture stringToAdd -%}{{value.Field}}|{{filter.Heading}}|{{value.Value}}|{{value.Text}}||{% endcapture -%} {% assign activeFiltersKeysString = activeFiltersKeysString | Append: stringToAdd -%} {% assign activeFiltersQuantity = activeFiltersKeysString | Split:'||' | Size -%} {% assign selectedQuantity = selectedQuantity | Plus: 1 -%} {% assign filtersQuantity = filter.Values | Size -%} {% if selectedQuantity == filtersQuantity -%} {% assign allSelected = true -%} {% endif -%} {% endif -%} {% endfor -%}
  • {% if settings.filterPanelView == "left" -%} {% else -%} {% endif -%}
    {% assign filterValuesLength = filter.Values | Size -%} {% if filter.Field == colorFilterName or isSthSelected or settings.filterPanelView == "up" -%} {% assign limit = filterValuesLength | ToInt -%} {% else -%} {% assign limit = settings.maxfilter | ToInt -%} {% endif -%}
    {% for value in filter.Values limit: limit -%} {% endfor -%}
    {% if filterValuesLength > limit and filter.Field != colorFilterName and settings.filterPanelView == "left" -%} {% endif -%}
  • {% endunless -%} {% endfor -%} {% if settings.filterPanelView == "up" -%}
  • {% endif -%}
{% if settings.filterPanelView == "left" -%} {% endif -%}
W pliku common/categories-navigation/categories-navigation-partial.html na samym dole znajdź warunek {% if areFilteringOptionsClass == 'with-filters-ui' -%} i zamień go na {% if areFilteringOptionsClass == 'with-filters-ui' and settings.filterPanelView == "left" -%} Następnie w pliku js/init.js znajdź frazę events: function() i linijkę niżej wklej poniższy kod: $('body').on('change', '.all-values-checkbox-lq', function(e) { var isChecked = $(e.currentTarget).prop('checked'); $(e.currentTarget).parents('.filter-item-lq').find('[type=checkbox]').prop('checked', isChecked); }); $('body').on('change', '.filters-up-lq .product-filters-lq input', function(e) { app.filter(e); }); Kontynuując zmiany w tym samym pliku, wyszukaj frazę form.find('[type="number"]').val(''); i zmień tam number na tel. Na końcu funkcji w której znajduje się ta fraza dopisz app.filter(e);. Przejdź do pliku js/init-ui1.js i na samym końcu wklej poniższy kod: $('body').on('click', '.toggle-filters-button-lq', function () { $('.filters-label-lq').toggleClass('hidden-lq'); }); W tym momencie masz już dodany filtr, w następnych krokach będziesz edytował styl. W pliku scss/globals/_globals-m.scss znajdź frazę .products-page-lq{ i usuń z tej klasy margin-top: 114px;. Kilka linijek niżej znajdziesz: .category-description-ui{ display: none; } Usuń ten fragment. Jeszcze niżej znajdziesz .category-img-ui{. Usuń w nim height: auto !important;. Znajdz i usuń poniższy fragment: .view-options-mobile-ui{ width: 21px; margin-right: 20px; } Linijkę niżej jest kod .sorting-options-ui{. Zmień w nim linijkę width: calc(100vw - 80px - 21px - 60px); na width: calc(100vw - 192px); i usuń oba wpisy związane z wysokością height: 26px;. Następnie w obrębie @media only screen and (max-width: 1279px) { (np w 2 linijce pliku) wklej poniższy kod: .products-navigation-ui.filters-up-ui .sorting-views-container-ui .sorting-options-ui{ .dropdown-trigger-ui{ padding: 10px; } .toggle-filters-button-ui{ padding-bottom: 0; & + .active-sorting-option-ui{ display: block; } } } .filters-up-main-container-ui{ margin: 0; } .filters-up-ui{ position: static; margin: 0; width: 100%; background-color: $bgColor; .sorting-views-container-ui{ padding: 20px 20px 0 20px; } .product-filters-ui{ position: static; padding: 0; background: $bgColor; & > ul{ margin: 20px; li{ width: calc(50% - 10px); &:first-child{ width: 100%; } &:nth-child(5n){ margin-right: 20px; } &:nth-child(2n+1){ margin-right: 0; } } } } } .undercategory-links-ui{ padding: 0 20px; a{ width: calc(50% - 10px); &:nth-child(5n){ margin-right: 20px; } &:nth-child(2n){ margin-right: 0; } } } Przejdz do pliku scss/globals/_globals1.scss na samym dole wklej poniższy kod: .undercategory-links-ui{ display: flex; flex-wrap: wrap; a{ width: calc(20% - 16px); border: 1px solid $lightBorderColor; margin: 0 20px 20px 0; padding: 20px; text-align: center; &:nth-child(5n){ margin-right: 0; } } .category-name-ui{ font-weight: 700; margin-bottom: 20px; color: $primaryColorFont; } img{ max-width: 100%; max-height: 200px; } } .graph-desc-category-down-ui{ display: flex; flex-flow: column; .category-section-ui{ order: 1; } } .category-section-ui{ button{ display: flex; width: 100%; align-items: center; justify-content: space-between; border: 1px solid $lightBorderColor; padding: 20px; background: transparent; color: $primaryColorFont; } h1{ font-size: 20px; color: $primaryColorFont; } &.left-ui{ .category-img-ui .category-container-ui .category-container-bg-ui{ max-width: none; } .category-img-lq{ display: flex; border: 1px solid $lightBorderColor; height: auto !important; } .img-container-ui{ min-width: 150px; max-width: 150px; padding: 20px; } img{ max-height: 100%; } .category-container-ui{ position: static; } .category-description-ui{ height: auto !important; } } } .filters-up-ui{ flex-wrap: wrap; .toggle-filters-button-ui + .active-sorting-option-ui{ transition: all ease 300ms; } .sorting-options-ui .toggle-filters-button-ui{ padding-bottom: 10px; &.with-quantity-ui{ padding-bottom: 0; } &.expanded-lq{ background-color: $btnSolidBgColor; color: $btnSolidTextColor; & + .active-sorting-option-ui{ background-color: $btnSolidBgColor; color: $btnSolidTextColor; } } } .product-filters-ui > ul{ display: flex; flex-wrap: wrap; li{ width: calc(20% - 16px); border: 1px solid $lightBorderColor; margin: 0 20px 20px 0; &:nth-child(5n){ margin-right: 0; } } .price-filter-ui{ padding: 20px; } .reset-filters-ui{ border: none; } .filter-drop-ui{ padding: 10px 20px; border-bottom: 1px solid $lightBorderColor; } .filter-value-list-ui{ padding: 10px 20px; overflow: auto; &::-webkit-scrollbar { width: 4px; border-radius: 50%; } &::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 4px transparent; } &::-webkit-scrollbar-thumb { background-color: rgba(#8E8E8E, 0.5); outline: none; border-radius: 2px; &:hover{ background-color: #8E8E8E; } } &.three-ui{ max-height: 140px; } &.five-ui{ max-height: 220px; } &.eight-ui{ max-height: 340px; } } } } Ostatnim krokiem będzie znalezienie w scss/partials/_product-list.scss frazy .change-view-ui i podmień margin-right na margin-left Jedyne zmiany w panelu administracyjnym wymagają dodania dwóch tłumaczeń. Wygląd sklepu -> Ustawienia -> Tłumaczenia: - CloseFilters: Zwiń filtry - ClearAllFilters: Wyczyść wszystkie filtry

Zmiana nagłówka sekcji polecanych towarów na przykładzie szablonu Topaz

Wstęp

W standardowym szablonie Topaz sekcja polecanych towarów domyślnie wyświetla się z nazwą "Towary polecane". W tym artykule dowiesz się w jaki sposób dostosować tą nazwę do swojego e-Sklepu.  

Dodanie tłumaczenia

Tytuł sekcji Towary polecane można zmienić dodając odpowiednie tłumaczenie do szablonu oraz edytując kod HTML szablonu. W pierwszej kolejności należy dodać tłumaczenie w sekcji Wygląd sklepu/ Ustawienia/ Tłumaczenia po kliknięciu w przycisk Dodaj należy wpisać Id tłumaczenia oraz Tekst, który będzie się wyświetlał w e-Sklepie. Zmiany należy zatwierdzić przyciskiem Dodaj.

Edycja kodu HTML

Następnie w panelu administracyjnym w sekcji: Wygląd sklepu/ Ustawienia/ Więcej (trzy kropki) / Edytuj ustawienia zaawansowane, a następnie Więcej/ Edytuj HTML należy przejść do katalogu elements/ recommended gdzie znajdują się pliki HTML z sekcjami Towary polecane. Tytuł sekcji znajduje się w linijce: <span class="recommended-products-title">{{ translations.Recommended }}</span> gdzie fragment Recommended jest Id tłumaczenia wprowadzanego w panelu administracyjnym. Aby zmienić nagłówek sekcji Towary polecane należy w miejsce Recommended wprowadzić Id wcześniej dodanego tłumaczenia. Po wprowadzonych zmianach w szablonie należy zapisać i opublikować zmiany.
Przyklad
Jeżeli w panelu administracyjnym dodałeś tłumaczenie o Id: PolecanaSekcja wówczas fragment kodu HTML powinien wyglądać następująco: <span class="recommended-products-title">{{ translations.PolecanaSekcja }}</span>
 
Wskazówka
Nadmierna ilość sekcji polecanych i wyświetlanych w niej towarów może obciążyć wyświetlanie strony w wyniku czego strona może się gorzej ładować i indeksować.

Zmiana nagłówka w pozostałych szablonach

W pozostałych standardowych szablonach Comarch zmiana nagłówka sekcji polecanych towarów odbywa się podobnie natomiast należy dokonać edycji następujących plików HTML:
  • szablon Agat – home-page.html
  • szablon Bursztyn – homepage.html
  • szablon Szafir – home.html

Szablon i treści wiadomości e-mail

Wstęp

Zmiana szablonu i treści wiadomości e-mail to jedna z tych rzeczy, która może wyróżnić nas na tle konkurencji. Mail, który przyciąga uwagę potrafi sprawić, że w przyszłości Klient szybciej skojarzy naszą firmę. Dodatkowo zmiana kolorystyki wyrazów w mailu może pomóc odbiorcy zwrócić uwagę na istotne informacje. W tym artykule dowiesz się, jak zarządzać powiadomieniami e-mail w Comarch e-Sklep, a także w jaki sposób możesz zarządzać szablonem domyślnym.
Uwaga
Dodatkowe modyfikacje stopki w szablonie wiadomości e-mail nie są wskazane dla osób, które nie posiadają wiedzy na temat kodowania w HTML.
Wskazówka
Po przeczytaniu całej instrukcji warto skorzystać z naszych przykładów, które utrwalą Twoją wiedzę i ułatwią kolejne modyfikacje szablonu wiadomości e-mail.

Gdzie zarządzać treściami powiadomień e-mail w Comarch e-Sklep?

Dostęp do treści związanych z komunikacją pomiędzy kontrahentem, a Comarch e-Sklep znajduje się w panelu administracyjnym w sekcji Ustawienia/Treści formalne. W tym obszarze znajdują się następujące treści:
  • Zgody,
  • Wysyłka e-mail i SMS,
  • Wydruki,
  • Komunikaty,
  • Regulamin i inne.
Wszystkie treści wiadomości możemy edytować wchodząc w jej szczegóły. W środku możemy określić ich widoczność oraz zmienić lub modyfikować takie dane jak:
  • Zmiana nadawcy wiadomości,
  • Dodać lub usunąć odbiorcę,
  • Ustawić, żeby potwierdzenie wiadomości zostało wysłane również do opiekuna,
  • Temat,
  • Język,
  • Treść.
Pierwsze dwa pola związane są z odbiorcą i nadawcą, zmieniamy je klikając w zaznaczony obszar:   Po zakończeniu zmian klikamy w przycisk zapisz. Warto dla sprawdzenia poprawności treści wysłać wiadomość próbną. Opcja dostępna jest na szczegółach każdego powiadomienia - w prawym górnym rogu. Dla wszystkich treści wysyłanych testowo z obszaru Ustawienia/ Treści formalne/ Wysyłka e-mail i SMS obejmuje walidacja wprowadzonych danych.
Wskazówka
Zachęcamy do przeczytania naszego artykułu odnośnie Dezaktywacji wybranych powiadomień e-mail

Gdzie edytować szablon wiadomości e-mail?

Szablon wiadomości e-mail znajduje się w panelu administracyjnym Comarch e-Sklep. Aby zmienić domyślny szablon wiadomości postępuj zgodnie z poniższymi krokami. Krok 1. W panelu przejdź do sekcji Ustawienia/ Treści formalne/Wysyłka e-mail i SMS. Krok 2. Z listy dostępnych treści wybierz okienko Szablon i przejdź do jego szczegółów. Krok 3. W nowym oknie rozpocznij edycję szablonu wiadomości e-mail. Każda linijka kodu, która jest z komentarzem odpowiada za wygląd naszego maila.
Przyklad
Wskazówka
Komentarze pomocnicze wyróżnione są kolorem brązowym i zawierają się w ramkach /**/. Nie usuwaj ich, ponieważ służą tylko do opisywania linijki kodu i mogą być przydatne podczas kolejnych modyfikacji.
Uwaga
Zmień tylko miejsca, które są opisane w instrukcji. Usunięcie nawet jednego symbolu może spowodować zniekształcenie całego szablonu. Jeżeli jednak usunąłeś za dużo elementów możesz przywrócić ustawienia domyślne. Pomocny artykuł: Jak przywrócić standardową treść wiadomości e-mail?

Edycja kolorów w szablonie wiadomości

Przed zabraniem się za zmianę kolorów warto sprawdzić szatę graficzną naszego e-Sklepu. Informację odnośnie kodów kolorów użytych w naszym szablonie możemy znaleźć w dwóch miejscach:
  • W panelu administracyjnym w zakładce Wygląd sklepu/ Ustawienia/ Ustawienia szablonu widzimy jaki kolor jest przyporządkowany do konkretnego miejsca w naszym szablonie. Kod używanego koloru znajduje się po prawej stronie. Można go skopiować oraz dowolnie modyfikować.
  • W konsoli przeglądarki (wciskając F12) możliwa jest weryfikacja poszczególnych kolorów użytych w wybranych elementach szablonu. Wybierając ikonę umożliwiamy sobie weryfikację obiektu oraz jego szczegółów po najechaniu na niego kursorem.
Po przygotowaniu kolorów możemy się zabrać za ich edycję w naszym szablonie wiadomości e-mail. W kodzie HTML szablonu szukamy w komentarzach miejsca, które chcemy podmienić. Po znalezieniu odpowiedniej linijki zmieniamy symbol koloru, który jest po symbolu „#” (UWAGA! Nie usuwamy tego symbolu). Po wprowadzeniu modyfikacji zapisz zmiany.
Wskazówka
W dowolnym momencie dokonywania zmian po ich wcześniejszym zapisaniu możesz je zobaczyć wysyłając wiadomość próbną. Wybieramy dowolną wiadomość z miejsca Ustawienia/ Treści formalne/Wysyłka e-mail i SMS a następnie klikamy w prawym górnym roku w Więcej i Wyślij próbnie. Pojawi nam się okno: Wpisujemy maila na, którego ma dojść wiadomość i klikamy w przycisk Wyślij próbnie. 

Motywy kolorystyczne dla szablonów wiadomości e-mail

Szablon wiadomości e-mail możesz w każdej chwili dowolnie modyfikować. Niżej prezentujemy przykładowe motywy kolorystyczne stworzone na bazie dostępnych motywów w Kreatorze Wyglądu Comarch oraz tabelę z odpowiednimi wartościami kolorów dla poszczególnych elementów w szablonie wiadomości.  
Szablon domyślny
Szablon domyślny
Topaz - motyw bordowy
Topaz - motyw bordowy
Topaz - motyw granatowy
Topaz - motyw granatowy
Topaz - motyw błękitny
Topaz - motyw błękitny
Topaz - motyw beżowy
Topaz - motyw beżowy
 
Motyw kolorystyczny szablonu Topaz: Domyślny Granatowy Bordowy Błękitny Beżowy
Nazwa:
a CB6724 151B72 BE2745 FF9181 BCAA9C
bgcolor1 ffffff ffffff ffffff ffffff ffffff
bgcolor2 F0A88D 9597AD CD6B7F BAD4F0 E6CAA6
shopName CB6724 151B72 BE2745 FF9181 BCAA9C
footerTitle 191616 000000 000000 17191A 3B3B3B
footerText 191616 000000 000000 17191A 3B3B3B
title1 4eb6f1 4eb6f1 4eb6f1 4eb6f1 4eb6f1
title2 ff7670 ff7670 ff7670 ff7670 ff7670
title3 53ccbd 53ccbd 53ccbd 53ccbd 53ccbd
text 191616 000000 000000 17191A 3B3B3B
orderColumnName a8a9a9 9597ad a8a9a9 9597ad 909090
orderDetails 3b3a3a 000000 000000 17191A 3B3B3B
orderPaymentName a8a9a9 9597ad a8a9a9 9597ad 909090
orderPaymentValue 191616 3B3B3B 000000 17191A 3B3B3B
orderPaymentTotal CB6724 151B72 BE2745 FF9181 BCAA9C
tableName CB6724 151B72 BE2745 FF9181 BCAA9C
rowName 191616 000000 000000 17191A 3B3B3B
rowContent a8a9a9 9597ad a8a9a9 9597ad 909090
feedbackButton (background-color) CB6724 C85555 CD6B7F FF9181 3B3B3B
feedbackButton (color) ffffff ffffff ffffff ffffff ffffff
feedbackButton (border) CB6724 C85555 CD6B7F FF9181 3B3B3B
feedbackButton-2 (background-color) 191616 151B72 000000 17191A  BCAA9C
feedbackButton-2 (color) ffffff ffffff ffffff ffffff ffffff
feedbackButton-2 (border) 191616 151B72 000000 17191A  BCAA9C
finishPaymentButton (background-color) CB6724 C85555 CD6B7F FF9181 3B3B3B
finishPaymentButton (color) ffffff ffffff ffffff ffffff ffffff
finishPaymentButton (border) CB6724 C85555 CD6B7F FF9181 3B3B3B
 

Jak zmienić kształt przycisków w powiadomieniach e-mail?

Obecnie w szablonie wiadomości możemy mieć dwa rodzaje przycisków:
  • Kwadratowe,
  • Zaokrąglone.
Zmiany ich wyglądu dokonujemy w zakładce Ustawienia/ Treści/ E-mail i SMS. W kodzie HTML szukamy przycisku który chcemy podmienić.
Wskazówka
W komentarzach zawarte są szczegółowe informację odnośnie każdej linijki kodu. Dzięki temu możemy łatwo znaleźć odpowiedni przycisk i  tym samy wiemy, która linijka służy np. do zmiany koloru przycisku lub koloru tekstu. Każdy przycisk jest opisany w następujący sposób: W miejscu zaznaczonym na czerwono wpisujemy odpowiednią wartość, która wpływa na kształt przycisków w wiadomości:
  • 0, gdy chcemy, aby przyciski były prostokątne,
  • 50px, gdy chcemy, aby przyciski były zaokrąglone.
Warto, żebyśmy wybrali formę i kolorystykę zbliżoną do wyglądu naszego e-Sklepu.

Jak dodać logo w szablonie wiadomości e-mail?

W wiadomościach, które wysyłamy do naszego klienta za pośrednictwem panelu administracyjnego zamieszczone jest logo naszego e-Sklepu. Domyślnie logo pobierane jest z konfiguracji, czyli z sekcji Ustawienia/ Ustawienia sklepu/ Dane sprzedawcy/ Logotyp. Więcej informacji odnośnie logotypu znajdziesz w artykule: Logotyp oraz favicon w Comarch e-Sklep (Logotyp oraz favicon w Comarch e-Sklep – Centrum Pomocy Comarch e-Sklep). Jeżeli chcesz zamieścić w szablonie wiadomości e-mail inne logo, niż domyślnie ustawione w konfiguracji konieczna jest jego modyfikacja. Jak jej dokonać? Postępuj zgodnie z poniższymi krokami. Krok 1. Wgraj plik z docelowym logiem na swój serwer. Krok 2. W panelu administracyjnym przejdź do sekcji Ustawienia/ Treści/ E-mail i SMS i rozpocznij edycję szablonu. Krok 3. Odszukaj w szablonie frazy src="{{config.Url}}logo.png". Krok 4. W każdej odnalezionej frazie (będzie ich 4) wstaw ścieżkę z serwera, na którym został udostępniony plik z logiem. Krok 5. Zapisz wprowadzone zmiany.

Jak edytować stopkę wiadomości e-mail?

Wszystkie dane kontaktowe, które są w stopce wiadomości e-mail pobierane są ustawień w panelu administracyjnym. Wszystkie frazy, które są zaznaczone na czerwono można w łatwy sposób zmienić w naszej stopce. Krok 1. W panelu administracyjnym przejdź do sekcji Ustawienia/ Treści formalne/Wysyłka e-mail i SMS i edycję szablonu. Krok 2. Odszukaj w szablonie frazy i je podmień. Krok 3. Zapisz wprowadzone zmiany.
Wskazówka
Informacje odnośnie dodawania ikon social mediów w szablonie znajdziesz w artykule: Ustawienia Wyglądu Sklepu w zakładce Nagłówek / Stopka

Obsługa wtyczki Czatu Facebooka w szablonach

Wskazówka
Od 1 czerwca 2025 roku zakończyliśmy aktualizację oraz wydawanie nowych wersji szablonów Bursztyn, Agat i Opal, a tym samym ich wsparcie, aby skupić się na nowoczesnych rozwiązaniach, które jeszcze lepiej odpowiadają na potrzeby dynamicznie rozwijającego się rynku e-commerce. Zachęcamy Was do przejścia na nasze nowe, udoskonalone szablony. Dla sklepów B2C polecamy szablony Topaz, One Page Shop oraz Dla Gastronomii, natomiast dla platform B2B idealnym wyborem będą Rubin i Szafir.
Uwaga
Z dniem 9 maja 2024 roku wtyczka została oficjalnie wycofana. Więcej informacji można znaleźć w Centrum Pomocy Meta.
W niniejszym artykule dowiesz się w jaki sposób Twój szablon może obsługiwać wtyczkę Czatu Facebooka. Na początku omówiona zostanie ogólna instrukcja ustawienia wtyczki oraz opisane zostaną ustawienia w konfiguracji Facebooka, na które warto zwrócić uwagę. W dalszych punktach zostaną omówione wymagane zmiany w kodzie poszczególnych szablonów.
Uwaga
Instrukcja dotyczy dodania wtyczki dla standardowych szablonów Comarch od wersji 2021.2.

Instrukcja ogólna

1. W przeglądarce internetowej otwieramy stronę https://business.facebook.com. Logujemy się swoimi danymi. 2. Wybieramy opcję Skrzynka odbiorcza. Z menu po prawej stronie  wybieramy opcję Ustawienia. 3. Z listy po lewej wybieramy opcję Wtyczka czatu. Po załadowaniu się ustawień, znajduje się opcja Skonfiguruj wtyczkę czatu Klikamy przycisk Skonfiguruj. 4. Pokaże się małe okienko do konfiguracji. 5. Na początku mamy do wyboru metodę konfiguracji. Wybieramy opcję Standardowa. 6. W kroku pierwszym ustawiamy język, w jakim nasza wtyczka będzie pracować. 7. Krok drugi to dodanie naszej domeny. Zwróć uwagę na to, czy podana przez Ciebie domena posiada protokół http czy https. Podany w niniejszej konfiguracji musi się zgadzać z faktycznymi ustawieniami. Jeśli korzystasz z szablonu Topaz, One Page Shop lub Szafir, możesz pominąć kroki 8 oraz 9. W wygenerowanym przez Meta kodzie do wklejenia, znajdź tylko page_id i znajdujący się tam numer (identyfikator) skopiuj - będzie potrzebny w ustawieniach szablonu. 8. (Dla szablonu Bursztyn, Opal, Agat) Krok trzeci to kod potrzebny do dodania wtyczki do szablonu. Należy go skopiować przy użyciu przycisku Skopiuj kod. 9. (Dla szablonu Bursztyn, Opal, Agat) Wklej skopiowany przed chwilą kod w odpowiednie miejsce w Twoim szablonie. Instrukcja gdzie należy wkleić ten kod, znajduje się poniżej, dla każdego ze standardowych szablonów z osobna.

Opcjonalnie:

10. Przejdź do sekcji Dostosuj wtyczkę Wtyczka czatu gdzie można ustawić m.in. wyrównanie wtyczki do lewej lub prawej strony, jej motyw kolorystyczny a także odległość od dołu strony dla komputerów i urządzeń mobilnych. W tej sekcji możesz także dodatkowo ustawić automatyczne rozwijanie okna czatu oraz włączyć lub wyłączyć czat dla osób niezalogowanych do Facebooka bądź Messengera. 11. Przejdź do sekcji Rozpocznij konwersację gdzie można ustawić wiadomość powitalną a także włączyć/wyłączyć funkcję najczęściej zadawanych pytań. Pytania wraz z odpowiedziami na nie konfigurujemy w tej sekcji dowolnie.

Zwróć uwagę na te ustawienia:

Po procesie konfiguracji mogą wystąpić pewne problemy lub błędy. Część z nich może być spowodowana nieprawidłowymi ustawieniami Twojej strony na Facebooku. Na głównej stronie na rozwijanym menu po lewej stronie kliknij Wszystkie narzędzia, potem Ustawienia strony a następnie wybierz sekcję Ogólne. Ustawienia, które mogą powodować problemy to m.in. Widoczność strony, gdy mamy ustawioną opcję "Cofnięto publikację strony". Kolejnymi ustawieniami do sprawdzenia są Ograniczenia dotyczące kraju oraz Ograniczenia wiekowe. Ewentualne narzucenie ograniczeń może powodować błędy wyświetlane w konsoli w narzędziach developerskich, gdy otworzysz swój sklep. Sprawdź też sekcję Wszystkie narzędzia -> Ustawienia strony -> Zaawansowane ustawienia wiadomości, a tam ustawienie Domeny dodane do białej listy. Upewnij się, że Twój sklep znajduje się na tej liście. Z perspektywy Klienta, w przypadku ewentualnych błędów związanych z wyświetlaniem lub działaniem wtyczki, pomocne może okazać się wyczyszczenie pamięci podręcznej (cache).

Obsługa w szablonie Topaz, One Page Shop i Szafir

1. W przygotowanym przez Meta kodzie do wklejenia, odszukaj page_id i skopiuj podany tam numer (identyfikator). 2. Skopiowany identyfikator wklej w Panelu Administracyjnym Comarch e-Sklep, przechodząc do zakładki: Topaz/One Page Shop: Wygląd Sklepu/ Ustawienia/ Dodatkowe/ Wyświetlaj Facebook czat, Szafir: Wygląd sklepu/ Ustawienia/ Ogólne/ Wyświetlaj Facebook czat i zaznaczając parametr na Tak:

Obsługa w szablonie Bursztyn

W szablonie Bursztyn, skopiowany kod należy wkleić do pliku _layout.html znajdującego się w głównym katalogu z Twoim szablonem. Kod wklejamy pod koniec tego pliku. Poniżej niego mają zostać tylko linijki zawierające zamknięcie tagu html oraz zamknięcie tagu body. Istnieje możliwość zmiany położenia wtyczki. Przy pomocy konfiguratora wtyczki czatu możemy ustalić, czy ma być ona wyrównana do lewej czy do prawej strony, zmienić motyw kolorystyczny dopasowując go do wyglądu sklepu, a także ustalić w jakiej odległości od dołu ekranu ma pojawiać się wtyczka (dla wyrównania do prawej, sugerowana odległość na komputery w szablonie Bursztyn to 120px). Można także własnoręcznie edytować style naszej wtyczki. W plikach .scss wystarczy dodać odpowiednio klasę .fb_customer_chat_bounce_in_v2 - okno czatu oraz .fb_customer_chat_icon - ikona wtyczki a następnie przy użyciu gulp'a przekonwertować pliki .scss na .css. Zmiany możemy dokonać na końcu pliku main.scss.

Obsługa w szablonie Opal

W szablonie Opal, skopiowany kod należy wkleić do pliku _layout.html znajdującego się w głównym katalogu z Twoim szablonem. Kod wklejamy pod koniec tego pliku. Poniżej niego mają zostać tylko linijki zawierające zamknięcie tagu html oraz zamknięcie tagu body. Istnieje możliwość zmiany położenia wtyczki. Przy pomocy konfiguratora wtyczki czatu możemy ustalić, czy ma być ona wyrównana do lewej czy do prawej strony, zmienić motyw kolorystyczny dopasowując go do wyglądu sklepu, a także ustalić w jakiej odległości od dołu ekranu ma pojawiać się wtyczka (dla wyrównania do prawej, sugerowana odległość na komputery w szablonie Opal to 110px). Można także własnoręcznie edytować style naszej wtyczki. W plikach .scss wystarczy dodać odpowiednio klasę .fb_customer_chat_bounce_in_v2 - okno czatu oraz .fb_customer_chat_icon - ikona wtyczki a następnie przy użyciu gulp'a przekonwertować pliki .scss na .css. Zmiany możemy dokonać na końcu pliku main.scss.

Obsługa w szablonie Agat

W szablonie Agat, skopiowany kod należy wkleić do pliku _layout.html znajdującego się w głównym katalogu z Twoim szablonem. Kod wklejamy pod koniec tego pliku. Poniżej niego mają zostać tylko linijki zawierające zamknięcie tagu html oraz zamknięcie tagu body. Istnieje możliwość zmiany położenia wtyczki. Przy pomocy konfiguratora wtyczki czatu możemy ustalić, czy ma być ona wyrównana do lewej czy do prawej strony, zmienić motyw kolorystyczny dopasowując go do wyglądu sklepu, a także ustalić w jakiej odległości od dołu ekranu ma pojawiać się wtyczka (dla wyrównania do prawej, sugerowana odległość na komputery w szablonie Agat to 120px). Można także własnoręcznie edytować style naszej wtyczki. W plikach .scss wystarczy dodać odpowiednio klasę .fb_customer_chat_bounce_in_v2 - okno czatu oraz .fb_customer_chat_icon - ikona wtyczki a następnie przy użyciu gulp'a przekonwertować pliki .scss na .css. Zmiany możemy dokonać na końcu pliku main.scss.

Przykładowy kod do modyfikacji wyglądu wtyczki - wersja na komputery

Poniżej znajduje się przykładowy kod służący modyfikacji położenia i wysokości zarówno okna czatu, jak i ikonki czatu. Zakładamy, że w ustawieniach wtyczki opisanych wcześniej, mamy wyrównanie do prawej i 120px odległości od dołu w wersji na komputery. Kod w wersji .scss (Po jego wklejeniu do odpowiedniego pliku w danym szablonie, należy przekonwertować pliki .scss na pliki .css i dokonać ich minifikacji. Jak tego dokonać dowiesz się z tego artykułu. @media screen and (min-width: 769px) { .fb_customer_chat_bounce_in_v2 { bottom:185px !important; right:3% !important; height:600px !important } .fb_customer_chat_icon { bottom:125px !important; right:2.3% !important } }
Wskazówka
Przedstawiony kod jest tylko przykładem, jak możemy edytować wygląd naszej wtyczki. Należy pamiętać także o utworzeniu styli dla wersji mobilnej przy użyciu @media.
Wskazówka
W przykładzie została użyta instrukcja !important Jest to o tyle istotne, że bez jej użycia możemy nie nadpisać domyślnego wyglądu wtyczki przygotowanego przez Facebooka.

Trusted Shops – jak dodać logo do sklepu?

Wskazówka
Od 1 czerwca 2025 roku zakończyliśmy aktualizację oraz wydawanie nowych wersji szablonów Bursztyn, Agat i Opal, a tym samym ich wsparcie, aby skupić się na nowoczesnych rozwiązaniach, które jeszcze lepiej odpowiadają na potrzeby dynamicznie rozwijającego się rynku e-commerce. Zachęcamy Was do przejścia na nasze nowe, udoskonalone szablony. Dla sklepów B2C polecamy szablony Topaz, One Page Shop oraz Dla Gastronomii, natomiast dla platform B2B idealnym wyborem będą Rubin i Szafir.
Spis treści

Wstęp

Trusted Shops to znak jakości z ochroną kupującego, przyznawany sklepom internetowym. Aby rozpocząć jego integrację  z Comarch e-Sklep, najpierw musimy zarejestrować się na stronie TrustedShops. Po przejściu procesu rejestracji i otrzymaniu certyfikatu otrzymamy jego identyfikator, który jest potrzebny do połączenia go z naszym e-Sklepem.

Wprowadzenie identyfikatora Trusted Shops

W panelu administracyjnym należy wprowadzić identyfikator od Trusted Shops. Aby to zrobić, proszę przejść w Ustawienia/ Ustawiania sklepu/ Trusted Shops wpisać identyfikator i kliknąć przycisk Przyłącz. Następnie proszę podążać za poniższymi wskazówkami dotyczącymi właściwego szablonu.

Dodawanie loga Trusted Shops do e-Sklepu

Kolejnym krokiem w integracji platformy Trusted Shops jest dodanie loga platformy. Dokonuje się tego poprzez edycję kodu HTML szablonu naszego sklepu i wgranie odpowiednich poprawek wymaganych przez platformę. Kod ten posiada kilka parametrów konfiguracyjnych, które zostaną opisane w rozdziale poniżej. Natomiast dalsza część instrukcji zostanie poświęcona implementacji loga zależnie od używanego szablonu w Comarch e-Sklep.

Parametry konfiguracyjne

  • Fragment kodu ’yOffset’: ’60’, /* offset from page bottom */ określa wysokość, na jakiej ma się znajdować logo Trusted Shops. Często domyślnie jest to wartość 60. Zmiana tej wartości pozwala na dopasowanie elementu do wyglądu posiadanego szablonu.
  • Parametr ’variant’ odpowiada za wariant wyświetlania Trustbadge. Pozwala określić, które logo Trusted Shops będzie widoczne w naszym sklepie. Domyślnie wybrany wariant to 'reviews’, natomiast pozostałe warianty to 'default’, 'custom_reviews’ oraz 'custom’. Aby je zmienić, wystarczy wpisać nazwę wybranego wariantu w linijce kodu  ’variant’:’reviews’,  zastępując domyślnie wybrany wariant reviews.
Uwaga
Jeśli chcesz użyć wariantu „custom” lub „custom_reviews”, konieczne będą dodatkowe modyfikacje kodu Trustbadge i używanego szablonu. Więcej na ten temat przeczytasz na stronie TrustedShops
Wybrane warianty prezentują się następująco:

Agat

Etap I - skrypt główny

Krok 1. W panelu administracyjnym przejdź do sekcji Wygląd sklepu/ Ustawienia/  Więcej  / Edytuj ustawienia zaawansowane ponownie Więcej  / Edytuj HTML Krok 2. Przejdź do edycji pliku _layout.html, a następnie za pomocą narzędzia wyszukiwania odnajdź frazę </head>. Krok 3. Powyżej znalezionego fragmentu wklej poniższy skrypt, w którym wartość XXXXXXXXXXXXX należy zastąpić identyfikatorem od Trusted Shops:        

Etap II - wstawienie dodatkowego skryptu w szablonie

Krok 1. Pozostając w powyższym obszarze z plikami szablonu należy przejść do edycji partials/ cart/ lastpagesscripts.html i podmienić kod pliku na poniższy skrypt: <div id="trustedShopsCheckout" style="display: none;"> <span id="tsCheckoutOrderNr">{{cart.PlacedOrder.Id}}</span> <span id="tsCheckoutBuyerEmail">{{cart.Customer.Email}}</span> <span id="tsCheckoutBuyerId">-</span> <span id="tsCheckoutOrderAmount">{{cart.OrderTotalValue}}</span> <span id="tsCheckoutOrderCurrency">{{currency}}</span> <span id="tsCheckoutOrderPaymentType">OTHER</span> </div> <script> (function(){try{trustbadge.reInitialize();}catch(err){}})(); </script> Krok 2. Następnie należy zapisać i opublikować szablon (  Zapisz i opublikuj )

Opal i Bursztyn

Etap I - skrypt główny

Krok 1. W panelu administracyjnym przejdź do sekcji Wygląd sklepu/ Ustawienia/  Więcej  / Edytuj ustawienia zaawansowane ponownie Więcej  / Edytuj HTML Krok 2. Przejdź do edycji pliku _layout.html, a następnie za pomocą narzędzia wyszukiwania odnajdź frazę </head>. Krok 3. Powyżej znalezionego fragmentu wklej poniższy skrypt, w którym wartość XXXXXXXXXXXXX należy zastąpić identyfikatorem od Trusted Shops:        

Etap II - wstawienie dodatkowego skryptu w szablonie

Krok 1. Pozostając w powyższym obszarze z plikami szablonu należy przejść do edycji partials/ cart/ lastpagesscripts.html i podmienić kod pliku na poniższy skrypt: <div id="trustedShopsCheckout" style="display: none;"> <span id="tsCheckoutOrderNr">{{cart.PlacedOrder.Id}}</span> <span id="tsCheckoutBuyerEmail">{{cart.Customer.Email}}</span> <span id="tsCheckoutBuyerId">-</span> <span id="tsCheckoutOrderAmount">{{cart.OrderTotalValue}}</span> <span id="tsCheckoutOrderCurrency">{{currency}}</span> <span id="tsCheckoutOrderPaymentType">OTHER</span> </div> <script> (function(){try{trustbadge.reInitialize();}catch(err){}})(); </script> Krok 2. Następnie należy zapisać i opublikować szablon (  Zapisz i opublikuj )
Wskazówka
Instrukcja dotycząca dodawania logo Trusted Shops w szablonach Topaz, Szafir, One Page Shop znajduje się w artykule Trusted Shops.

Implementacja Google Analytics 4 w szablonach

Comarch e-Sklep jest zintegrowany z Google Analytics 4 dzięki prostej konfiguracji polegającej na dodaniu skryptu śledzącego w panelu administracyjnym. Dzięki zaimplementowanej w e-Sklepie warstwie danych (Data Layer) oraz obsłużonych domyślnie w darmowych szablonach Comarch skryptom uzyskasz dostęp do wielu funkcji Google Analytics takich jak: podstawowe śledzenie ruchu na Twoim sklepie oraz śledzenie transakcji e-commerce. Posiadając zmodyfikowany szablon również możesz korzystać z Google Analytics 4. Poniżej podpowiadamy jakie pliki HTML należy zmodyfikować, aby statystyki naliczały się w prawidłowy sposób. Zmodyfikuj następujące pliki. Szafir: base_layout.html partials/customer-profile/discounts/discount-elements.html partials/order/cart.html partials/order/thx.html partials/order/products-partials/set-aggregator.html partials/product/cart-product.html partials/product/product-presentation-forms.html js/init.min.js js/init-ui1.min.js js/init-ui2.min.js js/js.min.js Topaz: base_layout.html elements/cart/cart-1.html (lub cart-2.html) elements/product/product-details-1.html (lub 2,3,4) partials/cart/cart-item.html (lub partials/cart/new-cart/cart-item.html) partials/common/notify-about-availability-popup.html partials/customer/discounts/discount-elements.html js/layout0.min.js js/layout1.min.js js/layout2.min.js
Wskazówka
W celu wyodrębnienia zmian z owych plików, należy porównać dany plik z naszego szablonu z jego odpowiednikiem z najnowszej wersji szablonu

Jak wykonać kopię bezpieczeństwa mojego szablonu?

Jak wykonać kopię bezpieczeństwa mojego szablonu?

Oprawa wizualna sklepu jest bardzo ważnym elementem podczas prowadzenia sprzedaży w sieci. Narzędzie Kreator Wyglądu Comarch e-Sklep umożliwia stworzenie własnych, niepowtarzalnych szablonów wedle preferencji i potrzeb użytkowników. W intuicyjnym narzędziu jakim jest Kreator, będziesz w stanie zaprojektować wszelkie niezbędne funkcje, takie jak stronę główną, listę towarów, szczegóły towaru oraz koszyk. Jeśli Twój projekt szablonu został zaimportowany do e-Sklepu oraz skonfigurowany wedle Twoich preferencji (dodanie grafik do bannerów, modyfikacje kolorystyczne) masz możliwość jego zapisania, co będzie stanowić kopię bezpieczeństwa. Kopia bezpieczeństwa to dane, które w każdej chwili można odtworzyć w przypadku ich utracenia (np. poprzez przypadkowe usunięcie) lub częstego wprowadzania zmian. Dane, jakie może zawierać kopia bezpieczeństwa to szablon, który wcześniej został przez nas wygenerowany wraz z bannerami. Zaleca się wykonywanie kopii zapasowych oraz zabezpieczenie ich hasłem. Każda wykonana kopia zapasowa powinna zostać zapisana w bezpiecznym i dogodnym dla Użytkownika miejscu.

Jak wykonać kopię bezpieczeństwa?

W Panelu Administracyjnym przejdź do sekcji Wygląd sklepu/ Ustawienia/ Edytuj ustawienia zaawansowane, a następnie przejdź do zakładki Eksport szablonu. W pustych polach znajdujących się w zakładce Eksport szablonu, opcjonalnie przed eksportem możesz uzupełnić powyższe dane, tj. Autora szablonu, e-mail, telefon i stronę WWW sklepu. Aby wyeksportować szablon, kliknij Eksportuj szablon. Wyeksportowany plik jest w formacie XML, a jego nazwa zawiera szablon oraz wersję, co znacznie ułatwia zarządzanie kopiami bezpieczeństwa w przypadku wykonywania ich regularnie.

Jak wyeksportować bannery?

Bannery, które znajdują się w Twoim sklepie możesz również wyeksportować tworząc kopię bezpieczeństwa. W tym celu także musisz przejść do Wygląd sklepu/ Ustawienia/ Edytuj ustawienia zaawansowane, a następnie do zakładki Eksport szablonu. Obok przycisku Eksportuj szablon, znajduje się przycisk Eksportuj bannery, który musisz kliknąć aby bannery, które posiadasz w e-Sklepie zostały weksportowane. Kopia bezpieczeństwa jest również zapisywana w formacie XML, a nazwa pliku wskazuje na szablon, wersję i zawartość bannerów.

Jak zabezpieczyć hasłem swój szablon?

Jeśli chcesz, aby Twój szablon został zabezpieczony hasłem, a znajomość hasła była niezbędna podczas zaimportowania tego szablonu do e-Sklepu, musisz w tym celu przejść w Panelu Administracyjnym do sekcji Wygląd sklepu/ Ustawienia/ Ustawienia zaawansowane, następnie do zakładki Szablon. W tym miejscu nadasz hasło dla swojego szablonu. Zgodnie z Polityką bezpieczeństwa haseł, hasło powinno:
  • Składać się z minimum 8 znaków,
  • Zawierać dużą literę,
  • Zawierać małą literę,
  • Zawierać cyfrę 0-9,
  • Zawierać znak specjalny – ‘!.+?;^]=-(&_)#=
Gotowe! Teraz Twój szablon został zabezpieczony hasłem. Jeśli wyeksportujesz szablon, który zabezpieczyłeś hasłem – podczas importu tego szablonu, będziesz musiał podać nadane wcześniej hasło. Jego brak uniemożliwi import szablonu, a podanie błędnego hasła spowoduje nieprawidłowe działanie szablonu po imporcie. Więcej informacji znajdziesz:

Przekreślenie na atrybutach towaru zgrupowanego - szablon Topaz

Wstęp

W szablonie Topaz, przy włączonej kontroli stanów magazynowych, w przypadku braku produktu towaru zgrupowanego wyświetlany jest przycisk "Powiadom mnie o dostępności". Z tego artykułu dowiesz się jak zmodyfikować swój szablon, aby dodatkowo wyświetlać przekreślenie na niedostępnych atrybutach.
Wskazówka
W tym artykule dowiesz się jak wprowadzać zmiany w plikach js i css. Z tego artykułu dowiesz się jak je minifikować.

Zmiany w plikach szablonu

Przedstawione w artykule modyfikacje są kompatybilne ze wszystkimi czterema widokami szczegółów towaru w szablonie Topaz. Kod odpowiedzialny za przekreślenie na atrybutach, będzie prawie identyczny dla każdego z widoków. Minimalne różnice zostały odpowiednio opisane. Edycję szablonu rozpocznij od pliku js/layout2.js. Struktura części kodu, którą należy zmienić może się różnić, w zależności czy masz zaimplementowaną graficzną prezentację atrybutów. Dlatego przedstawione zostaną dwa przypadki edycji omawianego pliku. W przypadku braku implementacji graficznej prezentacji atrybutów, odnajdź fragment: function SetSuplFirst(drop, s, lvl, valId) { var form = drop.parent().parent().parent(); var fDrop = form.find('.attributes-select'); drop.empty(); for (var el in s) { drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el]))); } Kod znajdujący się w pętli for zamień na: var isUnavailable = false; var unavailableClassName = ""; if (s[el].Product) { if (s[el].Product.StockLevel && s[el].Product.StockLevel.Value === 0) { isUnavailable = true; } if (s[el].StockLevel && s[el].StockLevel.Value === 0) { isUnavailable = true; } } else { var checkStockLevelLoopObj = s[el]; var checkSuppliesStockLevelLoopObj = s[el]; while (typeof checkStockLevelLoopObj.Product === 'undefined') { checkSuppliesStockLevelLoopObj = checkStockLevelLoopObj.Supplies; checkStockLevelLoopObj = checkStockLevelLoopObj.Supplies[0]; } if (checkSuppliesStockLevelLoopObj.length > 1) { for (var supply in checkSuppliesStockLevelLoopObj) { if (checkSuppliesStockLevelLoopObj[supply].Product && checkSuppliesStockLevelLoopObj[supply].Product.StockLevel && checkSuppliesStockLevelLoopObj[supply].Product.StockLevel !== 0) { break; } else { if (checkSuppliesStockLevelLoopObj[supply].Product && !checkSuppliesStockLevelLoopObj[supply].Product.StockLevel) { break; } else { isUnavailable = true; } } if (checkSuppliesStockLevelLoopObj[supply].StockLevel && checkSuppliesStockLevelLoopObj[supply].StockLevel.Value !== 0) { break; } else { if (!checkSuppliesStockLevelLoopObj[supply].StockLevel) { break; } else { isUnavailable = true; } } } } else { if (checkStockLevelLoopObj.Product && checkStockLevelLoopObj.Product.StockLevel && checkStockLevelLoopObj.Product.StockLevel === 0) { isUnavailable = true; } if (checkStockLevelLoopObj.StockLevel && checkStockLevelLoopObj.StockLevel.Value === 0) { isUnavailable = true; } } } if (isUnavailable) { unavailableClassName = " button-option-unavailable"; } drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el]))); Następnie wyszukaj fragment: function SetSupl(drop, s) { var form = drop.closest('#AddToCartForm'); var fDrop = form.find('.attributes-select'); drop.empty(); for (var el in s) { drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el]))); } I instrukcje w pętli for zastąp tym samym kodem co w przypadku przedstawionej wyżej modyfikacji funkcji SetSuplFirst. Dla przypadku zaimplementowanej graficznej prezentacji atrybutów, zlokalizuj fragment: function SetSuplFirst(drop, s, lvl, valId) { var form = drop.parent().parent().parent(); var fDrop = form.find('.attributes-select'); //pobieram wszystkie kontenery dla poziomów drop.empty(); var attributesColorsData = drop.data('variants-colors'); var pageLanguage = drop.data('page-language'); var attributesColors = []; if (attributesColorsData) { attributesColorsData = attributesColorsData.split('|||'); for (var i = 0; i < attributesColorsData.length; i++) { var attributesColor = attributesColorsData[i].split('||'); var attributeColorName = attributesColor[0].split('|'); switch (pageLanguage) { case 1: attributeColorName = attributeColorName[0]; break; case 2: attributeColorName = attributeColorName[1]; break; case 3: attributeColorName = attributeColorName[2]; break; case 5: attributeColorName = attributeColorName[3]; break; default: break; } attributesColors.push([attributeColorName,attributesColor[1]]); } } for (var el in s) { if (drop.data('variants-colors')) { if ((drop.data('colors-option') === 'Grouping_First' && drop.data('attribute-id') === drop.data('first-attribute-id')) || (drop.data('colors-option') === 'Grouping_Last' && drop.data('attribute-id') === drop.data('last-attribute-id')) || (drop.data('colors-option') === 'Grouping_All')) { Teraz w pętli for (var el in s), przed pierwszą instrukcją sterującą if wklej: var isUnavailable = false; var unavailableClassName = ""; if (s[el].Product) { if (s[el].Product.StockLevel && s[el].Product.StockLevel.Value === 0) { isUnavailable = true; } if (s[el].StockLevel && s[el].StockLevel.Value === 0) { isUnavailable = true; } } else { var checkStockLevelLoopObj = s[el]; var checkSuppliesStockLevelLoopObj = s[el]; while (typeof checkStockLevelLoopObj.Product === 'undefined') { checkSuppliesStockLevelLoopObj = checkStockLevelLoopObj.Supplies; checkStockLevelLoopObj = checkStockLevelLoopObj.Supplies[0]; } if (checkSuppliesStockLevelLoopObj.length > 1) { for (var supply in checkSuppliesStockLevelLoopObj) { if (checkSuppliesStockLevelLoopObj[supply].Product && checkSuppliesStockLevelLoopObj[supply].Product.StockLevel && checkSuppliesStockLevelLoopObj[supply].Product.StockLevel !== 0) { break; } else { if (checkSuppliesStockLevelLoopObj[supply].Product && !checkSuppliesStockLevelLoopObj[supply].Product.StockLevel) { break; } else { isUnavailable = true; } } if (checkSuppliesStockLevelLoopObj[supply].StockLevel && checkSuppliesStockLevelLoopObj[supply].StockLevel.Value !== 0) { break; } else { if (!checkSuppliesStockLevelLoopObj[supply].StockLevel) { break; } else { isUnavailable = true; } } } } else { if (checkStockLevelLoopObj.Product && checkStockLevelLoopObj.Product.StockLevel && checkStockLevelLoopObj.Product.StockLevel === 0) { isUnavailable = true; } if (checkStockLevelLoopObj.StockLevel && checkStockLevelLoopObj.StockLevel.Value === 0) { isUnavailable = true; } } } if (isUnavailable) { unavailableClassName = " button-option-unavailable"; } Następnie, w obrębie wspomnianej wyżej pętli for, wyszukaj wszystkie wystąpienia kodu zawierające fragment: drop.append($(' I dla wszystkich znalezionych przypadków, na końcu fragmentów takich jak przedstawiony powyżej, dodaj kod: ' + unavailableClassName + ' Na koniec zmian w pliku, odnajdź poniższe instrukcje: function SetSupl(drop, s) { var form = drop.closest('#AddToCartForm'); var fDrop = form.find('.attributes-select'); //pobieram wszystkie kontenery dla poziomów drop.empty(); var attributesColorsData = drop.data('variants-colors'); var pageLanguage = drop.data('page-language'); var attributesColors = []; if (attributesColorsData) { attributesColorsData = attributesColorsData.split('|||'); for (var i = 0; i < attributesColorsData.length; i++) { var attributesColor = attributesColorsData[i].split('||'); var attributeColorName = attributesColor[0].split('|'); switch (pageLanguage) { case 1: attributeColorName = attributeColorName[0]; break; case 2: attributeColorName = attributeColorName[1]; break; case 3: attributeColorName = attributeColorName[2]; break; case 5: attributeColorName = attributeColorName[3]; break; default: attributeColorName = attributeColorName[0]; break; } attributesColors.push([attributeColorName,attributesColor[1]]); } } for (var el in s) { if (drop.data('variants-colors')) { if ((drop.data('colors-option') === 'Grouping_First' && drop.data('attribute-id') === drop.data('first-attribute-id')) || (drop.data('colors-option') === 'Grouping_Last' && drop.data('attribute-id') === drop.data('last-attribute-id')) || (drop.data('colors-option') === 'Grouping_All')) { Teraz dokonaj analogicznych modyfikacji jak w obrębie funkcji SetSuplFirst. Pamiętaj, że tym razem, zmiany we wszystkich wystąpieniach kodu: drop.append($(' Musisz dokonać w obrębie funkcji SetSupl. Do dokończenia zmian w szablonie pozostało zmodyfikowanie pliku ze stylami. W zależności od wygenerowanego w kreatorze szablonu widoku szczegółów towaru, nazwa edytowanego pliku będzie się różnić. Zmiany stylistyki w szablonie są identyczne dla wszystkich widoków, lecz umieszczane w innych fragmentach plików. Najpierw przedstawiona zostanie modyfikacja przeznaczona dla pierwszego i drugiego widoku szczegółów towaru. Otwórz plik css/layout0.css i wyszukaj fragment: .product-details .input-group input[type='button'].active,.product-details .input-group .attributes-select .button-option.active,.product-details .set .button-option.active,.product-details .set .button-option-sets.active{border:2px solid {{settings.paginationActiveBorderColor}};background-color:transparent} Teraz tuż za ostatnim znakiem przedstawionego kodu wklej instrukcje: .product-details .button-option-unavailable{position:relative;color:{{settings.secondaryFontColor}};transition:300ms}.product-details .button-option-unavailable::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;transition:300ms;background-color:rgba(226,226,226,0.2)}.product-details .button-option-unavailable::after{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;transition:300ms;cursor:pointer}@keyframes change-gradient-to-inactive{from{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 52%, transparent)}to{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent)}}@keyframes change-gradient-to-active{from{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent)}to{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 52%, transparent)}}.product-details .button-option-unavailable:not(.active){border:1px solid {{settings.secondaryFontColor}} !important}.product-details .button-option-unavailable:not(.active)::after{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent);-webkit-animation:change-gradient-to-inactive 300ms;animation:change-gradient-to-inactive 300ms}.product-details .button-option-unavailable.active{border:2px solid {{settings.secondaryFontColor}} !important}.product-details .button-option-unavailable.active::after{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 52%, transparent);-webkit-animation:change-gradient-to-active 900ms;animation:change-gradient-to-active 900ms} Poniżej natomiast pokazane są zmiany przeznaczone dla trzeciego i czwartego widoku szczegółów towaru. Otwórz plik css/layout0.css i wyszukaj fragment: .productDetails-attributes .button-option:not(.dropdown):not(.units-container){display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:10px;flex-wrap:wrap}.productDetails-attributes .button-option:not(.dropdown):not(.units-container).active{border:2px solid {{settings.linkFontColor}};display:inline-flex}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) span{height:50px;padding-left:15px;padding-right:15px;font-size:14px;font-weight:normal;font-stretch:normal;font-style:normal;line-height:1.71;letter-spacing:1.2px;text-align:center;color:{{settings.primaryFontColor}};border:2px solid {{settings.primaryPageBgColor}};cursor:pointer;transition:300ms;margin-right:5px}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) span:not(.active):hover{border-color:{{settings.secondaryFontColor}}} Następnie zaraz po ostatnim znaku powyższego fragmentu dodaj kod: .productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable{position:relative;color:{{settings.secondaryFontColor}};transition:300ms}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;transition:300ms;background-color:rgba(226,226,226,0.2)}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable::after{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;transition:300ms;cursor:pointer}@keyframes change-gradient-to-inactive{from{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.linkFontColor}} 50%, {{settings.linkFontColor}} 50%, transparent 52%, transparent)}to{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent)}}@keyframes change-gradient-to-active{from{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent)}to{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.linkFontColor}} 50%, {{settings.linkFontColor}} 50%, transparent 52%, transparent)}}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable:not(.active){border:1px solid {{settings.secondaryFontColor}}}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable:not(.active)::after{background:linear-gradient(to right top, transparent, transparent 49%, {{settings.secondaryFontColor}} 50%, {{settings.secondaryFontColor}} 50%, transparent 51%, transparent);-webkit-animation:change-gradient-to-inactive 300ms;animation:change-gradient-to-inactive 300ms}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable.active{border:1px solid {{settings.linkFontColor}}}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-unavailable.active::after{background:linear-gradient(to right top, transparent, transparent 48%, {{settings.linkFontColor}} 50%, {{settings.linkFontColor}} 50%, transparent 52%, transparent);-webkit-animation:change-gradient-to-active 900ms;animation:change-gradient-to-active 900ms}

Migracja do nowszej biblioteki klienta Google

Wskazówka
Od 1 czerwca 2025 roku zakończyliśmy aktualizację oraz wydawanie nowych wersji szablonów Bursztyn, Agat i Opal, a tym samym ich wsparcie, aby skupić się na nowoczesnych rozwiązaniach, które jeszcze lepiej odpowiadają na potrzeby dynamicznie rozwijającego się rynku e-commerce. Zachęcamy Was do przejścia na nasze nowe, udoskonalone szablony. Dla sklepów B2C polecamy szablony Topaz, One Page Shop oraz Dla Gastronomii, natomiast dla platform B2B idealnym wyborem będą Rubin i Szafir.

Wstęp

W wersji 2022.4. dostosowaliśmy logowanie do e-Sklepu z pomocą nowszej biblioteki usług tożsamości Google we wszystkich standardowych szablonach Comarch. Proces jest zoptymalizowany i przyjazny dla użytkownika. Ujednolicone zostały także przyciski logowania we wszystkich szablonach Comarch. Poniżej znajdują się informację o tym w jaki sposób zaimplementować wspomnianą zmianę do wszystkich standardowych szablonów.
Wskazówka
W tym artykule dowiesz się jak wprowadzać zmiany w plikach js, html i scss. Dodatkowe informacje o kompilacji i minifikacji znajdziesz w centrum pomocy.
Instrukcje do szablonów:

Szafir

Implementacja dla szablonu Szafir ukazana jest w artykule Logowanie do sklepu za pomocą konta Google i Facebook - implementacja w szablonie Szafir, ponieważ w tym szablonie funkcja ta jest również dostępna od wersji 2022.4.

Topaz

Pliki html

  • Na początek w pliku base_layout.html wyszukaj fragment crossorigin="anonymous". Powinien wystąpić raz w całym pliku. Dokładnie w linijkę pod tym elementem wklej ten fragment kodu:

 
  • Następnie w pliku static-elements/login/login.html wyszukaj fragment:
{% if config.External.Facebook or config.External.Google  -%}
  Zamień znajdujący się pomiędzy tym fragmentem a odpowiadającym mu elementem "{% endif -%}" fragment kodu na :  
  • Kolejną czynnością w plikach html dla szablonu Topaz będzie zamiana w pliku partials/customer/account-data.html całego tego fragmentu:
{% if config.External.Facebook or config.External.Google  -%}
 
{{ translations.ExternalWebsites }} {% if customer-profile.LinkedAccounts[0] -%} {% assign fbConnect = 0 -%} {% assign googleConnect = 0 -%} {% for account in customer-profile.LinkedAccounts -%} {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %} {% assign fbConnect = 1 -%} {% elsif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %} {% assign googleConnect = 1 -%} {% endif %} {% endfor %} {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %} {% endif %} {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %} {% endif %} {% else %} {% if config.External.Facebook and config.External.Facebook.AppID != '' %} {% endif %} {% if config.External.Google and config.External.Google.ClientID != '' %} {% endif %} {% endif %}
 
{% endif -%} Na odpowiadający mu i poprawiony fragment:
{% if config.External.Facebook or config.External.Google  -%}
 
{{translations.ExternalWebsites}} {% if customer-profile.LinkedAccounts[0] -%} {% assign fbConnect = 0 -%} {% assign googleConnect = 0 -%} {% for account in customer-profile.LinkedAccounts -%} {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %} {% assign fbConnect = 1 -%} {% elsif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %} {% assign googleConnect = 1 -%} {% endif %} {% endfor %} {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %} {% endif %} {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %} {% endif %} {% else %} {% if config.External.Facebook and config.External.Facebook.AppID != '' %} {% endif %} {% if config.External.Google and config.External.Google.ClientID != '' %} {% endif %} {% endif %}
 
{% endif -%}
  • Następnie należy dokonać zmian w plikach koszyka. W zależności od wybranej wariancji w kreatorze pliki będą się róźnić numerkiem na końcu. Jednak zmiany w html są identyczne dla obydwóch wariancji. W pliku elements/cart/cart-1.html lub /cart-2.html wyszukaj fragment:
{% if config.External.Facebook or config.External.Google  -%}
{% endif -%} Następnie zamień ten fragment na wskazany poniżej:
{% if config.External.Facebook or config.External.Google  -%}
{% endif -%}

Pliki JavaScript

  • Zamień całą zawartość pliku js/google-login.js na ten kod:
function handleCredentialResponse(response) {
  setTimeout(function() {
    $.post(null,{ __action: 'External/GoogleLogin', __CSRF: __CSRF, id_token: response.credential },function(result){
        if (result.action.Result) {
            window.location.replace('');
        } else if (result.action.Code === 108) {
            var errMsg = document.querySelector('#google-signin').dataset.errorMsg;
            createMessage(errMsg);
        } else {
            createMessage(result);
        }
    });
  }, 1000);
}

window.onload = function () {
    google.accounts.id.initialize({client_id: __googleID, callback: handleCredentialResponse})
    google.accounts.id.renderButton(
      document.getElementById("google-signin"),
      { theme: "outline", size: "large", width: "250", logo_alignment: "center", text: "signin_with"}
    );

    $('body').on('click', '#linkGoogleAccount', function(){
      setTimeout(function() {
          $.post(null,{ __action: 'External/GoogleAccountLink', __CSRF: __CSRF, userID: __googleID },function(result){
              if (result.action.Result) {
                  location.reload();
              } else {
                  createMessage(result);
              }
          });
      }, 1000);
    });

    $('body').on('click', '#unlinkGoogleAccount', function(){
      $.post(null,{ __action: 'External/GoogleAccountUnlink', __CSRF: __CSRF },function(result){
          if (result.action.Result) {
              location.reload();
          } else {
              createMessage(result);
          }
      });
    });

    $('body').on('click', '.logout', function () {
        googleLogout();
    });
}

function googleLogout() {
  var auth2 = gapi.auth2.getAuthInstance();
  auth2.signOut();
}

function createMessage(obj) {
    if (obj.action.Code != 100) {
        app.showTemporaryPopup(obj.action.Message);
    }
}

  • W pliku js/layout3.js wyszukaj frazę clearInterval(intervalAddress);. Pod jej pierwszym wystąpieniem dodaj fragment location.reload();, w taki sposób jak jest to przedstawione w kodzie poniżej:
        clearInterval(intervalAddress);
    }
}, 1000);
location.reload();

Pliki css

  • W pliku css/layout0.css wyszukaj frazę login-container. Następnie zamień kod znajdujący się za tą frazą na odpowiadający mu fragment znajdujący się poniżej:
.login-container{`max-width:100%;width:30rem;padding:7rem 3rem;box-sizing:border-box;margin:0 auto}.login-container .form__input-wrapper{display:inline-block;position:relative;width:calc(100% - 30px);margin-left:30px;background-color:inherit;margin-bottom:23px}.login-container .form__icons:not(.form__preview){color:{{settings.primaryFontColor}};position:absolute;transform:translateY(-50%);top:20px;left:-30px}.login-container .form__icons.form__preview svg{fill:{{settings.linkFontColor}}}.login-container .form .form__icon_left,.login-container .form__icon_left{left:0}.login-container .form select{border-bottom:1px solid {{settings.primaryFontColor}}}.login-form__signIn{color:{{settings.primaryFontColor}};text-align:center;margin:0;font-weight:300;font-size:32px;display:block}.login-form__welcomeMsg{margin:0.6rem 0 4rem 0;color:{{settings.primaryFontColor}};opacity:0.65;text-align:center}.login-form__more-options{margin:0 0 18px;display:block;text-align:right}.login-form__registerLink{display:block;margin:20px auto 70px;text-align:center}.login-form__forget-password{font-size:12px;font-weight:300;color:{{settings.primaryFontColor}};text-decoration:none}.login-form__register{color:{{settings.linkFontColor}};font-weight:400;font-size:16px}.login-form__submit{margin:0 auto 2.5rem;width:100%;box-sizing:border-box;padding:.8rem 0;display:block;height:auto}.login-container .login-form__socialButtons{display:block;width:100%;font-size:14px;color:{{settings.primaryFontColor}};text-align:center}.login-container .login-form__socialButtons .login-form__socialButtons__buttons{display:flex;flex-direction:column}.login-container .login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container{display:flex;justify-content:center;align-items:center}.login-container .login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container .button__Social__facebook{display:flex;justify-content:center;align-items:center;border:1px solid #dadce0;width:248px;min-width:248px;height:38px;margin-top:35px;cursor:pointer;background-color:#FFF;color:#3c4043;margin-left:1px;border-radius:4px;font-weight:500;letter-spacing:0.3px}.login-container .login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container .button__Social__facebook:hover{background-color:#f9faff;border:1px solid #dbe1ee}.login-container .login-form__socialButtons .login-form__socialButtons__buttons .button__Social__google{display:flex;justify-content:center;align-items:center;margin-top:35px;cursor:pointer;background-color:#FFF}.login-container .login-form__socialButtons .login-form__socialButtons__title{display:block;width:100%;text-align:center;margin:50px 0 15px}.login-container .login-form__socialButtons .GFbLoginIcon{width:30px;height:30px;margin-right:7px}.login-container .login-form__socialButtons .FBIcon{width:21px;height:21px}
  • Następnie w pliku css/layout2.css wyszukaj frazę login-form__socialButtons. Zamień kod znajdujący się za pierwszym wystąpieniem tej frazy (łącznie z tą frazą) na ten wskazany poniżej:
.login-form__socialButtons{display:block;width:100%;font-size:14px;color:{{settings.primaryFontColor}};text-align:center}.login-form__socialButtons .login-form__socialButtons__buttons{display:flex;flex-direction:column}.login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container{display:flex;justify-content:center;align-items:center}.login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container .button__Social__facebook{display:flex;justify-content:center;align-items:center;border:1px solid #dadce0;width:248px;min-width:248px;height:38px;margin-top:20px;cursor:pointer;background-color:#FFF;color:#3c4043;margin-left:1px;border-radius:4px;font-weight:500;letter-spacing:0.3px}.login-form__socialButtons .login-form__socialButtons__buttons .Facebook_Login_Container .button__Social__facebook:hover{background-color:#f9faff;border:1px solid #dbe1ee}.login-form__socialButtons .login-form__socialButtons__buttons .button__Social__google{display:flex;justify-content:center;align-items:center;margin-top:20px;cursor:pointer;background-color:#FFF}.login-form__socialButtons .login-form__socialButtons__title{display:block;width:100%;text-align:center;margin:20px 0 0 0;font-size:20px;letter-spacing:1.2px}.login-form__socialButtons .GFbLoginIcon{width:30px;height:30px;margin-right:7px}.login-form__socialButtons .FBIcon{width:21px;height:21px}.primary-action-button .angleRight{fill:{{settings.primaryBtnFontColor}};margin-bottom:-3px;width:16px !important;height:16px !important}.primary-action-button:hover .angleRight{fill:{{settings.primaryBtnHoverFontColor}}}.primary-action-button--disabled .angleRight{fill:{{settings.primaryBtnFontColor}};margin-bottom:-3px;width:16px !important;height:16px !important}.primary-action-button--disabled:hover .angleRight{fill:{{settings.primaryBtnHoverFontColor}}}.cartContainer .validation-info__container{margin-top:6px}
  • Przygotowanie tekstów

Ostatnim etapem implementacji będzie dodanie odpowiednich tekstów do swojego szablonu. Odbywa się to poprzez opcję Tłumaczenia , która znajduje się w Panelu administracyjnym sklepu. Dokładna jej lokalizacja ukazana jest poniżej. W celu dodania tekstu klikamy przycisk dodaj. Dodajemy teksty według poniższej tabeli.
Id Tekst
ConnectFb Połącz konto z Facebookiem
ConnectGoogle Połącz konto z Google
 

Bursztyn

Pliki html

  • Na początek w pliku _layout.html wyszukaj fragment crossorigin="anonymous". Powinien wystąpić raz w całym pliku. Dokładnie w linijkę pod tym elementem wklej ten fragment kodu:

 
  • W pliku customer/login/login-form.html wyszukaj fragment:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%} {% endif -%} Następnie zamień go na ten wskazany poniżej:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%} {% endif -%}  
  • W pliku customer/registation.html wyszukaj fragment :
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' -%}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%} {% endif -%} Następnie zastąp go kodem ukazanym poniżej :
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' -%}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%} {% endif -%}  
  • Następnie w pliku customer/profile-account.html wyszukaj fragment :
    {% if customerProfile.LinkedAccounts[0] -%}
        {% assign fbConnect = 0 -%}
        {% assign googleConnect = 0 -%}
        {% for account in customerProfile.LinkedAccounts -%}
            {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
                
                {% assign fbConnect = 1 -%}
            {% elseif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
                
                {% assign googleConnect = 1 -%}
            {% endif %}
        {% endfor %}
        {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %}
            
        {% endif %}
        {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %}
            
        {% endif %}
    {% else %}
        {% if config.External.Facebook.AppID != '' and config.External.Facebook %}
            
        {% endif %}
        {% if config.External.Google.ClientID != '' and config.External.Google %}
            
        {% endif %}
    {% endif %}
Następnie zastąp ten fragment tym wskazanym poniżej:
    {% if customerProfile.LinkedAccounts[0] -%}
        {% assign fbConnect = 0 -%}
        {% assign googleConnect = 0 -%}
        {% for account in customerProfile.LinkedAccounts -%}
            {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
                
                {% assign fbConnect = 1 -%}
            {% elseif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
                
                {% assign googleConnect = 1 -%}
            {% endif %}
        {% endfor %}
        {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %}
            
        {% endif %}
        {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %}
            
        {% endif %}
    {% else %}
        {% if config.External.Facebook.AppID != '' and config.External.Facebook %}
            
        {% endif %}
        {% if config.External.Google.ClientID != '' and config.External.Google %}
            
        {% endif %}
    {% endif %}

Pliki JavaScript

  • W pliku js/order.js wyszukaj elemnt :
sessionStorage.removeItem('parcelSelected');
Powinien on wystąpić w tym pliku raz. Dokładnie w tym obszarze dokonaj zmian według fragmentu poniżej:
CreateTooltip(d.action);
lazyCheck();
location.reload();
$('html, body').animate({ scrollTop: $('#order-form').offset().top });
$(document).trigger('stepChanged', [step]);
sessionStorage.removeItem('parcelSelected');
 
  • Następnie w plikujs/google-login.js zastąp cały kod tym wskazanym poniżej :
function handleCredentialResponse(response) {
    setTimeout(function() {
      $.post(null,{ __action: 'External/GoogleLogin', __CSRF: __CSRF, id_token: response.credential },function(result){
        if (result.action.Result) {
            window.location.replace('');
        } else if (result.action.Code === 108) {
            var errMsg = document.querySelector('#google-signin').dataset.errorMsg;
            CreateTooltip({Type: 'err', Message: errMsg});
        } else {
            CreateTooltip(result.action);
        }
      });
    }, 1000);
  }
  
  window.onload = function () {
      google.accounts.id.initialize({client_id: __googleID, callback: handleCredentialResponse})
      google.accounts.id.renderButton(
        document.getElementById("google-signin"),
        { theme: "outline", size: "large", width: "325", logo_alignment: "center", text: "signin_with"}
      );
  
      $('body').on('click', '#linkGoogleAccount', function(){
        setTimeout(function() {
            $.post(null,{ __action: 'External/GoogleAccountLink',_csrf: __CSRF, userID: __googleID},function(result){
                if (result.action.Result) {
                    location.reload();
                } else {
                    CreateTooltip(result.action);
                }
            });
        }, 6000);
      });
  
      $('body').on('click', '#unlinkGoogleAccount', function(){
        $.post(null,{ __action: 'External/GoogleAccountUnlink',  __csrf: __CSRF},function(result){
            if (result.action.Result) {
                location.reload();
            } else {
                CreateTooltip(result.action);
            }
        });
      });
}

Pliki scss

  • W pliku scss/main.scss wyszukaj fragment:
.social-button {
  cursor: pointer;
  background-color: #4267b2;
  color: #fff;
  margin: 15px auto;
  padding: 15px 15px 10px;
  text-align: center;
  position: relative;
  transition: 200ms;
  display: block;
  .fa {
    font-size: 26px;
    position: relative;
    top: 5px;
    line-height: 0;
    margin-right: 5px;
  }
}

.client-panel {
  .social-button {
    &.google-button {
      background-color: #ea4335;
    }
  }
}

.register.container {
  .google-social-btn {
    margin-top: -15px;
  }
}

.google-social-btn {
  background-color: #ea4335;
  font-size: inherit;
  border: none;
  border-radius: 0;
  margin-top: 5px;
  &:hover {
    background-color: #da4639;
  }
}

.login-social-button {
  display: block;
  padding: 12px 0 13px;
  float: left;
  width: 100%;
  .fa-facebook-official {
    margin-right: 10px;
  }
}
Następnie zamień ten fragment według tego wskazanego poniżej :
.social-button {
  cursor: pointer;
  background-color: #FFF;
  color: #606060;
  margin: 15px auto;
  padding: 15px 15px 10px;
  text-align: center;
  position: relative;
  transition: 200ms;
  display: block;
  box-shadow: 0px 1px 1px 1px lightgray;
  font-weight: 700;
  .GLoginIcon{
    width: 30px;
    margin-right: 5px;
  }
  .FbLoginIcon{
    width:33px;
    margin-right: 5px;
  }
}
.social-button:hover{
  background-color: #E9E9E5;
  transition: 0,5s;
}

.register.container {
  .google-social-btn {
    margin-top: -15px;
  }
}

.login-social-button {
  font-family: system-ui;
  border: 1px solid #dadce0;
  border-radius: 4px;
  display: flex;
  justify-content: center;
  align-items: center;
  float: left;
  width: 325px;
  height: 44px;
  font-weight: 500;
  margin: 15px auto;
  color: #3c4043;
  cursor: pointer;

  .FbLoginIcon{
    width:21px;
    margin-right: 5px;
  }
}
.login-social-button:hover{
  background-color: #f9faff;
  border: 1px solid #dbe1ee;
}
 
  • W pliku scss/main2.scss zamień podany fragment:
.fb-login-section {
  background-color: #fff;
  padding: 0 25px 25px;
  display: inline-block;
  margin-top: -30px;
}
Na fragment wskazany poniżej:
.fb-login-section {
  background-color: #fff;
  display: inline-block;
  margin-top: -30px;
  padding: 0 25px 25px;
}
.fb-register-section{
  background-color: #fff;
  display: inline-block;
  margin-top: -30px;
  padding: 0 25px 0px;
}
Wskazówka
Pamiętaj, że pliki scss należy zminifikować. O tym jak skompilować i zminifikować pliki scss i js dowiesz się z artykułu o kompilacji i minifikacji.

Agat

Pliki html

  • Na początek w pliku _layout.html wyszukaj fragment crossorigin="anonymous". Powinien wystąpić raz w całym pliku. Dokładnie w linijkę pod tym elementem wklej ten fragment kodu:

 
  • W pliku partials/common/login-form.html wyszukaj fragment:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}

{% endif -%}
{% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}

{% endif -%}
Występuje on na końu kodu. Zamień wspomniany fragment na ten przedstawiony poniżej:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
{% endif -%}  
  • W pliku registration.html wyszukaj fragment:
{% if usr.Authenticated == 'false' and config.External.Facebook.AppID != '' and config.External.Facebook -%}

{% endif -%}
{% if usr.Authenticated == 'false' and config.External.Google.ClientID != '' and config.External.Google -%}

{% endif -%}
Następnie zastąp go fragmentem wsazanym poniżej:
{% if usr.Authenticated == 'false' and config.External.Facebook.AppID != '' and config.External.Facebook -%}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
{% endif -%}  
  • W pliku customer-profile.html wyszukaj fragment :
{% if customerProfile.LinkedAccounts[0] -%}
    {% assign fbConnect = 0 -%}
    {% assign googleConnect = 0 -%}
    {% for account in customerProfile.LinkedAccounts -%}
        {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
            
            {% assign fbConnect = 1 -%}
        {% elsif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
            
            {% assign googleConnect = 1 -%}
        {% endif %}
    {% endfor %}
    {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %}
        
    {% endif %}
    {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %}
        
    {% endif %}
{% else %}
    {% if config.External.Facebook and config.External.Facebook.AppID != '' %}
        
    {% endif %}
    {% if config.External.Google and config.External.Google.ClientID != '' %}
        
    {% endif %}
{% endif %}
Następnie podmień ten kod na:
{% if customerProfile.LinkedAccounts[0] -%}
	{% assign fbConnect = 0 -%}
	{% assign googleConnect = 0 -%}
	{% for account in customerProfile.LinkedAccounts -%}
		{% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
			
			{% assign fbConnect = 1 -%}
		{% elsif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
			
			{% assign googleConnect = 1 -%}
		{% endif %}
	{% endfor %}
	{% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %}
		
	{% endif %}
	{% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %}
		
	{% endif %}
{% else %}
	{% if config.External.Facebook and config.External.Facebook.AppID != '' %}
		
	{% endif %}
	{% if config.External.Google and config.External.Google.ClientID != '' %}
		
	{% endif %}
{% endif %}
 
  • W pliku partials/cart-content.html wyszukaj fragment:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
	
{% endif -%}
{% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
	
{% endif -%}
Zamień ten fragment tym wskzazanym poniżej:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
{% endif -%}

Pliki JavaScript

  • W pliku js/google-login.js zamień cały kod na ten wskazany poniżej:
function handleCredentialResponse(response) {
    setTimeout(function() {
      $.post(null,{ __action: 'External/GoogleLogin', __CSRF: __CSRF, id_token: response.credential },function(result){
          if (result.action.Result) {
              window.location.replace('');
          } else if (result.action.Code === 108) {
              var errMsg = document.querySelector('#google-signin').dataset.errorMsg;
              createMessage(errMsg);
          } else {
              createMessage(result);
          }
      });
    }, 1000);
  }
  
  window.onload = function () {
      google.accounts.id.initialize({client_id: __googleID, callback: handleCredentialResponse})
      google.accounts.id.renderButton(
        document.getElementById("google-signin"),
        { theme: "outline", size: "large", width: "355", logo_alignment: "center", text: "signin_with"}
      );
  
      $('body').on('click', '#linkGoogleAccount', function(){
        setTimeout(function() {
            $.post(null,{ __action: 'External/GoogleAccountLink', __CSRF: __CSRF, userID: __googleID },function(result){
                if (result.action.Result) {
                    location.reload();
                } else {
                    createMessage(result);
                }
            });
        }, 1000);
      });
  
      $('body').on('click', '#unlinkGoogleAccount', function(){
        $.post(null,{ __action: 'External/GoogleAccountUnlink', __CSRF: __CSRF },function(result){
            if (result.action.Result) {
                location.reload();
            } else {
                createMessage(result);
            }
        });
      });
  
      $('body').on('click', '.logout', function () {
          googleLogout();
      });
  }
  
  function googleLogout() {
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut();
  }
  
  function createMessage(obj) {
      if (obj.action.Code != 100) {
          application.createMessage(obj.action);
      }
  }

Pliki scss

  • W pliku scss/main.scss wyszukaj frazę span.social-button. Powinna występować raz w danym pliku. Następnie usuń z fragmentu pod tą linijką element width: 250px;, tak aby po edycji wyglądał w ten sposób:
span.social-button {
	margin: 5px;
}
 
  • W pliku scss/main2.scss wyszukaj fragment:
.login-social-button,
.client-profile .social-button {
  cursor: pointer;
  background-color: #4267b2;
  color: #fff;
  padding: 15px 15px 15px 50px;
  margin: 15px auto;
  position: relative;
  transition: 200ms;
  display: block;
  max-width: 400px;
  width: 100%;
}
.client-profile .social-button {
  display: inline-block;
}
.login-social-button i,
.client-profile .social-button i {
  font-size: 32px;
  position: absolute;
  left: 13px;
  top: 9px;
}
.login-social-button:hover,
.client-profile .social-button:hover {
  background-color: #365899;
  transition: 200ms;
}

.client-profile {
  .social-button {
    margin: 15px;
    &.google-button {
      background-color: #ea4335;
    }
  }
}

.google-social-btn {
  background-color: #ea4335;
  position: relative;
  display: block;
  margin: 0 auto;
  &:hover {
    background-color: #da4639;
  }
}
Następnie zamień go na ten przedstawiony poniżej:
.login-social-button,
.client-profile .social-button {
  cursor: pointer;
  background-color: #FFF;
  color: #7f7f7f;
  padding: 15px 0px 15px 0px;
  margin: 15px auto;
  position: relative;
  transition: 200ms;
  display: flex;
  max-width: 400px;
  width: 100%;
  justify-content: center;
  align-items: center;

}
.client-profile .social-button {
  display: inline-block;
}
.login-social-button,
.client-profile .social-button{
  font-size: 14px;
  display: flex;
  justify-content: center;
  align-items: center;
  top: 9px;
  border: 1px solid #dadce0;
  .GLoginIcon{
    width: 30px;
    margin-right: 10px;
  }
  .FbLoginIcon{
    width:33px;
    margin-right: 10px;
  }
}
.fblogin-button{
  font-family: system-ui;
  width: 351px;
  height: 38px;
  padding: 0px;
  border-radius: 4px;
  font-weight: 500;
  color: #3c4043;
  top: 0;
    .FbLoginIcon{
    width:21px;
    height: 21px;
    margin-right: 10px;
  }
}
.Googlelogin-button{
  display: flex;
  justify-content: center;
  align-items: center;
}
.login-social-button:hover,
.client-profile .social-button:hover {
  background-color: #f9faff;
  border: 1px solid #dbe1ee;
}
Wskazówka
Pamiętaj, że pliki scss należy zminifikować. O tym jak skompilować i zminifikować pliki scss i js dowiesz się z artykułu o kompilacji i minifikacji.

Opal

Pliki html

  • W pliku _layout.html wyszukaj frazę:

Dokładnie pod tym elementem wklej poniższy kod:

  • Następnie w plikach customer/login/login-form.html oraz customer/registration.html wyszukaj fragment:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
    
{% endif -%}
{% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
    
{% endif -%}
Zamień wspomniany fragment na ten ukazany poniżej:
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID != '' -%}
{% endif -%}
  • W pliku customer/profile-account.html wyszukaj fragment kodu:
{% if customerProfile.LinkedAccounts[0] -%}
    {% assign fbConnect = 0 -%}
    {% assign googleConnect = 0 -%}
    {% for account in customerProfile.LinkedAccounts -%}
        {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
            
            {% assign fbConnect = 1 -%}
        {% elseif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
            
            {% assign googleConnect = 1 -%}
        {% endif %}
    {% endfor %}
    {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' -%}
        
    {% endif %}
    {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' -%}
        
    {% endif %}
{% else %}
    {% if config.External.Facebook and config.External.Facebook.AppID != '' %}
        
    {% endif %}
    {% if config.External.Google and config.External.Google.ClientID != '' %}
        
    {% endif %}
{% endif %}
Zamień ten fragment na ten wskazany poniżej:
{% if customerProfile.LinkedAccounts[0] -%}
    {% assign fbConnect = 0 -%}
    {% assign googleConnect = 0 -%}
    {% for account in customerProfile.LinkedAccounts -%}
        {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
            
            {% assign fbConnect = 1 -%}
        {% elseif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
            
            {% assign googleConnect = 1 -%}
        {% endif %}
    {% endfor %}
    {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' -%}
        
    {% endif %}
    {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' -%}
        
    {% endif %}
{% else %}
    {% if config.External.Facebook and config.External.Facebook.AppID != '' %}
        
    {% endif %}
    {% if config.External.Google and config.External.Google.ClientID != '' %}
        
    {% endif %}
{% endif %}

Pliki JavaScript

  • W pliku js/google-login.js zamień cały kod na ten wskazany poniżej:
function handleCredentialResponse(response) {
    setTimeout(function() {
      $.post(null,{ __action: 'External/GoogleLogin', __csrf: __CSRF, id_token: response.credential },function(result){
          if (result.action.Result) {
              window.location.replace('');
          } else if (result.action.Code === 108) {
              var errMsg = document.querySelector('#google-signin').dataset.errorMsg;
              CreateTooltip({Type: 'err', Message: errMsg});
          } else {
              CreateTooltip(result.action);
          }
      });
    }, 1000);
  }
  
  window.onload = function () {
      google.accounts.id.initialize({client_id: __googleID, callback: handleCredentialResponse})
      google.accounts.id.renderButton(
        document.getElementById("google-signin"),
        { theme: "outline", size: "large", width: "350", logo_alignment: "center", text: "signin_with"}
      );
  
      $('body').on('click', '#linkGoogleAccount', function(){
        setTimeout(function() {
            $.post(null,{ __action: 'External/GoogleAccountLink', __csrf: __CSRF, userID: __googleID },function(result){
                if (result.action.Result) {
                    location.reload();
                } else {
                    CreateTooltip(result.action);
                }
            });
        }, 1000);
      });
      
      $('body').on('click', '#unlinkGoogleAccount', function(){
        $.post(null,{ __action: 'External/GoogleAccountUnlink', __csrf: __CSRF },function(result){
            if (result.action.Result) {
                location.reload();
            } else {
                CreateTooltip(result.action);
            }
        });
    });
}
  • W pliku js/order.js wyszukaj fragment:
$('.order:not(.order-content)').replaceWith(d.template);
lazyCheck();
$('html, body').animate({scrollTop: $('#order-form').offset().top});
$(document).trigger('stepChanged', [step]);
Następnie zamień ten fragment na ten wskazany poniżej:
location.reload();
lazyCheck();
$('html, body').animate({ scrollTop: $('#order-form').offset().top });
$(document).trigger('stepChanged', [step]);

Pliki scss

  • W pliku scss/main2.scss wyszukaj fragment kodu:
.social-button {
  cursor: pointer;
  background-color: #4267b2;
  color: #fff;
  padding: 15px 15px 10px;
  text-align: center;
  margin: 15px auto;
  position: relative;
  transition: 200ms;
  max-width: 350px;
  display: block;
  .fa {
    font-size: 26px;
    position: relative;
    top: 4px;
    line-height: 0;
    margin-right: 5px;
  }
}

.client-panel {
  .social-button {
    &.google-button {
      background-color: #ea4335;
    }
  }
}

.google-social-btn {
  background-color: #ea4335;
  font-size: inherit;
  border: none;
  border-radius: 0;
  margin-top: 5px;
  &:hover {
    background-color: #da4639;
  }
}

.login-social-button {
  display: block;
  padding: 14px 10px 11px;
  width: 100%;
  .fa-facebook-official {
    margin-right: 10px;
  }
}
Następnie zamień ten fragment na kod wskazany poniżej:
.social-button {
  cursor: pointer;
  background-color: #FFF;
  color: #3c4043;
  padding: 15px 15px 10px;
  text-align: center;
  margin: 15px auto;
  position: relative;
  transition: 200ms;
  max-width: 350px;
  display: block;
  border: 1px solid #dadce0;
  border-radius: 4px;
  .GLoginIcon{
    width: 30px;
    margin-right: 5px;
  }
  .FbLoginIcon{
    width:33px;
    margin-right: 5px;
  }
}
.social-button:hover{
  background-color: #f9faff;
  border: 1px solid #dbe1ee;
}
.facebookLogin-button{
  font-family: system-ui;
  font-weight: 500;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 38px;
  padding: 0;
  .FbLoginIcon{
    width:21px;
    margin-right: 5px;
  }
}

.google-social-btn {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 38px;
}
Wskazówka
Pamiętaj, że pliki scss należy zminifikować. O tym jak skompilować i zminifikować pliki scss i js dowiesz się z artykułu o kompilacji i minifikacji.

Graficzna prezentacja atrybutów - szablon Topaz

Wstęp

W szablonie Topaz od wersji 2022.4 wprowadzono możliwość graficznej prezentacji atrybutów towaru. Funkcja umożliwia prezentację atrybutów, w formie kolorów dla towarów zgrupowanych (fantomów) i tych posiadających atrybuty oraz w formie miniatur dla towarów zgrupowanych. W tym artykule dowiesz się jak zmodyfikować swój szablon, aby obsługiwał graficzną prezentację atrybutów.
Wskazówka
W tym artykule dowiesz się jak wprowadzać zmiany w plikach js i css. Z tego artykułu dowiesz się jak je minifikować.

Zmiana ustawień w Panelu Administracyjnym

W Panelu Administracyjnym wybierz zakładkę Wygląd sklepu/Ustawienia szablonu, a następnie w prawym górnym rogu kliknij na ikonę z trzema kwadratami i wybierz opcję Edytuj ustawienia zaawansowane. Następnie w zakładce Ustawienia (JSON) w oknie JSON znajdź na końcu kodu znak "}" i wklej przed nim poniższą instrukcję, po czym zapisz zmiany.
,"grapicalVariantsPresentation":"Variants_No","variantsGroupingAttribute":"Grouping_First","grapicalVariantsPresentationColorsPL":"Błękitny||#99CCFF|||Czerwony||#FF3300|||Niebieski||#3366FF|||Brązowy||#964b00|||Czarny||#000000|||Biały||#FFFFFF|||Złoty||#ffd700|||Różowy||#ffc0cb|||Turkusowy||#76D7C4|||Pomarańczowy||#fc9303|||Zielony||#008000|||Beżowy||#c2b280|||Bordowy||#800000|||Ciemny szary||#909090|||Fioletowy||#87599d|||Granatowy||#000080|||Szary||#b4b4b4|||Zgniło zielony||#a5a542|||Żółty||#ffef00","grapicalVariantsPresentationColorsEN":"Azure||#99CCFF|||Red||#FF3300|||Blue||#3366FF|||Brown||#964b00|||Black||#000000|||White||#FFFFFF|||Gold||#ffd700|||Pink||#ffc0cb|||Turquoise||#76D7C4|||Orange||#fc9303|||Green||#008000|||Beige||#c2b280|||Burgundy||#800000|||Dark grey||#909090|||Purple||#87599d|||Navy blue||#000080|||Gray||#b4b4b4|||Rotten green||#a5a542|||Yellow||#ffef00","grapicalVariantsPresentationColorsDE":"Azurblau||#99CCFF|||Rot||#FF3300|||Blau||#3366FF|||Braun||#964b00|||Schwarz||#000000|||Weiß||#FFFFFF|||Gold||#ffd700|||Rosa||#ffc0cb|||Türkis||#76D7C4|||Orange||#fc9303|||Grün||#008000|||Beige||#c2b280|||Kastanienbraun||#800000|||Dunkelgraué||#909090|||Violett||#87599d|||Marineblau||#000080|||Grau||#b4b4b4|||Fauliges Grün||#a5a542|||Gelb||#ffef00","grapicalVariantsPresentationColorsFR":"Azur||#99CCFF|||Rouge||#FF3300|||Bleu||#3366FF|||Marron||#964b00|||Noir||#000000|||Blanc||#FFFFFF|||Or||#ffd700|||Rose||#ffc0cb|||Turquoise||#76D7C4|||Orange||#fc9303|||Vert||#008000|||Beige||#c2b280|||Bordeaux||#800000|||Gris foncé||#909090|||Violet||#87599d|||Bleu marine||#000080|||Gris||#b4b4b4|||Vert pourri||#a5a542|||Jaune||#ffef00"

Zmiany w plikach szablonu

W pliku __settings.liquid znajdź frazę:
{% when '1' -%}
Pod podaną treścią należy wkleić poniższy kod:
{% assign additionalSettings = "Dodatkowe" -%}
{% assign grapicalVariantsPresentation_Title = "Graficzna prezentacja wariantów towarów" -%}
{% assign grapicalVariantsPresentation_No = "Nie" -%}
{% assign grapicalVariantsPresentation_Colors = "Kolory" -%}
{% assign grapicalVariantsPresentation_Thumbnails = "Miniatury (tylko dla towarów zgrupowanych)" -%}
{% assign grapicalVariantsPresentationColorSettings_Title = "Dodaj własne wartości atrybutów i przypisane dla nich wartości do poniższej listy" -%}
{% assign multiVariantProducts = "Towary wielowariantowe" -%}
{% assign variantsGroupingAttributeColors_Title = "W formie graficznej prezentowany będzie atrybut" -%}
{% assign variantsGroupingAttribute_Title = "W formie graficznej prezentowany będzie atrybut grupujący" -%}
{% assign variantsGroupingAttribute_First = "Pierwszy" -%}
{% assign variantsGroupingAttribute_Last = "Ostatni" -%}
{% assign variantsGroupingAttribute_All = "Wszystkie" -%}
{% assign addColor = "Dodaj kolor" -%}
{% assign grapicalVariantsPresentationColorSettings_Color = "Kolor" -%}
{% assign grapicalVariantsPresentationColorSettings_Value = "Wartość" -%}
{% assign delete = "Usuń" -%}
Następnie wyszukaj najbliższą frazę:
{% else %}
I wklej pod nią następujący kod:
{% assign additionalSettings = "Additional" -%}
{% assign grapicalVariantsPresentation_Title = "Graphical presentation of product variants" -%}
{% assign grapicalVariantsPresentation_No = "No" -%}
{% assign grapicalVariantsPresentation_Colors = "Colors" -%}
{% assign grapicalVariantsPresentation_Thumbnails = "Miniatures (only for grouped goods)" -%}
{% assign grapicalVariantsPresentationColorSettings_Title = "Add customized attribute values and assign them to the list below" -%}
{% assign multiVariantProducts = "Multivariant products" -%}
{% assign variantsGroupingAttributeColors_Title = "The attribute will be presented graphically" -%}
{% assign variantsGroupingAttribute_Title = "Grouping attribute will be presented in graphical form" -%}
{% assign variantsGroupingAttribute_First = "First" -%}
{% assign variantsGroupingAttribute_Last = "Last" -%}
{% assign variantsGroupingAttribute_All = "All" -%}
{% assign addColor = "Add color" -%}
{% assign grapicalVariantsPresentationColorSettings_Color = "Color" -%}
{% assign grapicalVariantsPresentationColorSettings_Value = "Value" -%}
{% assign delete = "Delete" -%}
Teraz znajdź fragment kodu:
#lg-settings-content .mainHeader {
	font-size: 22px;
	margin: 45px auto 10px;
}
A następnie zmień wartości marginesów na:
margin: 10px auto;
Kolejno wyszukaj:
#lg-settings-content .themeSettings__inputs > section
Podany fragment zastąp:
#lg-settings-content .themeSettings__inputs > section, #lg-settings-content .additionalSettingsTab section
Teraz wyszukaj:
#lg-settings-content .themeSettings__inputs .section-title
I zmień kod na poniższy:
#lg-settings-content .themeSettings__inputs .section-title, #lg-settings-content .additionalSettingsTab .section-title
Kolejno odnajdź instrukcję:
#lg-settings-content .colorInput {
	position: relative;
	box-shadow: 2px 8px 10px 0 rgba(0, 0, 0, .25);
	cursor: pointer;
	width: 80px !important;
	min-width: 80px !important;
	height: 22px;
	border-radius: 5px;
	margin: 5px 0 -5px 5px;
}
A następnie zastąp ją podanym fragmentem:
#lg-settings-content .colorInput, #lg-settings-content .variantColorInput {
	position: relative;
	box-shadow: 2px 8px 10px 0 rgba(0, 0, 0, .25);
	cursor: pointer;
	width: 80px !important;
	min-width: 80px !important;
	height: 22px;
	border-radius: 5px;
	margin: 5px 0 -5px 5px;
} 

#lg-settings-content .variantColorInput {
	width: 110px !important;
	min-width: 110px !important;
}

#lg-settings-content .colors-row {
	display: flex;
	width: 290px;
	border-bottom: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

#lg-settings-content .colors-row:first-child {
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
	font-weight: bold;
}

#lg-settings-content .colors-cell-title {
	display: flex;
	align-items: center;
}

#lg-settings-content .colors-cell-title p {
	padding: 0 5px;
}

#lg-settings-content .colors-cell {
	border-left: 1px solid #ddd;
	padding: 5px 0 10px;
}

#lg-settings-content .colors-cell-name {
	width: 120px;
}

#lg-settings-content .colors-cell-color {
	display: flex;
	width: 130px !important;
}

#lg-settings-content .colors-cell-delete {
	width: 40px;
	display: flex;
	justify-content: center;
	align-items: center;
}

#lg-settings-content .colors-cell-delete div {
	cursor: pointer;
	padding: 5px;
}

#lg-settings-content .add-variant-color {
	margin: 10px 0;
}
Kolejnym etapem jest zmiana wyświetlanej treści w ustawieniach Panelu Administracyjnego. Wyszukaj fragment:
{{saveChangesTranslation}}

I poniżej powyższego kodu wklej poniższe instrukcje:

 
 
Teraz odszukaj instrukcję:

A linijkę przed nią wklej:

 
 
  {{multiVariantProducts}} 

{{grapicalVariantsPresentation_Title}}

 
 
 
 
 
 
 
 
 

{{variantsGroupingAttribute_Title}}

 

{{variantsGroupingAttributeColors_Title}}

 
 
 
 
 
 
 
 
 

{{grapicalVariantsPresentationColorSettings_Title}}

{% assign colorVariantsPresentationLanguageTableText = 'PL,EN,DE,FR,UK,RU,CS,SK,BG,DA,EL,ES,FI,IT,NO,NL,PT,RO,HR,ET,BE,IS,SV,LT,LV,HU,SR,SL,MK,TR,JA,SQ,KA' -%} {% assign colorVariantsPresentationLanguageTable = colorVariantsPresentationLanguageTableText | Split: ',' -%} {{chooseColorVariantsPresentationLanguage}}: {% for language in colorVariantsPresentationLanguageTable -%} {% assign variableName = 'grapicalVariantsPresentationColors' | Append: language -%} {% if settings[variableName] -%} {% endif -%} {% endfor -%}
 
 
  {{SizeChartTitle}} 

{{SizeChartSectionOne}}

 
 
 
 
 
 
 
 
 

{{SizeChartSectionTwo}}

 
 
 
 
 
 
 
 
 
 
 

Ostatnim etapem zmian w pliku jest edycja kodu JavaScript. Znajdź fragment:
function __SaveLiquidSettings(){
        var o = {};
        $('#lg-settings-content input[name], #lg-settings-content div[data-name]').each(function(i,el) {
            if($(el).attr('type') == 'radio' || $(el).attr('type') == 'checkbox') {
                if($(el).is(':checked')) {
                    o[el.name] = el.value;
                }
            } else if ($(el).attr('type') == 'color') {
                o[el.dataset.name] = el.dataset.value;
				(el.dataset.value).length > 7 ? el.classList.add('transparent-js') : el.classList.remove('transparent-js');
            } else {
                o[el.name] = el.value;
			}
        });
        return o;
    }
A nastepnie podmień go na:
if($('#grapicalVariantsPresentation-Colors').prop('checked')){
	    $('.grapicalVariantsPresentationColorSettings').show();
		$('.grouping-attribute-thumbnails').hide();
		$('.grouping-attribute-colors').show();
    } else {
	    $('.grapicalVariantsPresentationColorSettings').hide();
    }

	if($('#grapicalVariantsPresentation-Thumbnails').prop('checked')){
		$('.grouping-attribute-thumbnails').show();
		$('.grouping-attribute-colors').hide();
    }

	if($('#grapicalVariantsPresentation-No').prop('checked')){
		$('.variantsGroupingAttributeSettings').hide();
		$('.grouping-attribute-thumbnails').hide();
		$('.grouping-attribute-colors').hide();
    } else {
	    $('.variantsGroupingAttributeSettings').show();
    }

	$('[name=grapicalVariantsPresentation]').on('change', function(){
	    if($('#grapicalVariantsPresentation-Colors').prop('checked')){
			$('.grapicalVariantsPresentationColorSettings').show();
			$('.variantsGroupingAttributeSettings').show();
			$('.grouping-attribute-thumbnails').hide();
			$('.grouping-attribute-colors').show();
		} else if($('#grapicalVariantsPresentation-Thumbnails').prop('checked')) {
			$('.variantsGroupingAttributeSettings').show();
			$('.grapicalVariantsPresentationColorSettings').hide();
			$('.grouping-attribute-thumbnails').show();
			$('.grouping-attribute-colors').hide();
		} else {
			$('.grapicalVariantsPresentationColorSettings').hide();
			$('.variantsGroupingAttributeSettings').hide();
			$('.grouping-attribute-thumbnails').hide();
			$('.grouping-attribute-colors').hide();
		}
    });

	$('#lg-settings-content .add-variant-color').on('click', function(e){
		var colorsTableClass = $(e.currentTarget).prev().prev().val();
		var colorsTable = $(e.currentTarget).parent().find('.' + colorsTableClass);
		var newColorNumber = colorsTable.find('.colors-row').length - 1;
		var colorsTableTitle = colorsTable.find('.colors-row-title');
		colorsTableTitle.after('
'+ '
'+ '
'+ '
'+ '
'+ '
'); var openPaletteBtns = document.querySelectorAll('.openPaletteBtn-js'); var colorInputs = document.querySelectorAll('.colorInput'); var oldColor; for (let i = 0; i < openPaletteBtns.length; i++) { openPaletteBtns[i].addEventListener('click', function() { var pickerColor = colorPicker.checkIfHex(this.dataset.value); oldColor = pickerColor; colorPicker.openPalette(this); colorPicker.setTransparencyGradient(pickerColor); colorPicker.setTransparencyPicker(this.dataset.value); }); } for (let i = 0; i < colorInputs.length;i++) { colorInputs[i].addEventListener('change', function() { var hex = $(this).val(); var alphaPickerPosition = (document.querySelector('.selectedAlpha-js').style.left).replace(/\D/g, ''); var alphaValue = (1 - (alphaPickerPosition / 300)).toFixed(2); var rgbaColor = "rgba(" + colorPicker.hexToRgb(hex).r + "," + colorPicker.hexToRgb(hex).g + "," + colorPicker.hexToRgb(hex).b + "," + alphaValue + ")"; colorPicker.clearCanvas(); colorPicker.drawElements(hex); colorPicker.setTransparencyGradient(hex); openPaletteBtns[i].style.backgroundColor = rgbaColor; openPaletteBtns[i].setAttribute("data-value",rgbaColor); this.setAttribute("data-value", hex); this.setAttribute("value", hex); }); } $('.colors-delete-js').on('click', function(e) { var colorToRemove = $(e.currentTarget).parent().parent(); colorToRemove.remove(); }); }); $('.colors-delete-js').on('click', function(e) { var colorToRemove = $(e.currentTarget).parent().parent(); colorToRemove.remove(); }); $('.grapicalVariantsPresentationColorSelectLng').on('change', function() { var colorsTables = $('.grapicalVariantsPresentationColorTable'); for(var i = 0; i < colorsTables.length; i++) { $(colorsTables[i]).hide(); } var languageToDisplay = $('.grapicalVariantsPresentationColorSelectLng').val(); var tableToDisplay = '.grapicalVariantsPresentationColorTable.' + languageToDisplay; if($(tableToDisplay).length > 0) { $(tableToDisplay).show(); } else { var colorsTablesSection = $('.grapicalVariantsPresentationColorSettings'); colorsTablesSection.append('
' + '
' + '
' + ' Kolor (' + languageToDisplay + ')
' + '
' + ' Wartość
' + '
' + ' Usuń
'); } }); function __SaveLiquidSettings(){ var o = {}; var colorsVariants = []; var tempColorsVariants = []; $('#lg-settings-content input[name], #lg-settings-content div[data-name]').each(function(i,el) { if($(el).attr('type') == 'radio' || $(el).attr('type') == 'checkbox') { if($(el).is(':checked')) { o[el.name] = el.value; } } else if ($(el).attr('type') == 'colorVariant') { var colorLanguage = $(el).closest('.grapicalVariantsPresentationColorTable')[0].classList[1]; var toAdd = true; var hexColorVariant = el.dataset.value; var colorRow = el.parentElement.parentElement; var colorName = colorRow.querySelector('.variantColorInputName').value.trim(); if(colorRow.querySelector('.variantColorInputName').value !== colorName) { colorRow.querySelector('.variantColorInputName').value = colorName; } var arrayIndex = 0; var hasLanguage = false; if(!tempColorsVariants) { tempColorsVariants[0][0] = colorLanguage; colorsVariants[0][0] = colorLanguage; } else { for(var i = 0; i < tempColorsVariants.length; i++) { if(tempColorsVariants[i][0] == colorLanguage) { arrayIndex = i; hasLanguage = true; break; } } if(!hasLanguage) { tempColorsVariants.push([colorLanguage]); colorsVariants.push([colorLanguage]); arrayIndex = tempColorsVariants.length - 1; } } for(var i=1; i < tempColorsVariants[arrayIndex].length; i++) { if (tempColorsVariants[arrayIndex][i].toLowerCase() === colorName.toLowerCase()) { toAdd = false; break; } } if (!colorName) { toAdd = false; } if (toAdd) { if (colorsVariants[arrayIndex][1] && hexColorVariant) { colorsVariants[arrayIndex][1] = colorsVariants[arrayIndex][1] + '|||'; } if (colorsVariants[arrayIndex].length < 2) { colorsVariants[arrayIndex].push(colorName + '||' + hexColorVariant); } else { colorsVariants[arrayIndex][1] = colorsVariants[arrayIndex][1] + colorName + '||' + hexColorVariant; } tempColorsVariants[arrayIndex].push(colorName); } else { var elementToRemove = colorRow.querySelector('.variantColorInputName').parentElement.parentElement; elementToRemove.remove(); } } else if ($(el).attr('type') == 'color') { o[el.dataset.name] = el.dataset.value; (el.dataset.value).length > 7 ? el.classList.add('transparent-js') : el.classList.remove('transparent-js'); } else { o[el.name] = el.value; } }); if (colorsVariants !== "") { for(var i = 0; i < colorsVariants.length; i++) { o['grapicalVariantsPresentationColors' + colorsVariants[i][0]] = colorsVariants[i][1]; } } $('.selectedTheme-js').attr('id') === "themecolorDark" ? o["defaultColor"] = "#ffffff" : o["defaultColor"] = "#000000"; return o; } Kolejne zmiany w plikach szablonu Topaz dotyczą plików widoku szczegółów towaru. Kreator szablonów umożliwia wygenerowanie czterech różnych widoków szczegółów towarów, dlatego zmiany dla każdego z nich mogą się różnić. Na początku wykonaj zmiany w pliku z kodem JavaScript. Są one identyczne dla wszystkich widoków i należy ich dokonać w pliku js/layout2.js. Wyszukaj w pliku fragment:
function SetSuplFirst(drop, s, lvl, valId) {
    var form = drop.parent().parent().parent();
    var fDrop = form.find('.attributes-select');
    drop.empty();
    for (var el in s) {
        drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el])));
    }
Przedstawioną powyżej pętle for podmień na następujący kod:
var attributesColorsData = drop.data('variants-colors');
    var attributesColors = [];
    if (attributesColorsData) {
        attributesColorsData = attributesColorsData.split('|||');
        for (var i = 0; i < attributesColorsData.length; i++) {
            var attributesColor = attributesColorsData[i].split('||');
            attributesColors.push([attributesColor[0],attributesColor[1]]);
        }
    }
    for (var el in s) {
        if (drop.data('variants-colors')) {
            if ((drop.data('colors-option') === 'Grouping_First' && drop.data('attribute-id') === drop.data('first-attribute-id'))
                || (drop.data('colors-option') === 'Grouping_Last' && drop.data('attribute-id') === drop.data('last-attribute-id'))
                || (drop.data('colors-option') === 'Grouping_All')) {
                var bgVariantColor = null;
                var borderVariantColor = null
                for (var i = 0; i < attributesColors.length; i++) {
                    if (attributesColors[i][0].toLowerCase() === s[el].Value.toLowerCase()) {
                        bgVariantColor = attributesColors[i][1];
                        borderVariantColor = attributesColors[i][1];
                    }
                }
				if (!bgVariantColor) {
                    bgVariantColor = '#FFFFFF';
                }
                if (bgVariantColor === '#FFFFFF' || bgVariantColor === drop.data('page-bg')) {
                    borderVariantColor = null;
                }
                drop.append($('
' + s[el].Value + '
 
').data('el', JSON.stringify(s[el])));
            }
            else {
                drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el])));
            }  
        }
        else if (drop.data('thumbnails')) {
            var bgVariantImage
            if (s[el].Product) {
                if (s[el].Product.ImagesExt[0].ExternalUrl) {
                    bgVariantImage = "url(" + s[el].Product.ImagesExt[0].ExternalUrl + ")";
                }
                else {
                    bgVariantImage = "url(img/" + s[el].Product.ImagesExt[0].Id + "/" + s[el].Product.ImagesExt[0].Link + ")";
                }
            } else {
                var chcekImagesLoopObj = s[el].Supplies[0]
                while (!chcekImagesLoopObj.Product) {
                    chcekImagesLoopObj = chcekImagesLoopObj.Supplies[0];
                }
                if (chcekImagesLoopObj.Product.ImagesExt[0].ExternalUrl) {
                    bgVariantImage = "url(" + chcekImagesLoopObj.Product.ImagesExt[0].ExternalUrl + ")";
                } else {
                    bgVariantImage = "url(img/" + chcekImagesLoopObj.Product.ImagesExt[0].Id + "/" +  chcekImagesLoopObj.Product.ImagesExt[0].Link + ")";
                }
            }
            if ((drop.data('thumbnails-option') === 'Grouping_First' && drop.data('attribute-id') === drop.data('first-attribute-id'))
                || (drop.data('thumbnails-option') === 'Grouping_Last' && drop.data('attribute-id') === drop.data('last-attribute-id'))
                || (drop.data('thumbnails-option') === 'Grouping_All')) {
                drop.append($('
' + s[el].Value + '
 
').data('el', JSON.stringify(s[el])));
            } else {
                drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el])));
            }
        } else {
            drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el])));
        }
    }
Analogiczną zmianę wykonaj w sekcji:
function SetSupl(drop, s) {
    var form = drop.closest('#AddToCartForm');
    var fDrop = form.find('.attributes-select');
    drop.empty();
    for (var el in s) {
        drop.append($('' + s[el].Value + '').data('el', JSON.stringify(s[el])));
    }
Instrukcję pętli for podmień na ten sam kod, co dla fragmentu znajdującego się w funkcji SetSuplFirst. Następne zmiany dotyczyć będą pliku html. Zmiany zostaną omówione na przykładzie pliku elements/product/product-details-3.html, lecz omawiany kod będzie identyczny dla innych widoków szczegółów towaru. Róźnić się będzie jedynie nazwa edytowanego pliku, a dokładniej cyfra znajdująca się w nazwie. Na początku wyszukaj fragment:
{% if product.Archival == false -%}
          {% if product.Clip or product.Batch -%}
          
          {% if product.Clip or product.Batch -%}
          
          {% endif -%}
{% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%}

Przedstawiony powyżej element div (linijka od 7 do 12) zamień na następujący kod:
{% assign pageLanguageShort = page.Language | Upcase -%}
{% assign settingsVariableName = 'grapicalVariantsPresentationColors' | Append: pageLanguageShort -%}
{% assign grapicalVariantsPresentationColorsData = settings[settingsVariableName] -%}
{% if settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%}
    {% assign attributesThumbnails = true -%}
{% endif -%}
{% if settings.grapicalVariantsPresentation == 'Variants_Colors' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% elseif settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% else -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% endif -%}
  Teraz znajdź:
{% elseif product.AttributesPolyvalent != empty -%}
{% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% assign i = 0 -%} {% for value in attribute.Values -%} {% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%}
I powyższy kod zamień na:
{% elseif product.AttributesPolyvalent != empty -%}
	{% assign loopAttributeFlag = false -%}
        {% assign attributeQuantity = product.AttributesPolyvalent | Size -%}
        {% assign loopIterationVariable = 0 -%}
        {% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% assign i = 0 -%} {% assign loopIterationVariable = loopIterationVariable | Plus: 1 -%} {% if settings.variantsGroupingAttribute == 'Grouping_First' and loopIterationVariable == 1 -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_Last' and loopIterationVariable == attributeQuantity -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_All' -%} {% assign loopAttributeFlag = true -%} {% else -%} {% assign loopAttributeFlag = false -%} {% endif -%} {% if settings.grapicalVariantsPresentation == 'Variants_Colors' and grapicalVariantsPresentationColorsData and loopAttributeFlag -%} {% assign variantsColorArr = grapicalVariantsPresentationColorsData | Split: '|||' -%} {% for value in attribute.Values -%} {% assign bgColorValue = '' -%} {% assign borderColorValue = '' -%} {% for colorValue in variantsColorArr -%} {% assign colorValueArr = colorValue | Split: '||' -%} {% assign colorValueName = colorValueArr[0] | Downcase -%} {% assign colorValueHash = colorValueArr[1] -%} {% assign colorValueToCheck = value.Value | H | Downcase -%} {% if colorValueName == colorValueToCheck -%} {% assign bgColorValue = colorValueHash -%} {% endif -%} {% endfor -%} {% if bgColorValue == '' -%} {% assign bgColorValue = '#FFFFFF' -%} {% endif -%} {% if bgColorValue != '#FFFFFF' or bgColorValue != settings.primaryPageBgColor -%} {% assign borderColorValue = bgColorValue -%} {% endif -%}
 
 
{{ value.Value | H }}
 
{% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%} {% else -%} {% for value in attribute.Values -%} {% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%} {% endif -%}
W przypadku kiedy szablon Topaz umożliwia zakup z listy towarów, konieczne są zmiany w pliku partials/products-list/add-to-cart-popup.html. Jeśli Twój szablon nie posiada tej opcji, możesz pominąć ten krok. Na początku wyszukaj fragment:
{% if product.Archival == false -%}
{% if product.Clip or product.Batch -%}

{% if product.Clip or product.Batch -%}

{% endif -%}
{% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%}
{% elseif product.AttributesPolyvalent != empty -%} {% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% for value in attribute.Values -%} {{ value.Value | H }} {% endfor -%}
A następnie zamień go na:
{% if product.Archival == false -%}
    {% assign pageLanguageShort = page.Language | Upcase -%}
    {% assign settingsVariableName = 'grapicalVariantsPresentationColors' | Append: pageLanguageShort -%}
    {% assign grapicalVariantsPresentationColorsData = settings[settingsVariableName] -%}
    {% if settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%}
        {% assign attributesThumbnails = true -%}
    {% endif -%}
    {% if product.Clip or product.Batch -%}
        
        {% if product.Clip or product.Batch -%}
             
        {% endif -%}
{% if settings.grapicalVariantsPresentation == 'Variants_Colors' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% elseif settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% else -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% endif -%}
{% elseif product.AttributesPolyvalent != empty -%} {% assign loopAttributeFlag = false -%} {% assign attributeQuantity = product.AttributesPolyvalent | Size -%} {% assign loopIterationVariable = 0 -%} {% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% assign loopIterationVariable = loopIterationVariable | Plus: 1 -%} {% if settings.variantsGroupingAttribute == 'Grouping_First' and loopIterationVariable == 1 -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_Last' and loopIterationVariable == attributeQuantity -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_All' -%} {% assign loopAttributeFlag = true -%} {% else -%} {% assign loopAttributeFlag = false -%} {% endif -%} {% if settings.grapicalVariantsPresentation == 'Variants_Colors' and grapicalVariantsPresentationColorsData and loopAttributeFlag -%} {% assign variantsColorArr = grapicalVariantsPresentationColorsData | Split: '|||' -%} {% for value in attribute.Values -%} {% assign bgColorValue = '' -%} {% assign borderColorValue = '' -%} {% for colorValue in variantsColorArr -%} {% assign colorValueArr = colorValue | Split: '||' -%} {% assign colorValueName = colorValueArr[0] | Downcase -%} {% assign colorValueHash = colorValueArr[1] -%} {% assign colorValueToCheck = value.Value | H | Downcase -%} {% if colorValueName == colorValueToCheck -%} {% assign bgColorValue = colorValueHash -%} {% endif -%} {% endfor -%} {% if bgColorValue == '' -%} {% assign bgColorValue = '#FFFFFF' -%} {% endif -%} {% if bgColorValue != '#FFFFFF' or bgColorValue != settings.primaryPageBgColor -%} {% assign borderColorValue = bgColorValue -%} {% endif -%}
 
 
{{ value.Value | H }}
 
{% endfor -%} {% else -%} {% for value in attribute.Values -%} {{ value.Value | H }} {% endfor -%} {% endif -%}
Na koniec znajdź jeszcze fragment:
{% if product.Archival == false -%} {% if product.Clip or product.Batch -%} {% if product.Clip or product.Batch -%} {% endif -%}
{% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%}
{% elseif product.AttributesPolyvalent != empty -%} {% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% assign i = 0 -%} {% for value in attribute.Values -%} {% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%}
I zastąp go poniższym kodem:
{% if product.Archival == false -%} {% assign pageLanguageShort = page.Language | Upcase -%} {% assign settingsVariableName = 'grapicalVariantsPresentationColors' | Append: pageLanguageShort -%} {% assign grapicalVariantsPresentationColorsData = settings[settingsVariableName] -%} {% if settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%} {% assign attributesThumbnails = true -%} {% endif -%} {% if product.Clip or product.Batch -%} {% if product.Clip or product.Batch -%} {% endif -%}
{% if settings.grapicalVariantsPresentation == 'Variants_Colors' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% elseif settings.grapicalVariantsPresentation == 'Variants_Thumbnails' -%} {% assign firstAttribute = product.Supplies.AttributeNames|First -%} {% assign lastAttribute = product.Supplies.AttributeNames|Last -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% else -%} {% for attribute in product.Supplies.AttributeNames -%} {{ attribute.Name | H }}
{% endfor -%} {% endif -%}
{% elseif product.AttributesPolyvalent != empty -%} {% assign loopAttributeFlag = false -%} {% assign attributeQuantity = product.AttributesPolyvalent | Size -%} {% assign loopIterationVariable = 0 -%} {% for attribute in product.AttributesPolyvalent -%}
{{ attribute.Name }}
{% assign i = 0 -%} {% assign loopIterationVariable = loopIterationVariable | Plus: 1 -%} {% if settings.variantsGroupingAttribute == 'Grouping_First' and loopIterationVariable == 1 -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_Last' and loopIterationVariable == attributeQuantity -%} {% assign loopAttributeFlag = true -%} {% elseif settings.variantsGroupingAttribute == 'Grouping_All' -%} {% assign loopAttributeFlag = true -%} {% else -%} {% assign loopAttributeFlag = false -%} {% endif -%} {% if settings.grapicalVariantsPresentation == 'Variants_Colors' and grapicalVariantsPresentationColorsData and loopAttributeFlag -%} {% assign variantsColorArr = grapicalVariantsPresentationColorsData | Split: '|||' -%} {% for value in attribute.Values -%} {% assign bgColorValue = '' -%} {% assign borderColorValue = '' -%} {% for colorValue in variantsColorArr -%} {% assign colorValueArr = colorValue | Split: '||' -%} {% assign colorValueName = colorValueArr[0] | Downcase -%} {% assign colorValueHash = colorValueArr[1] -%} {% assign colorValueToCheck = value.Value | H | Downcase -%} {% if colorValueName == colorValueToCheck -%} {% assign bgColorValue = colorValueHash -%} {% endif -%} {% endfor -%} {% if bgColorValue == '' -%} {% assign bgColorValue = '#FFFFFF' -%} {% endif -%} {% if bgColorValue != '#FFFFFF' or bgColorValue != settings.primaryPageBgColor -%} {% assign borderColorValue = bgColorValue -%} {% endif -%}
 
 
{{ value.Value | H }}
 
{% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%} {% else -%} {% for value in attribute.Values -%} {% assign i = i | Plus: 1 -%} {% endfor -%} {% if i >= 4 -%} {% assign diff = i | Minus: 4 -%}

{{translations.ReadMore}} +{{diff}}

{% endif -%} {% endif -%}
Ostatnim etapem zmian w szablonie Topaz w celu graficznej prezentacji atrybutów jest zmiana plików css w szablonie. Pliki ze stylami różnią się w zależności od wybranego szczegółu towaru. Poniższe zmiany dotyczą pierwszego i drugiego widoku szczegółów towaru. Zmiany dla pozostałych widoków przedstawione są w dalszej częsci artykułu. W pliku css/layout1.css zlokalizuj podany fragment:
.product-details .input-group .wrongInput{border-bottom:1px solid #ce283e !important}.product-details .input-group .wrongInput--info{font-size:11px;text-align:left;color:#ce283e;position:absolute;left:0%;margin-top:-10px}.product-details .input-group input[name="attributeEditable"]{margin:30px 0 15px;padding-bottom:10px}.product-details .input-group .attributes-select{display:inline-block}
A następnie zaraz po ostatnim znaku powyższego kodu wklej:
.product-details .input-group .button-option-variants{height:auto;font-size:13px;padding:0 8px}.product-details .input-group .button-option-variants .button-option-variants-content{display:flex;flex-direction:column;align-items:center;padding:5px 0;margin:0 auto}.product-details .input-group .button-option-variants .button-option-variants-content__color{width:50px;height:50px;border:1px solid {{settings.secondaryFontColor}};border-radius:50%;margin-bottom:5px;background-size:cover !important}.product-details .input-group .button-option-variants .button-option-variants-content__text{line-height:1em;width:70px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
Na koniec odnajdź fragment:
.product-details .dropdown .dropdown-content{display:none;position:absolute;background-color:{{settings.primaryPageBgColor}};box-shadow:0 8px 16px 0 rgba(0,0,0,0.2);z-index:1;overflow-y:auto;max-height:190px;min-width:220px;padding:10px 15px}
I zmień wartość maksymalnej wysokości:
max-height:180px;
Następne zmiany stylistyki szablonu Topaz dotyczą wyłącznie trzeciego i czwartego widoku szczegółów towaru. W przypadku pozostałych widoków, wszystkie zmiany zostały już przedstawione. W pliku css/layout2.css należy wyszukać w pliku fragment:
.productDetails-attributes .breakLine{display:block;width:100%;height:0;margin:0}
A następnie przed powyższym kodem dodaj:
.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-variants{height:auto;font-size:13px;padding:0 6px}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-variants .button-option-variants-content{display:flex;flex-direction:column;align-items:center;padding:10px 0}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-variants .button-option-variants-content__color{width:50px;height:50px;border:1px solid {{settings.secondaryFontColor}};border-radius:50%;margin-bottom:5px;background-size:cover !important}.productDetails-attributes .button-option:not(.dropdown):not(.units-container) .button-option-variants .button-option-variants-content__text{line-height:1em;width:65px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
Teraz odnajdź w pliku instrukcje:
.choose-attribute-popup .attribute-name,.choose-attribute-popup .attr-ed-name{color:{{settings.primaryFontColor}};width:30%;font-size:14px;font-weight:bold;line-height:1.43;letter-spacing:normal;margin-bottom:10px}.choose-attribute-popup .attribute-name::first-letter,.choose-attribute-popup .attr-ed-name::first-letter{text-transform:capitalize}
I wklej przed podanym fragmentem takie instrukcje:
.choose-attribute-popup .attributes-select .button-option-variants{height:auto;font-size:13px;padding:0 6px;width:fit-content;margin:0 auto}.choose-attribute-popup .attributes-select .button-option-variants .button-option-variants-content{display:flex;flex-direction:column;align-items:center;padding:10px 0}.choose-attribute-popup .attributes-select .button-option-variants .button-option-variants-content__color{width:50px;height:50px;border:1px solid {{settings.secondaryFontColor}};border-radius:50%;margin-bottom:5px;background-size:cover !important}.choose-attribute-popup .attributes-select .button-option-variants .button-option-variants-content__text{line-height:1em;width:65px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
Następnie wyszukaj fragment:
@media screen and (min-width: 769px){.productDetails .popup-dialog .form-container{width:35rem !important;max-width:unset !important;padding:3rem 4rem 2rem}}
Aby podmienić go na poniższe wartości:
@media screen and (min-width: 769px){.productDetails .popup-dialog .form-container{width:55rem !important;max-width:unset !important;padding:3rem 4rem 2rem}}
Kolejno zlokalizuj instrukcje:
.choose-attribute-popup .form-container{padding:20px}.choose-attribute-popup .input-group{width:100%;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.choose-attribute-popup .attributes-select{display:grid;width:100%;grid-template-columns:33% 33% 33%;grid-row-gap:10px;max-width:unset}
I zastąp je następującymi:
.choose-attribute-popup .form-container{padding:20px}.choose-attribute-popup .close-button{right:40px}.choose-attribute-popup .input-group{width:100%;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.choose-attribute-popup .attributes-select{display:grid;width:100%;grid-template-columns:16% 16% 16% 16% 16% 16%;column-gap:6px;grid-row-gap:10px;max-width:unset}
Ostatnim etapem zmian w pliku jest aktualizacja podanego kodu:
.choose-attribute-popup .attr-popup-button{width:calc(100%-34px);height:16px;font-size:14px;font-weight:normal;font-stretch:normal;font-style:normal;line-height:16px;letter-spacing:1.2px;text-align:center}.choose-attribute-popup .button-option[data-selected="true"]{border:2px solid {{settings.linkFontColor}} !important}.choose-attribute-popup .attr-values{display:grid;grid-template-columns:33% 33% 33%;grid-row-gap:10px;width:100%;background-color:{{settings.primaryPageBgColor}} !important}
Na poniższy fragment:
.choose-attribute-popup .attr-popup-button{width:50%;margin:0 auto;height:16px;font-size:14px;font-weight:normal;font-stretch:normal;font-style:normal;line-height:16px;letter-spacing:1.2px;text-align:center}.choose-attribute-popup .button-option[data-selected="true"]{border:2px solid {{settings.linkFontColor}} !important}.choose-attribute-popup .attr-values{display:grid;grid-template-columns:16% 16% 16% 16% 16% 16%;column-gap:6px;grid-row-gap:10px;width:100%;background-color:{{settings.primaryPageBgColor}} !important}
W przypadku trzeciego i czwartego widoku szczegółów towaru, konieczne są jeszcze dodatkowe zmiany w pliku css/layout-m0.css. Na początku wyszukaj fragment:
.productDetails .popup-dialog .main-title{max-width:85%}.productDetails .popup-dialog .primary-action-button{line-height:11px}.productDetails .popup-dialog .form-container{width:95%;padding:2rem 1.5rem;overflow-y:scroll;max-height:90vh}
Teraz podmień go na poniższy kod:
.productDetails .popup-dialog .main-title{max-width:85%}.productDetails .popup-dialog .primary-action-button{line-height:11px}.productDetails .popup-dialog .form-container{width:95%;padding:2rem 1.2rem;overflow-y:scroll;overflow-x:hidden;max-height:90vh}
Na koniec odnajdź w pliku instrukcje:
@media screen and (max-width: 400px){.choose-attribute-popup .attributes-select,.choose-attribute-popup .attr-values{grid-template-columns:49% 49%}
I zastąp je następującym fragmentem:
@media screen and (max-width: 768px){.choose-attribute-popup .attributes-select,.choose-attribute-popup .attr-values{grid-template-columns:33% 33% 33%;column-gap:0}.choose-attribute-popup .button-option-variants{padding:0 4px;word-break:break-word}.close-button{right:8px !important}.attr-popup-button{width:calc(100% - 34px) !important}.button-option-variants-content{padding:8px 0}}

Logowanie do sklepu za pomocą konta Google i Facebook - implementacja w szablonie Szafir

Wstęp

Z tego artykułu dowiesz się jak zaimplementować opcję logowania do Twojego sklepu w szablonie Szafir za pomocą kont Google oraz Facebook. Od wersji 2022.4 w szablonie Szafir wprowadziliśmy możliwość logowania do sklepu za pomocą konta Google oraz Facebook. W celu zaimplementowania takiej możliwości w swoim sklepie należy wykonać trzy czynności dla każdej z tych platform :
  1. Konfiguracja logowania w Panelu Administracyjnym
  2. Zmiany w kodzie źródłowym sklepu
  3. Przygotowanie tekstów
Wskazówka
W tym artykule dowiesz się jak wprowadzać zmiany w plikach js, html i scss. Dodatkowe informacje o kompilacji i minifikacji znajdziesz w centrum pomocy.
Poniżej znajdują się instrukcje rozwijające wspomniane wyżej wątki.

1. Konfiguracja logowania w Panelu Administracyjnym

Informacje odnośnie tego etapu implementacji znajdują się w artykule o logowaniu do sklepu za pomocą konta Google i Facebook.

2. Zmiany w kodzie źródłowym sklepu

Poniżej znajdują się fragmenty kodu, które należy dodać w celu utworzenia nowych opcji logowania.

Pliki html

  • W pliku _layout.html wyszukaj frazę crossorigin="anonymous" dokładnie pod linijką z tym elementem wklej ten kod:

  • W pliku sign-in.html wyszukaj frazę loader-js. Fraza powinna wystąpić raz. Pod tą linijką w miejscu pomiędzy tymi dwoma elementami:
    
{% endif -%} Wstaw poniższy fragment kodu:
{% if config.External.Facebook or config.External.Google  -%}
    
{% if usr.Authenticated == 'false' and config.External.Facebook and config.External.Facebook.AppID %}
{{translations.LoginWithFb}}
{% endif -%} {% if usr.Authenticated == 'false' and config.External.Google and config.External.Google.ClientID -%}
{% endif -%}
{% endif -%}
  • W pliku customer-profile/your-account/your-account.html na samym końcu w przedostatniej linijce dodaj fragment :

{{ translations.ExternalWebsites }}

{% if config.External.Facebook or config.External.Google -%}
{% if customer-profile.LinkedAccounts[0] -%} {% assign fbConnect = 0 -%} {% assign googleConnect = 0 -%} {% for account in customer-profile.LinkedAccounts -%} {% if account.Service == 'Facebook' and config.External.Facebook and config.External.Facebook.AppID != '' %}
{{translations.Disconnect_Fb}}
{% assign fbConnect = 1 -%} {% elsif account.Service == 'Google' and config.External.Google and config.External.Google.ClientID != '' %}
{{translations.Disconnect_Google}}
{% assign googleConnect = 1 -%} {% endif %} {% endfor %} {% if fbConnect == 0 and config.External.Facebook and config.External.Facebook.AppID != '' %}
{{translations.ConnectFb}}
{% endif %} {% if googleConnect == 0 and config.External.Google and config.External.Google.ClientID != '' %}
{{translations.ConnectGoogle}}
{% endif %} {% else %} {% if config.External.Facebook and config.External.Facebook.AppID != '' %}
{{translations.ConnectFb}}
{% endif %} {% if config.External.Google and config.External.Google.ClientID != '' %}
{{translations.ConnectGoogle}}
{% endif %} {% endif %}
{% endif -%}

Pliki JavaScript

W katalogu js stwórz dwa pliki JavaScript nazwij je kolejno google-login.js oraz fb-login.js. Następnie wklej do nich poniższe kody:
  • Plik google-login.js :
function handleCredentialResponse(response) {
  setTimeout(function() {
    $.post(null,{ __action: 'External/GoogleLogin', __csrf: __CSRF, id_token: response.credential },function(result){
      if (result.action.Result) {
          window.location.replace('');
      } else if (result.action.Code === 108) {
          const popup = '
' + __translations.CantLoginWithGoogle + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } else { const popup = '
' + __translations.CantLoginWithGoogle + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); }, 1000); } window.onload = function () { google.accounts.id.initialize({client_id: __googleID, callback: handleCredentialResponse}) google.accounts.id.renderButton( document.getElementById("google-signin"), { theme: "outline", size: "large", width: "250", logo_alignment: "center", text: "signin_with", wight: "100"} ); $('body').on('click', '#linkGoogleAccount', function(){ setTimeout(function() { $.post(null,{ __action: 'External/GoogleAccountLink', __csrf: __CSRF, userID: __googleID },function(result){ if (result.action.Result) { location.reload(); } else { const popup = '
' + __translations.FailedConnectToGoogle + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); }, 1000); }); $('body').on('click', '#unlinkGoogleAccount', function(){ $.post(null,{ __action: 'External/GoogleAccountUnlink', __csrf: __CSRF },function(result){ if (result.action.Result) { location.reload(); } else { const popup = '
' + __translations.FailedDisconnectFromGoogle + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); }); $('body').on('click', '.logout', function () { googleLogout(); }); } function googleLogout() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut(); }

  • Plik fb-login.js :

var fbLoginStatus;

// This is called with the results from from FB.getLoginStatus().
function statusChangeCallback(response) {
    fbLoginStatus = response;
}

function _login() {
    FB.login(function (response) {
        // handle the response
        if (response.status === 'connected') {
            connectToFb(response);
        }
    }, { scope: 'public_profile,email' });
}

window.fbAsyncInit = function () {
    FB.init({
        appId: __fbId, //Your APP ID
        cookie: true,  // enable cookies to allow the server to access the session
        xfbml: true,  // parse social plugins on this page
        version: 'v2.1', // use version 2.1
        status: true
    });

    // These three cases are handled in the callback function.
    FB.getLoginStatus(function (response) {
        statusChangeCallback(response);
    });

    FB.Event.subscribe('auth.authResponseChange', function (response) {
        fbLoginStatus = response;
    });

    $('body').on('click', '.logout', function () {
        fbLogout();
    });

    $('body').on('click', '#disconnect-fb', function () {
        disconnectFb();
    });

    $('body').on('click', '#connect-fb', function (e) {
        connectFb(e);
    });
};

// Load the SDK asynchronously
(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "https://connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
} (document, 'script', 'facebook-jssdk'));

function connectToFb(response) {
    FB.api('/me', {
        fields: 'email,name'
    }, function (u) {
        response.user = u;
        $.post(null, {
            __CSRF: __CSRF,
            __action: 'external/fblogin',
            response: JSON.stringify(response)
        }, function (result) {
            if (result.action.Result) {
                window.location.replace('');
            } else if (result.action.Code != 100) {
                const popup = '
' + __translations.CantLoginWithFb + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); }); } function fbLogout() { FB.logout(function (response) { }); } function disconnectFb() { var data = { __csrf: __CSRF, __action: 'External/FbAccountUnlink' }; $.post(null, data, function (result) { if (result.action.Result) { location.reload(); } else { const popup = '
' + __translations.FailedDisconnectFromFb + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); } function connectFb(e) { if (fbLoginStatus.status === 'connected') { var userIdNum = fbLoginStatus.authResponse.userID; var data = { __csrf: __CSRF, __action: 'External/FbAccountLink', userID: userIdNum }; $.post(null, data, function (result) { if (result.action.Result) { location.reload(); } else { const popup = '
' + __translations.FailedConnectToFb + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }); } else { const popup = '
' + __translations.NeedToConnectToFb + '
'; document.body.innerHTML += popup; setTimeout(function () { $('.unsuccessfull-post-message-js').remove(); }, 3000); } }

Pliki scss

  • W pliku scss/globals/_globals-m.scss na samym końcu dodaj poniższy fragment kodu:
@media only screen and (max-width: 1279px){
  .connectSocialsAccount-ui{
    width: 100%; 
    .CustomerContentSection-ui{
      .CustomerSocialButton-ui{
        width: 100%;
        min-width: auto;
      }
    }
  }
}
  • W pliku scss/globals/_globals1.scss znajdź fragment :
  }
  &-button-drop-ui span{
    margin-left: 13px;
  }
Dokładnie nad tym fragmentem wstaw poniższy kod:
    .loginForm-ui{
      width:100%; 
      font-size: 16px; 
      margin-bottom: 20px;
      .login-form__socialButtons__title-ui{
        display:inline-block;
        width: 100%;
        text-align: center;
      }
      .socialLoginButtons-ui{
        display: flex;
        width: 100%;
        align-content: center;
        flex-wrap: wrap;
        flex-direction: column;
        .FbLoginForm-ui {
          display: flex;
          background: #FFFFFF;
          color: #3c4043;
          width: 250px;
          height: 40px;
          border: 1px solid #dadce0;
          border-radius: 4px;
          justify-content: center;
          align-items: center;
          margin-top: 18px;
          cursor: pointer;
          .FbLoginIcon-ui {
            background: #FFFFFF;
            display: inline-block;
            vertical-align: middle;
            width: 21px;
            height: 21px;
          }
          .FbButtonText-ui {
            display: inline-block;
            vertical-align: middle;
            padding-left: 10px;
            font-size: 14px;
            font-family: 'Roboto', sans-serif;
            font-weight: 500;
          }
        }
        .FbLoginForm-ui:hover{
          background-color: #f9faff;
          border: 1px solid #dbe1ee;
          transition: 0,5s;
        }

        .GLoginForm-ui {
          display: flex;
          justify-content: center;
          align-items: center;
          margin-top: 18px;
        }
      }
    }
  • Następnie dalej w tym samym pliku (scss/globals/_globals1.scss) na samym końcu dodaj poniższy fragment kodu:
.connectSocialsAccount-ui{
  width: 93%; 
  margin: auto;
  margin-bottom:50px;
  .CustomerContentSection-ui{
    margin-top: 50px;
    display: flex;
    flex-direction: column;
    .CustomerSocialButton-ui{
      display: inline-flex !important;
      box-shadow: 0px 1px 1px 1px lightgray;
      justify-content: center;
      align-items: center;
      width: calc(33% - 11px);
      min-width: 420px;
      height: auto;
      color: #232323;
      font-size: 14px;
      text-transform: uppercase;
      font-weight: 400;
      display: block;
      margin-bottom: 20px;
      padding: 17px;
      text-align: center;
      cursor: pointer;
      letter-spacing: 1px;
    }
    .CustomerSocialButtonGoogle-ui {
      background-color: #FFFFFF;
    }
    .CustomerSocialButtonFacebook-ui {
      background-color: #FFFFFF;
    }
    .CustomerSocialButton-ui:hover{
      box-shadow:0 0 4px #4285F4;
      transition: 1s;
    }
    .GFbLinkIcon-ui{
      margin-right: 10px;
      width: 32px;
      height: 32px;
    }
  }
}
Wskazówka
Pamiętaj, że pliki scss należy zminifikować. O tym jak skompilować i zminifikować pliki scss i js dowiesz się z artykułu o kompilacji i minifikacji.

3. Przygotowanie tekstów

Ostatnim etapem implementacji będzie dodanie odpowiednich tekstów do swojego szablonu. Odbywa się to poprzez opcję Tłumaczenia , która znajduje się w Panelu administracyjnym sklepu. Dokładna jej lokalizacja ukazana jest poniżej. W celu dodania tekstu klikamy przycisk dodaj. Dodajemy teksty według poniższej tabeli.
Id Tekst
ExternalWebsites Serwisy zewnętrzne
NeedToConnectToFb Musisz być zalogowany do Facebooka, aby połączyć konto.
CantLoginWithFb Błąd podczas logowania do Facebooka.
FailedDisconnectFromFb Błąd podczas odłączania konta Facebook.
FailedConnectToFb Błąd podczas łączenia z kontem Facebook.
LoginWithFb Zaloguj się przez Facebook
Disconnect_Fb Odłącz konto od Facebooka
ConnectFb Połącz konto z Facebookiem
CantLoginWithGoogle Nie udało się zalogować, spróbuj jeszcze raz!
FailedDisconnectFromGoogle Błąd podczas odłączania konta Google.
FailedConnectToGoogle Błąd podczas łączenia z kontem Google.
LoginWithGoogle Zaloguj się przez Google
Disconnect_Google Odłącz konto od Google
ConnectGoogle Połącz konto z Google