const updateHeaderMetrics = () => { const header = document.getElementById('header'); const rect = header.getBoundingClientRect(); const headerHeight = rect.bottom; document.documentElement.style.setProperty('--header-height', `${headerHeight}px`); }; window.addEventListener('DOMContentLoaded', updateHeaderMetrics); window.addEventListener('resize', updateHeaderMetrics); const header = document.getElementById('header'); const resizeObserver = new ResizeObserver(entries => { for (let entry of entries) { const rect = entry.target.getBoundingClientRect(); const headerHeight = rect.bottom; document.documentElement.style.setProperty('--header-height', `${headerHeight}px`); } }); resizeObserver.observe(header);
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
Football King
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
Search
Account
Log in
Create an account
${data.data.count > 99 ? '99+' : data.data.count}
Cart
Home
Top five leagues
Top five leagues
English Football Premier League
English Football Premier League
Arsenal
Manchester City Club
Manchester United
Chelsea
Liverpool
Tottenham
Everton
Newcastle United
Aston Villa
Sunderland
Leeds United
Leicester City
Ipswich Town
West Ham United
Wolverhampton Wanderers
Crystal Palace
Southampton
Nottingham Forest
Brighton
Fulham
Brentford
Bournemouth
Burnley
Spanish Football League
Spanish Football League
Girona Football Club
Barcelona
Real Madrid
Atletico Madrid
Osasuna
Athletic Bilbao
Seville
Real Betis
Real Valladolid
Real Sociedad
Vallecano
Alavés
Cádiz
Valencia FC
Espanyol
Granada
Villarreal
Celta
Almeria
Elche
Las Palmas
Getafe
RCD Mallorca
Leganes
Italian Football Serie A
Italian Football Serie A
AC Milan Club
Inter Milan
Juventus Club
Napoli
Roma
Fiorentina
Torino
Venezia
Atalanta
Lazio
Bologna
Parma
Empoli FC
Hellas Verona F.C
Genoa
Como
Cagliari
Lecce
Udinese
Monza
German Football Bundesliga
German Football Bundesliga
Bayern
Borussia Dortmund Club
Leipzig
Mönchengladbach
Frankfurt
Hamburger SV
Leverkusen
VfB Stuttgart
FC Köln
Heidenheim Club
VfL Wolfsburg
Werder Bremen
St. Pauli
Hoffenheim
FC Union Berlin
Holstein Kiel
Mainz 05
Freiburg
Augsburg
VfL Bochum
Union Berlin
French Football League 1
French Football League 1
Paris Saint-Germain
Marseille
Nantes
Monaco
RC Lens
Lille
Le Havre
OGC Nice
Strasbourg
Reims
Rennais
Brest
Auxerre FC
Lyon
Toulouse
Montpellier
Angers
Saint-Etienne
Metz
Other Leagues
Other Leagues
English Football Champions League
English Football Champions League
Sheffield Wednesday
Blackburn
West Brom
Sheffield United
Birmingham City
Oxford United
Watford
Middlesbrough
Stoke City
Portsmouth
Leeds United
Bristol City FC
Hull City
Millwall
Coventry City
Swansea City
Derby County
Norwich City
Preston North End
Cardiff City
Luton Town
Plymouth
QPR FC
Southampton
Ipswich Town
Portugal Football Super League
Portugal Football Super League
Benfica
Porto
Sporting Lisbon
Guild
FC Famalicao
Braga
Vitória de Guimarães
Estoril Praia
Mexican Football Primera Division
Mexican Football Primera Division
Cruz Azul
Club de Futbol América
Atlas FC
Tijuana
Tigres
Monterrey
Chivas
Pumas UNAM
Turkish Football Super League
Turkish Football Super League
Fenerbahce Sports Club
Galatasaray
Besiktas
Brazilian Football League A
Brazilian Football League A
Santos
Botafogo
Palmeiras
Fortaleza Football Club
Flamenco
São Paulo FC
Esporte Clube Bahia
Brazil International
Cruzeiro
Da Gama
Atletico Mineiro
Bragantino FC
sporte Clube Juventude
Gremio
Criciúma Esporte FC
Atletico Parana
Vitória
Corinthians
Fluminense
Cuiaba
Atletico Goianiense
Brazilian Football League B
Brazilian Football League B
Novorizontino
Sporting Recife
Villanova Football Club
Mirasol F.C.
Club Atlético Ceara
Club America Mineiro
Curitiba Foot Ball Club
Avai Football Club
Ponta Grossa Railway Workers Sports Club
Amazon Football Club
Atlético de Goias
Chapecoense Football Club
Paysandú Sports FC
Bondi Bida
Botafogo Sao Paulo Football Club
Clube de Regattas Brassil
Bruschi Football Club
Ituano Football Club
Guarani Football Club
Irish Premier League
Irish Premier League
Bohemian F.C.
English Football League 1
English Football League 1
Wrexham Football Club
Stockport County
Barnsley
Charlton Athletic
Lincoln City
Huddersfield Town FC
Reading F.C.
Bristol Rovers F.C.
Exeter City F.C.
Peterborough United F.C.
Crawley Town
Northampton Town F.C.
Mansfield Town F.C.
Rotherham United F.C.
Wycombe Wanderers F.C.
Stevenage F.C.
Bolton
Burton Albion
Wigan Athletic F.C.
Shrewsbury F.C.
Blackpool F.C.
Cambridge United F.C.
Leyton Orient F.C.
Scottish Football Premier League
Scottish Football Premier League
Rangers
Aberdeen
Celtic
Hearts FC
Spanish Football League B
Spanish Football League B
Tenerife
Málaga
Deportivo La Coruna
Real Zaragoza
Sporting de Gijón
Huesca
Real Oviedo
Albacete FC
Cordoba
Racing Santander
Castellon FC
Cádiz
German Football League B
German Football League B
Düsseldorf
SpVgg Greuther Fürth
FC Köln
Hertha BSC
Karlsruhe
Schalke 04
Magdeburg
Kaiserslautern FC
Darmstadt FC
Paderborn 07 FC
SV Elversberg FC
Hannover 96 FC
Nürnberg FC
SC Preußen Münster FC
Eintracht Braunschweig FC
SSV Ulm FC
Regensburg FC
Bielefeld
Dutch Football League A
Dutch Football League A
PSV Eindhoven
Utrecht
AZ Alkmaar FC
Twente
Ajax
Feyenoord
Sparta Rotterdam FC
Go Ahead Eagles
Groningen
Heracles Almelo
Willem II
Nijmegen
Zwolle
Fortuna Sittard FC
Heerenveen
NAC Breda
Almere City
Waalwijk
Dutch second division football league
Dutch second division football league
SBV Elite
Dunbosh Football Club
Helmond Sport
De Graafschap
FC Eindhoven
SC Telstar
PSV Eindhoven Youth Team
Emmen
AZ Youth Team
Volendam
Roda JC
Ajax Youth Team
Dordrecht
The Hague
VVV-Venlo
TOP Oss
Cambuur
Maastricht
Vitesse
Utrecht Youth Team
Swiss Football Super League
Swiss Football Super League
Servette FC
Basel FC
Other leagues
Other leagues
Al-Nassr
Al Hilal SFC
AFC Richmond
America
Inter Miami
Queen's Parade
Club Atlético Boca Juniors
Palermo
Royal Antwerp FC
Rapid Wien FC
Austria Wien
Johor FC
Al-Ittihad FC
Spezia Calcio
Club Deportivo Palestino
SSC Bari
U.C. Sampdoria
Real Huelva
Al Ahly SC
Blooming Arena
Atletico Bucaramanga
Salernitana
FC Metz
Atlético Peñarol
Colo Colo
LA Galaxy
Universidad de Chile
JS Kabylie
Mamelodi Sundowns
O'Higgins F.C.
Philadelphia Union
Atlético Tucuman
Legia Warszawa
Frosinone
Copenhagen
Hajduk Split HNK
Harlacher
Zenit
FC Steaua Bucureşti
Saiyans FC
Kaizer Chiefs FC
San Lorenzo FC
Avellaneda FC
Versailles FC
Kashima Antlers FC
Bordeaux FC
Millionaires FC
Cerro Porteño FC
Tokyo Verdy FC
Motagua FC
Toluca FC
Bohemians FC
Los Angeles FC
Porcinos FC
Barranquilla Youth FC
Atlético Nacional FC
Tolima FC
Ulsan HD FC
Atlanta United FC
Almirante Brown
Standard Liege FC
Sanfrecce Hiroshima FC
Urawa Red Diamonds FC
Sagan Tosu FC
Orlando City FC
Austin FC
Portland Timbers FC
Dallas FC
Toronto FC
Columbus Crew FC
D.C. United FC
Real Salt Lake FC
Peluche Caligari FC
Sporting Kansas City FC
Colorado Rapids FC
Montreal FC
Minnesota United FC
Nashville FC
New York City FC
New York Red Bulls FC
Emelec FC
Olimpia FC
Atlético Independiente FC
AIK
San Diego FC
San Jose Earthquakes FC
St. Louis City FC
Vancouver Whitecaps FC
Seattle Sounders FC
Charlotte FC
Cincinnati FC
New England Revolution FC
Houston Dynamo FC
Chicago Fire FC
Puebla FC
Catholic University FC
Audax Italiano FC
IFK Norrköping FC
Bay FC
Montevideo City Torque FC
Cavalry FC
Santa Fe FC
Shelbourne FC
Indy Eleven FC
River Plate
Incheon United FC
Al Ain FC
Halmstad FC
Libertad FC
Monterey Bay FC
Vissel Kobe FC
Hapoel Be'er Sheva FC
Maccabi Tel Aviv FC
Beitar Jerusalem FC
Yokohama F. Marinos FC
Atlético Tigre FC
Estudiantes de La Plata FC
Orlando Pride FC
North Carolina Courage FC
Portland Thorns FC
Washington Spirit FC
Kansas City Current FC
Racing Louisville FC
NJ/NY Gotham FC
San Diego Wave FC
Angel City FC
Seattle Reign FC
Houston Dash FC
Utah Royals FC
Chicago Stars FC
Santa Cruz FC
Universitaria de Quito FC
St Patrick's Athletic FC
Olympiacos
Atlético Vélez Sársfield FC
Atlético Huracán FC
Figueirense FC
Sporting Cristal FC
Cerezo Osaka FC
Atlético Lanús FC
Alianza Lima FC
Rosario Central FC
Gamba Osaka FC
Newell's Old Boys FC
Argentinos Juniors FC
Cork City FC
Boreale
Hokkaido Consadole Sapporo FC
Bielefeld
Hansa Rostock
Kyoto Sanga FC
Nacional FC
Rio Branco Atlético FC
Seoul FC
Adidas
Avispa Fukuoka FC
Barcelona SC
Hércules FC
Malmö FC
Atlético Juventus FC
Kashiwa Reysol FC
Cesena FC
VfL Osnabrück FC
Paris FC
Olimpo United FC
Persas FC
Real Titán FC
Galácticos del Caribe FC
Raniza FC
Los Aliens FC
Los Chamos FC
Atlético Parceros FC
Muchachos FC
Club de Cuervos FC
West Santos FC
Carl Zeiss Jena FC
Dinamo Tbilisi FC
Ayr United FC
Lorient FC
Shimizu S-Pulse FC
Panathinaikos FC
MC Alger FC
Associação Portuguesa de Desportos FC
Red Bull Salzburg
Bradford City FC
Port Vale FC
CD Olimpia FC
Ceuta FC
Season
Season
2025-2026 Season
2024-2025 Season
2023-2024 Season
UEFA Champions League
UEFA Champions League
AC Milan Club
Arsenal
Aston Villa
Atalanta
Atletico Madrid
Barcelona
Leverkusen
Bayern
Benfica
Bologna
Borussia Dortmund Club
Brest
Celtic
Club Brugge K.V
Dinamo Zagreb
Feyenoord
Girona Football Club
Inter Milan
Juventus
Lille
Liverpool
Manchester City Club
Monaco
Paris Saint-Germain
Eindhoven
Leipzig
Real Madrid
Red Star Belgrade
FC Red Bull Salzburg
Shakhtar Donetsk
Slovan
Sparta Prague
Sporting Lisbon
SK Sturm Graz
VfB Stuttgart
BSC Young Boys
Slavia Praha
European Cup
European Cup
UEFA Euro 2024
UEFA Euro 2024
Germany
Scotland
Spain
Italy
France
England
Portugal
Hungary
Switzerland
Croatia
Albania
Slovenia
Denmark
Serbia
Wales
Netherlands
Austria
Belgium
Slovakia
Romania
Türkiye
Czech Republic
Poland
Norway
America's Cup
America's Cup
Copa America 2024
Copa America 2024
Canada
Colombia
Peru
Chile
Venezuela
Mexico
deer
Brazil
Argentina
Bolivia
National Team
National Team
Europe
Europe
Germany
France
Portugal
Belgium
Denmark
England
Spain
Russia
Turkey
Switzerland
Italy
Netherlands
Albania
Croatia
Finland
Norway
Norway
Sweden
Ireland
Poland
Ukraine
Greece
Czech Republic
Wales
Northern Ireland
Iceland
Hungary
Scotland
Türkiye
Bosnia and Herzegovina
Serbia
Austria
Georgia
Romania
Armenia
Yugoslavia
Noth America
Noth America
Mexico
Canada
El Salvador
Panama
Costa Rica
Jamaica
Honduras
Guatemala
USA
Greenland
South America
South America
Argentina
Uruguay
Brazil
Paraguay
Colombia
Ecuador
Chile
Peru
Venezuela
Bolivia
Asia
Asia
Korea
Japan
Saudi Arabia
Malaysia
Iraq
Qatar
Iran
Australia
Philippines
Oman
Palestine
Indonesia
China
Africa
Africa
Senegal
Tunisia
Algeria
Ivory Coast
Cameroon
Morocco
Ghana
Egypt
Nigeria
Mali
Congo
2026 World Cup jersey
Previous World Cup Champions
Previous World Cup Champions
2022 - Argentina
2018 - France
2014 - Germany
2010 - Spain
2006 - Italy
2002 - Brazil
1990 - Germany
1986 - Argentina
1970 - Brazil
other products
other products
Retro
Kids
Long Sleeve
Windbreaker
Shorts
Jacket
Football
Special line logistics
sock
Log in
Create an account
Home
Top five leagues
English Football Premier League
Arsenal
Manchester City Club
Manchester United
Chelsea
Liverpool
Tottenham
Everton
Newcastle United
Aston Villa
Sunderland
Leeds United
Leicester City
Ipswich Town
West Ham United
Wolverhampton Wanderers
Crystal Palace
Southampton
Nottingham Forest
Brighton
Fulham
Brentford
Bournemouth
Burnley
Spanish Football League
Girona Football Club
Barcelona
Real Madrid
Atletico Madrid
Osasuna
Athletic Bilbao
Seville
Real Betis
Real Valladolid
Real Sociedad
Vallecano
Alavés
Cádiz
Valencia FC
Espanyol
Granada
Villarreal
Celta
Almeria
Elche
Las Palmas
Getafe
RCD Mallorca
Leganes
Italian Football Serie A
AC Milan Club
Inter Milan
Juventus Club
Napoli
Roma
Fiorentina
Torino
Venezia
Atalanta
Lazio
Bologna
Parma
Empoli FC
Hellas Verona F.C
Genoa
Como
Cagliari
Lecce
Udinese
Monza
German Football Bundesliga
Bayern
Borussia Dortmund Club
Leipzig
Mönchengladbach
Frankfurt
Hamburger SV
Leverkusen
VfB Stuttgart
FC Köln
Heidenheim Club
VfL Wolfsburg
Werder Bremen
St. Pauli
Hoffenheim
FC Union Berlin
Holstein Kiel
Mainz 05
Freiburg
Augsburg
VfL Bochum
Union Berlin
French Football League 1
Paris Saint-Germain
Marseille
Nantes
Monaco
RC Lens
Lille
Le Havre
OGC Nice
Strasbourg
Reims
Rennais
Brest
Auxerre FC
Lyon
Toulouse
Montpellier
Angers
Saint-Etienne
Metz
Other Leagues
English Football Champions League
Sheffield Wednesday
Blackburn
West Brom
Sheffield United
Birmingham City
Oxford United
Watford
Middlesbrough
Stoke City
Portsmouth
Leeds United
Bristol City FC
Hull City
Millwall
Coventry City
Swansea City
Derby County
Norwich City
Preston North End
Cardiff City
Luton Town
Plymouth
QPR FC
Southampton
Ipswich Town
Portugal Football Super League
Benfica
Porto
Sporting Lisbon
Guild
FC Famalicao
Braga
Vitória de Guimarães
Estoril Praia
Mexican Football Primera Division
Cruz Azul
Club de Futbol América
Atlas FC
Tijuana
Tigres
Monterrey
Chivas
Pumas UNAM
Turkish Football Super League
Fenerbahce Sports Club
Galatasaray
Besiktas
Brazilian Football League A
Santos
Botafogo
Palmeiras
Fortaleza Football Club
Flamenco
São Paulo FC
Esporte Clube Bahia
Brazil International
Cruzeiro
Da Gama
Atletico Mineiro
Bragantino FC
sporte Clube Juventude
Gremio
Criciúma Esporte FC
Atletico Parana
Vitória
Corinthians
Fluminense
Cuiaba
Atletico Goianiense
Brazilian Football League B
Novorizontino
Sporting Recife
Villanova Football Club
Mirasol F.C.
Club Atlético Ceara
Club America Mineiro
Curitiba Foot Ball Club
Avai Football Club
Ponta Grossa Railway Workers Sports Club
Amazon Football Club
Atlético de Goias
Chapecoense Football Club
Paysandú Sports FC
Bondi Bida
Botafogo Sao Paulo Football Club
Clube de Regattas Brassil
Bruschi Football Club
Ituano Football Club
Guarani Football Club
Irish Premier League
Bohemian F.C.
English Football League 1
Wrexham Football Club
Stockport County
Barnsley
Charlton Athletic
Lincoln City
Huddersfield Town FC
Reading F.C.
Bristol Rovers F.C.
Exeter City F.C.
Peterborough United F.C.
Crawley Town
Northampton Town F.C.
Mansfield Town F.C.
Rotherham United F.C.
Wycombe Wanderers F.C.
Stevenage F.C.
Bolton
Burton Albion
Wigan Athletic F.C.
Shrewsbury F.C.
Blackpool F.C.
Cambridge United F.C.
Leyton Orient F.C.
Scottish Football Premier League
Rangers
Aberdeen
Celtic
Hearts FC
Spanish Football League B
Tenerife
Málaga
Deportivo La Coruna
Real Zaragoza
Sporting de Gijón
Huesca
Real Oviedo
Albacete FC
Cordoba
Racing Santander
Castellon FC
Cádiz
German Football League B
Düsseldorf
SpVgg Greuther Fürth
FC Köln
Hertha BSC
Karlsruhe
Schalke 04
Magdeburg
Kaiserslautern FC
Darmstadt FC
Paderborn 07 FC
SV Elversberg FC
Hannover 96 FC
Nürnberg FC
SC Preußen Münster FC
Eintracht Braunschweig FC
SSV Ulm FC
Regensburg FC
Bielefeld
Dutch Football League A
PSV Eindhoven
Utrecht
AZ Alkmaar FC
Twente
Ajax
Feyenoord
Sparta Rotterdam FC
Go Ahead Eagles
Groningen
Heracles Almelo
Willem II
Nijmegen
Zwolle
Fortuna Sittard FC
Heerenveen
NAC Breda
Almere City
Waalwijk
Dutch second division football league
SBV Elite
Dunbosh Football Club
Helmond Sport
De Graafschap
FC Eindhoven
SC Telstar
PSV Eindhoven Youth Team
Emmen
AZ Youth Team
Volendam
Roda JC
Ajax Youth Team
Dordrecht
The Hague
VVV-Venlo
TOP Oss
Cambuur
Maastricht
Vitesse
Utrecht Youth Team
Swiss Football Super League
Servette FC
Basel FC
Other leagues
Al-Nassr
Al Hilal SFC
AFC Richmond
America
Inter Miami
Queen's Parade
Club Atlético Boca Juniors
Palermo
Royal Antwerp FC
Rapid Wien FC
Austria Wien
Johor FC
Al-Ittihad FC
Spezia Calcio
Club Deportivo Palestino
SSC Bari
U.C. Sampdoria
Real Huelva
Al Ahly SC
Blooming Arena
Atletico Bucaramanga
Salernitana
FC Metz
Atlético Peñarol
Colo Colo
LA Galaxy
Universidad de Chile
JS Kabylie
Mamelodi Sundowns
O'Higgins F.C.
Philadelphia Union
Atlético Tucuman
Legia Warszawa
Frosinone
Copenhagen
Hajduk Split HNK
Harlacher
Zenit
FC Steaua Bucureşti
Saiyans FC
Kaizer Chiefs FC
San Lorenzo FC
Avellaneda FC
Versailles FC
Kashima Antlers FC
Bordeaux FC
Millionaires FC
Cerro Porteño FC
Tokyo Verdy FC
Motagua FC
Toluca FC
Bohemians FC
Los Angeles FC
Porcinos FC
Barranquilla Youth FC
Atlético Nacional FC
Tolima FC
Ulsan HD FC
Atlanta United FC
Almirante Brown
Standard Liege FC
Sanfrecce Hiroshima FC
Urawa Red Diamonds FC
Sagan Tosu FC
Orlando City FC
Austin FC
Portland Timbers FC
Dallas FC
Toronto FC
Columbus Crew FC
D.C. United FC
Real Salt Lake FC
Peluche Caligari FC
Sporting Kansas City FC
Colorado Rapids FC
Montreal FC
Minnesota United FC
Nashville FC
New York City FC
New York Red Bulls FC
Emelec FC
Olimpia FC
Atlético Independiente FC
AIK
San Diego FC
San Jose Earthquakes FC
St. Louis City FC
Vancouver Whitecaps FC
Seattle Sounders FC
Charlotte FC
Cincinnati FC
New England Revolution FC
Houston Dynamo FC
Chicago Fire FC
Puebla FC
Catholic University FC
Audax Italiano FC
IFK Norrköping FC
Bay FC
Montevideo City Torque FC
Cavalry FC
Santa Fe FC
Shelbourne FC
Indy Eleven FC
River Plate
Incheon United FC
Al Ain FC
Halmstad FC
Libertad FC
Monterey Bay FC
Vissel Kobe FC
Hapoel Be'er Sheva FC
Maccabi Tel Aviv FC
Beitar Jerusalem FC
Yokohama F. Marinos FC
Atlético Tigre FC
Estudiantes de La Plata FC
Orlando Pride FC
North Carolina Courage FC
Portland Thorns FC
Washington Spirit FC
Kansas City Current FC
Racing Louisville FC
NJ/NY Gotham FC
San Diego Wave FC
Angel City FC
Seattle Reign FC
Houston Dash FC
Utah Royals FC
Chicago Stars FC
Santa Cruz FC
Universitaria de Quito FC
St Patrick's Athletic FC
Olympiacos
Atlético Vélez Sársfield FC
Atlético Huracán FC
Figueirense FC
Sporting Cristal FC
Cerezo Osaka FC
Atlético Lanús FC
Alianza Lima FC
Rosario Central FC
Gamba Osaka FC
Newell's Old Boys FC
Argentinos Juniors FC
Cork City FC
Boreale
Hokkaido Consadole Sapporo FC
Bielefeld
Hansa Rostock
Kyoto Sanga FC
Nacional FC
Rio Branco Atlético FC
Seoul FC
Adidas
Avispa Fukuoka FC
Barcelona SC
Hércules FC
Malmö FC
Atlético Juventus FC
Kashiwa Reysol FC
Cesena FC
VfL Osnabrück FC
Paris FC
Olimpo United FC
Persas FC
Real Titán FC
Galácticos del Caribe FC
Raniza FC
Los Aliens FC
Los Chamos FC
Atlético Parceros FC
Muchachos FC
Club de Cuervos FC
West Santos FC
Carl Zeiss Jena FC
Dinamo Tbilisi FC
Ayr United FC
Lorient FC
Shimizu S-Pulse FC
Panathinaikos FC
MC Alger FC
Associação Portuguesa de Desportos FC
Red Bull Salzburg
Bradford City FC
Port Vale FC
CD Olimpia FC
Ceuta FC
Season
2025-2026 Season
2024-2025 Season
2023-2024 Season
UEFA Champions League
AC Milan Club
Arsenal
Aston Villa
Atalanta
Atletico Madrid
Barcelona
Leverkusen
Bayern
Benfica
Bologna
Borussia Dortmund Club
Brest
Celtic
Club Brugge K.V
Dinamo Zagreb
Feyenoord
Girona Football Club
Inter Milan
Juventus
Lille
Liverpool
Manchester City Club
Monaco
Paris Saint-Germain
Eindhoven
Leipzig
Real Madrid
Red Star Belgrade
FC Red Bull Salzburg
Shakhtar Donetsk
Slovan
Sparta Prague
Sporting Lisbon
SK Sturm Graz
VfB Stuttgart
BSC Young Boys
Slavia Praha
European Cup
UEFA Euro 2024
Germany
Scotland
Spain
Italy
France
England
Portugal
Hungary
Switzerland
Croatia
Albania
Slovenia
Denmark
Serbia
Wales
Netherlands
Austria
Belgium
Slovakia
Romania
Türkiye
Czech Republic
Poland
Norway
America's Cup
Copa America 2024
Canada
Colombia
Peru
Chile
Venezuela
Mexico
deer
Brazil
Argentina
Bolivia
National Team
Europe
Germany
France
Portugal
Belgium
Denmark
England
Spain
Russia
Turkey
Switzerland
Italy
Netherlands
Albania
Croatia
Finland
Norway
Norway
Sweden
Ireland
Poland
Ukraine
Greece
Czech Republic
Wales
Northern Ireland
Iceland
Hungary
Scotland
Türkiye
Bosnia and Herzegovina
Serbia
Austria
Georgia
Romania
Armenia
Yugoslavia
Noth America
Mexico
Canada
El Salvador
Panama
Costa Rica
Jamaica
Honduras
Guatemala
USA
Greenland
South America
Argentina
Uruguay
Brazil
Paraguay
Colombia
Ecuador
Chile
Peru
Venezuela
Bolivia
Asia
Korea
Japan
Saudi Arabia
Malaysia
Iraq
Qatar
Iran
Australia
Philippines
Oman
Palestine
Indonesia
China
Africa
Senegal
Tunisia
Algeria
Ivory Coast
Cameroon
Morocco
Ghana
Egypt
Nigeria
Mali
Congo
2026 World Cup jersey
Previous World Cup Champions
2022 - Argentina
2018 - France
2014 - Germany
2010 - Spain
2006 - Italy
2002 - Brazil
1990 - Germany
1986 - Argentina
1970 - Brazil
other products
Retro
Kids
Long Sleeve
Windbreaker
Shorts
Jacket
Football
Special line logistics
sock
More links
${function (){ var linkList =[false,true,true,true,true,true,true,true,false,true,true].slice(offset); var hasChild = linkList.some(v => v); var scriptStr = `
var parentId = "#header-more-link-container"; var contentId = "#header-more-link-container-content"; var container = SPZCore.Dom.scopedQuerySelector(document.body, parentId ); var containerContent = SPZCore.Dom.scopedQuerySelector(document.body, parentId+" "+contentId); var offset = +containerContent.getAttribute("offset"); var linkList = [false,true,true,true,true,true,true,true,false,true,true].slice(offset); var hasChild = linkList.some(v => v); if(hasChild){ container.classList.remove("more-link-simple-container"); container.classList.add("more-link-multi-container"); }else{ container.classList.add("more-link-simple-container"); container.classList.remove("more-link-multi-container"); }
` function renderContent( currentIdx ,content ){ if( offset+1 > currentIdx ){ return "" } return content } if(!hasChild){ return `
${renderContent( 1, `
Home
` )} ${renderContent( 2, `
Top five leagues
` )} ${renderContent( 3, `
Other Leagues
` )} ${renderContent( 4, `
Season
` )} ${renderContent( 5, `
UEFA Champions League
` )} ${renderContent( 6, `
European Cup
` )} ${renderContent( 7, `
America's Cup
` )} ${renderContent( 8, `
National Team
` )} ${renderContent( 9, `
2026 World Cup jersey
` )} ${renderContent( 10, `
Previous World Cup Champions
` )} ${renderContent( 11, `
other products
` )} ${scriptStr}
` } return `
${renderContent(1, `
Home
` )} ${renderContent(2, `
Top five leagues
` )} ${renderContent(3, `
Other Leagues
` )} ${renderContent(4, `
Season
` )} ${renderContent(5, `
UEFA Champions League
` )} ${renderContent(6, `
European Cup
` )} ${renderContent(7, `
America's Cup
` )} ${renderContent(8, `
National Team
` )} ${renderContent(9, `
2026 World Cup jersey
` )} ${renderContent(10, `
Previous World Cup Champions
` )} ${renderContent(11, `
other products
` )}
${renderContent(1, `
` )} ${renderContent(2, `
English Football Premier League
Arsenal
Manchester City Club
Manchester United
Chelsea
Liverpool
Tottenham
Everton
Newcastle United
Aston Villa
Sunderland
Leeds United
Leicester City
Ipswich Town
West Ham United
Wolverhampton Wanderers
Crystal Palace
Southampton
Nottingham Forest
Brighton
Fulham
Brentford
Bournemouth
Burnley
Spanish Football League
Girona Football Club
Barcelona
Real Madrid
Atletico Madrid
Osasuna
Athletic Bilbao
Seville
Real Betis
Real Valladolid
Real Sociedad
Vallecano
Alavés
Cádiz
Valencia FC
Espanyol
Granada
Villarreal
Celta
Almeria
Elche
Las Palmas
Getafe
RCD Mallorca
Leganes
Italian Football Serie A
AC Milan Club
Inter Milan
Juventus Club
Napoli
Roma
Fiorentina
Torino
Venezia
Atalanta
Lazio
Bologna
Parma
Empoli FC
Hellas Verona F.C
Genoa
Como
Cagliari
Lecce
Udinese
Monza
German Football Bundesliga
Bayern
Borussia Dortmund Club
Leipzig
Mönchengladbach
Frankfurt
Hamburger SV
Leverkusen
VfB Stuttgart
FC Köln
Heidenheim Club
VfL Wolfsburg
Werder Bremen
St. Pauli
Hoffenheim
FC Union Berlin
Holstein Kiel
Mainz 05
Freiburg
Augsburg
VfL Bochum
Union Berlin
French Football League 1
Paris Saint-Germain
Marseille
Nantes
Monaco
RC Lens
Lille
Le Havre
OGC Nice
Strasbourg
Reims
Rennais
Brest
Auxerre FC
Lyon
Toulouse
Montpellier
Angers
Saint-Etienne
Metz
` )} ${renderContent(3, `
English Football Champions League
Sheffield Wednesday
Blackburn
West Brom
Sheffield United
Birmingham City
Oxford United
Watford
Middlesbrough
Stoke City
Portsmouth
Leeds United
Bristol City FC
Hull City
Millwall
Coventry City
Swansea City
Derby County
Norwich City
Preston North End
Cardiff City
Luton Town
Plymouth
QPR FC
Southampton
Ipswich Town
Portugal Football Super League
Benfica
Porto
Sporting Lisbon
Guild
FC Famalicao
Braga
Vitória de Guimarães
Estoril Praia
Mexican Football Primera Division
Cruz Azul
Club de Futbol América
Atlas FC
Tijuana
Tigres
Monterrey
Chivas
Pumas UNAM
Turkish Football Super League
Fenerbahce Sports Club
Galatasaray
Besiktas
Brazilian Football League A
Santos
Botafogo
Palmeiras
Fortaleza Football Club
Flamenco
São Paulo FC
Esporte Clube Bahia
Brazil International
Cruzeiro
Da Gama
Atletico Mineiro
Bragantino FC
sporte Clube Juventude
Gremio
Criciúma Esporte FC
Atletico Parana
Vitória
Corinthians
Fluminense
Cuiaba
Atletico Goianiense
Brazilian Football League B
Novorizontino
Sporting Recife
Villanova Football Club
Mirasol F.C.
Club Atlético Ceara
Club America Mineiro
Curitiba Foot Ball Club
Avai Football Club
Ponta Grossa Railway Workers Sports Club
Amazon Football Club
Atlético de Goias
Chapecoense Football Club
Paysandú Sports FC
Bondi Bida
Botafogo Sao Paulo Football Club
Clube de Regattas Brassil
Bruschi Football Club
Ituano Football Club
Guarani Football Club
Irish Premier League
Bohemian F.C.
English Football League 1
Wrexham Football Club
Stockport County
Barnsley
Charlton Athletic
Lincoln City
Huddersfield Town FC
Reading F.C.
Bristol Rovers F.C.
Exeter City F.C.
Peterborough United F.C.
Crawley Town
Northampton Town F.C.
Mansfield Town F.C.
Rotherham United F.C.
Wycombe Wanderers F.C.
Stevenage F.C.
Bolton
Burton Albion
Wigan Athletic F.C.
Shrewsbury F.C.
Blackpool F.C.
Cambridge United F.C.
Leyton Orient F.C.
Scottish Football Premier League
Rangers
Aberdeen
Celtic
Hearts FC
Spanish Football League B
Tenerife
Málaga
Deportivo La Coruna
Real Zaragoza
Sporting de Gijón
Huesca
Real Oviedo
Albacete FC
Cordoba
Racing Santander
Castellon FC
Cádiz
German Football League B
Düsseldorf
SpVgg Greuther Fürth
FC Köln
Hertha BSC
Karlsruhe
Schalke 04
Magdeburg
Kaiserslautern FC
Darmstadt FC
Paderborn 07 FC
SV Elversberg FC
Hannover 96 FC
Nürnberg FC
SC Preußen Münster FC
Eintracht Braunschweig FC
SSV Ulm FC
Regensburg FC
Bielefeld
Dutch Football League A
PSV Eindhoven
Utrecht
AZ Alkmaar FC
Twente
Ajax
Feyenoord
Sparta Rotterdam FC
Go Ahead Eagles
Groningen
Heracles Almelo
Willem II
Nijmegen
Zwolle
Fortuna Sittard FC
Heerenveen
NAC Breda
Almere City
Waalwijk
Dutch second division football league
SBV Elite
Dunbosh Football Club
Helmond Sport
De Graafschap
FC Eindhoven
SC Telstar
PSV Eindhoven Youth Team
Emmen
AZ Youth Team
Volendam
Roda JC
Ajax Youth Team
Dordrecht
The Hague
VVV-Venlo
TOP Oss
Cambuur
Maastricht
Vitesse
Utrecht Youth Team
Swiss Football Super League
Servette FC
Basel FC
Other leagues
Al-Nassr
Al Hilal SFC
AFC Richmond
America
Inter Miami
Queen's Parade
Club Atlético Boca Juniors
Palermo
Royal Antwerp FC
Rapid Wien FC
Austria Wien
Johor FC
Al-Ittihad FC
Spezia Calcio
Club Deportivo Palestino
SSC Bari
U.C. Sampdoria
Real Huelva
Al Ahly SC
Blooming Arena
Atletico Bucaramanga
Salernitana
FC Metz
Atlético Peñarol
Colo Colo
LA Galaxy
Universidad de Chile
JS Kabylie
Mamelodi Sundowns
O'Higgins F.C.
Philadelphia Union
Atlético Tucuman
Legia Warszawa
Frosinone
Copenhagen
Hajduk Split HNK
Harlacher
Zenit
FC Steaua Bucureşti
Saiyans FC
Kaizer Chiefs FC
San Lorenzo FC
Avellaneda FC
Versailles FC
Kashima Antlers FC
Bordeaux FC
Millionaires FC
Cerro Porteño FC
Tokyo Verdy FC
Motagua FC
Toluca FC
Bohemians FC
Los Angeles FC
Porcinos FC
Barranquilla Youth FC
Atlético Nacional FC
Tolima FC
Ulsan HD FC
Atlanta United FC
Almirante Brown
Standard Liege FC
Sanfrecce Hiroshima FC
Urawa Red Diamonds FC
Sagan Tosu FC
Orlando City FC
Austin FC
Portland Timbers FC
Dallas FC
Toronto FC
Columbus Crew FC
D.C. United FC
Real Salt Lake FC
Peluche Caligari FC
Sporting Kansas City FC
Colorado Rapids FC
Montreal FC
Minnesota United FC
Nashville FC
New York City FC
New York Red Bulls FC
Emelec FC
Olimpia FC
Atlético Independiente FC
AIK
San Diego FC
San Jose Earthquakes FC
St. Louis City FC
Vancouver Whitecaps FC
Seattle Sounders FC
Charlotte FC
Cincinnati FC
New England Revolution FC
Houston Dynamo FC
Chicago Fire FC
Puebla FC
Catholic University FC
Audax Italiano FC
IFK Norrköping FC
Bay FC
Montevideo City Torque FC
Cavalry FC
Santa Fe FC
Shelbourne FC
Indy Eleven FC
River Plate
Incheon United FC
Al Ain FC
Halmstad FC
Libertad FC
Monterey Bay FC
Vissel Kobe FC
Hapoel Be'er Sheva FC
Maccabi Tel Aviv FC
Beitar Jerusalem FC
Yokohama F. Marinos FC
Atlético Tigre FC
Estudiantes de La Plata FC
Orlando Pride FC
North Carolina Courage FC
Portland Thorns FC
Washington Spirit FC
Kansas City Current FC
Racing Louisville FC
NJ/NY Gotham FC
San Diego Wave FC
Angel City FC
Seattle Reign FC
Houston Dash FC
Utah Royals FC
Chicago Stars FC
Santa Cruz FC
Universitaria de Quito FC
St Patrick's Athletic FC
Olympiacos
Atlético Vélez Sársfield FC
Atlético Huracán FC
Figueirense FC
Sporting Cristal FC
Cerezo Osaka FC
Atlético Lanús FC
Alianza Lima FC
Rosario Central FC
Gamba Osaka FC
Newell's Old Boys FC
Argentinos Juniors FC
Cork City FC
Boreale
Hokkaido Consadole Sapporo FC
Bielefeld
Hansa Rostock
Kyoto Sanga FC
Nacional FC
Rio Branco Atlético FC
Seoul FC
Adidas
Avispa Fukuoka FC
Barcelona SC
Hércules FC
Malmö FC
Atlético Juventus FC
Kashiwa Reysol FC
Cesena FC
VfL Osnabrück FC
Paris FC
Olimpo United FC
Persas FC
Real Titán FC
Galácticos del Caribe FC
Raniza FC
Los Aliens FC
Los Chamos FC
Atlético Parceros FC
Muchachos FC
Club de Cuervos FC
West Santos FC
Carl Zeiss Jena FC
Dinamo Tbilisi FC
Ayr United FC
Lorient FC
Shimizu S-Pulse FC
Panathinaikos FC
MC Alger FC
Associação Portuguesa de Desportos FC
Red Bull Salzburg
Bradford City FC
Port Vale FC
CD Olimpia FC
Ceuta FC
` )} ${renderContent(4, `
2025-2026 Season
2024-2025 Season
2023-2024 Season
` )} ${renderContent(5, `
AC Milan Club
Arsenal
Aston Villa
Atalanta
Atletico Madrid
Barcelona
Leverkusen
Bayern
Benfica
Bologna
Borussia Dortmund Club
Brest
Celtic
Club Brugge K.V
Dinamo Zagreb
Feyenoord
Girona Football Club
Inter Milan
Juventus
Lille
Liverpool
Manchester City Club
Monaco
Paris Saint-Germain
Eindhoven
Leipzig
Real Madrid
Red Star Belgrade
FC Red Bull Salzburg
Shakhtar Donetsk
Slovan
Sparta Prague
Sporting Lisbon
SK Sturm Graz
VfB Stuttgart
BSC Young Boys
Slavia Praha
` )} ${renderContent(6, `
UEFA Euro 2024
Germany
Scotland
Spain
Italy
France
England
Portugal
Hungary
Switzerland
Croatia
Albania
Slovenia
Denmark
Serbia
Wales
Netherlands
Austria
Belgium
Slovakia
Romania
Türkiye
Czech Republic
Poland
Norway
` )} ${renderContent(7, `
Copa America 2024
Canada
Colombia
Peru
Chile
Venezuela
Mexico
deer
Brazil
Argentina
Bolivia
` )} ${renderContent(8, `
Europe
Germany
France
Portugal
Belgium
Denmark
England
Spain
Russia
Turkey
Switzerland
Italy
Netherlands
Albania
Croatia
Finland
Norway
Norway
Sweden
Ireland
Poland
Ukraine
Greece
Czech Republic
Wales
Northern Ireland
Iceland
Hungary
Scotland
Türkiye
Bosnia and Herzegovina
Serbia
Austria
Georgia
Romania
Armenia
Yugoslavia
Noth America
Mexico
Canada
El Salvador
Panama
Costa Rica
Jamaica
Honduras
Guatemala
USA
Greenland
South America
Argentina
Uruguay
Brazil
Paraguay
Colombia
Ecuador
Chile
Peru
Venezuela
Bolivia
Asia
Korea
Japan
Saudi Arabia
Malaysia
Iraq
Qatar
Iran
Australia
Philippines
Oman
Palestine
Indonesia
China
Africa
Senegal
Tunisia
Algeria
Ivory Coast
Cameroon
Morocco
Ghana
Egypt
Nigeria
Mali
Congo
` )} ${renderContent(9, `
` )} ${renderContent(10, `
2022 - Argentina
2018 - France
2014 - Germany
2010 - Spain
2006 - Italy
2002 - Brazil
1990 - Germany
1986 - Argentina
1970 - Brazil
` )} ${renderContent(11, `
Retro
Kids
Long Sleeve
Windbreaker
Shorts
Jacket
Football
Special line logistics
sock
` )} ${scriptStr}
` }()}
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
${SSS}
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
${function() { if (data === undefined || typeof data !== 'string' || data == '') return `
`; if (data === 'close') return ''; return `
View more
`; }()}
1/11
${data.index + 1}/${data.total}
Facebook
Twitter
Pinterest
Player 25/26 Athletic Bilbao Home Jersey
164 sold
$22.90
$47.90
-
$25.00
${function() { const variantData = data.variant || {"id":"14394d13-c27e-4e34-9399-b35e8a37c22a","product_id":"e49a93d4-3bb3-47b8-90b7-f9a027ae0879","title":"S","weight_unit":"kg","inventory_quantity":1000,"sku":"\u7403\u5458 25\/26 \u6bd5\u5c14\u5df4\u9102\u7ade\u6280 \u4e3b\u573a\u7403\u8863","barcode":"","position":1,"option1":"S","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":22.9,"min_quantity":1}],"weight":"0","compare_at_price":"47.9","price":"22.9","retail_price":"47.9","available":true,"url":"\/products\/player-version-athletic-bilbao-away-kit-24-25-football-jersey-12871732-blkg-by3k-6qj8?variant=14394d13-c27e-4e34-9399-b35e8a37c22a","available_quantity":999999999,"options":[{"name":"Size","value":"S"}],"off_ratio":"52","flashsale_info":{"variant_id":"14394d13-c27e-4e34-9399-b35e8a37c22a","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"22.9","compare_at_price":"","discount_price":"22.9","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"52","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":164}; const saveType = "amount"; const productSaveLabel = true; return `
-
${saveType == 'percent' ? `
-${variantData.off_ratio}%
` : `
-
` }
`; }()}
${function(){ // 获取基础配置数据 const isRTL = originData.isRTL; // 是否从右到左显示 const isMobile = originData.isMobile; // 是否移动端 const inProductDetail = originData.inProductDetail; // 是否在商品详情页 const image_domain = originData.image_domain; // 图片域名 const copyBtnClass = originData.copyBtnClass; // 复制按钮类名 const copyClass = originData.copyClass; // 复制内容类名 // 优惠码列表 const list = originData.discountCodeData.list || []; if (list.length === 0) { return ``; } // 显示模式: 平铺或折叠 const isTiled = originData.discountCodeData.display_type === "DTE_TILE"; // 获取第一个配置作为默认配置 const productSetting = list[0].product_setting; const { template_type, template_config } = productSetting; const { text, tag, banner, coupon } = template_config.color; // 优惠券样式配置 const { coupon_border_color, // 边框颜色 coupon_background_color, // 背景色起始色 coupon_background_color_end, // 背景色结束色 coupon_color, // 文字颜色 coupon_button_background_color_start, // 按钮背景起始色 coupon_button_background_color_end, // 按钮背景结束色 coupon_button_color // 按钮文字颜色 } = coupon; // 颜色透明度转换函数 const colorToRGBA = (color, alpha) => { if (color.startsWith('#')) { const hex = color.slice(1); const r = parseInt(hex.slice(0, 2), 16); const g = parseInt(hex.slice(2, 4), 16); const b = parseInt(hex.slice(4, 6), 16); return `rgba(${r}, ${g}, ${b}, ${alpha})`; } else if (color.includes('rgb')) { const rgb = color.slice(color.indexOf('(') + 1, color.indexOf(')')).split(','); const r = parseInt(rgb[0]); const g = parseInt(rgb[1]); const b = parseInt(rgb[2]); return `rgba(${r}, ${g}, ${b}, ${alpha})`; } else { return color } } // 渲染平铺样式的优惠券列表 const renderTiledList = (list, isFold = false) => { const rate = isRTL ? '34%' : '66%'; // RTL布局时调整分割线位置 let curDom = ` `; // 循环渲染优惠券列表 for(const item of list) { curDom += `
${item.discount_text}
${(isFold || item.product_setting.show_effective_date) && +item.ends_at !== -1 ? `${item.starts_at} - ${item.ends_at}` : ""}
${item.code}
` } return curDom; } let Dom = ``; // 根据显示模式选择渲染方式 if (isTiled || list.length === 1) { // 根据模板类型渲染不同样式 switch(template_type) { // 文本样式 case 'text': { Dom = `
${function(){ let textDom = ''; for(const item of list) { textDom += `
${ item.discount_text }
Code:
${ item.code }
` } return textDom; }()}
`; break; } // 标签样式 case 'tag': { const { text_color, background_color } = tag; Dom = `
${function(){ let textDom = ''; for(const item of list) { textDom += `
${ item.discount_text }
Code:
${ item.code }
`; } return textDom; }()}
` break; } // 横幅样式 case 'banner': { Dom = `
${function(){ let textDom = ''; for(const item of list) { textDom += `
${ item.discount_text }
Code:
${ item.code }
`; } return textDom; }()}
`; break; } // 优惠券样式 case 'coupon': { Dom = `
${renderTiledList(list)}
` break; } } } else { // 折叠模式样式 const foldStyle = ` `; // 只显示前3个优惠券 const showList = list.slice(0, 3); let couponDom = ""; for(const item of showList) { couponDom += `
${item.discount_text}
` } // PC端弹窗 const webModal = `
${function(){ return renderTiledList(list, true); }()}
` // 移动端侧边栏 const mobileModal = `
${function(){ return renderTiledList(list, true); }()}
` couponDom += `
Click to claim
${isMobile ? mobileModal : webModal} `; Dom = ` ${foldStyle}
${couponDom}
` } return `
${Dom}
`; }()}
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
${function(){ return `
Discount code cannot be displayed here. Please move it to the product detail area. (This prompt will not be displayed on the client-side)
`; }()}
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "14394d13-c27e-4e34-9399-b35e8a37c22a"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'e49a93d4-3bb3-47b8-90b7-f9a027ae0879' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "e49a93d4-3bb3-47b8-90b7-f9a027ae0879", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
${(function () { const automatic_discount_list = originData.automatic_discount_list; // 显示类型 const DISPLAY_TYPE = { DTE_FOLD: 'DTE_FOLD', // 折叠 DTE_TILE: 'DTE_TILE' // 平铺 } const DEFAULT_CONFIG = { BG: 'rgba(235, 57, 27, 0.04)', TEXT_COLOR: '#EB391B', BORDER_COLOR: 'rgb(235, 57, 27)', ADD_TO_CART_BG: 'transparent', ADD_TO_CART_TEXT_COLOR: 'rgb(235, 57, 27)', ADD_TO_CART_BORDER_COLOR: 'rgb(235, 57, 27)', }; // 本地跳转判定(不依赖全局 appDiscountUtils,模板沙箱不可见) const __resolveHref = (s, landing) => { if (!s || !s.is_redirection) return ''; const link = typeof s.link === 'string' ? s.link.trim() : ''; if (link && /^https?:\/\//i.test(link)) return link; return landing || ''; }; const isExist = automatic_discount_list?.length > 0 && automatic_discount_list.some(item => item.discount[0].product_enabled); // 如果没有任何自动折扣,则隐藏,防止gap占位 if (!isExist) { return ` `; } else { return `
${(function () { return automatic_discount_list.map((item) => { // 模版类型 const template_type = item.discount[0].template_type; // 是否显示自动折扣 const is_show_automatic_discount = item.discount[0].product_enabled; // 折扣图标 const discount_icon = item.discount_icon; // 第一个自动折扣 const first_automatic_discount = item.discount[0]; // 显示折叠展示 const isFold = (item.discount[0].display_type || DISPLAY_TYPE.DTE_FOLD) === DISPLAY_TYPE.DTE_FOLD; // 文本数组 const text_arr = item.discount[0].config.texts; // 条件值数组 const condition_values = item?.discount[0]?.condition_values || []; // 落地页链接 const first_landing_url = `/promotions/discount-default/${first_automatic_discount.discount_id}`; // 三段式跳转决策: 最终跳转 URL,空字符串表示不跳 const finalHref = __resolveHref(first_automatic_discount, first_landing_url); // 自动折扣总数 const automatic_discount_total = item.discount.length; // 是否显示折扣图标 const isHasDiscountIcon = discount_icon ? true : false; // 是否显示折扣图标且模版类型不为tag和add_to_cart const isHasDiscountIconWithNoTag = (template_type != 'tag' && template_type != 'add_to_cart' && isHasDiscountIcon)? true : false; // 文本颜色 let text_color = DEFAULT_CONFIG.TEXT_COLOR; // 背景颜色 const bgFn = (curBg) => template_type === "text" ? "transparent" : curBg; let bg_color = bgFn(DEFAULT_CONFIG.BG); // 边框颜色 const borderFn = (curBorder) => template_type == "tag" ? curBorder : "initial"; let border_color = borderFn(DEFAULT_CONFIG.BORDER_COLOR); // 模版配置 let template_config = first_automatic_discount.template_config; // 一键加购样式 let addToCartBtnBgColor = DEFAULT_CONFIG.ADD_TO_CART_BG; let addToCartBtnTextColor = DEFAULT_CONFIG.ADD_TO_CART_TEXT_COLOR; let addToCartBtnBorderColor = DEFAULT_CONFIG.ADD_TO_CART_BORDER_COLOR; // 兜底方案 try { if(template_config.length !== 0){ template_config = JSON.parse(template_config); text_color= isHasDiscountIconWithNoTag ? template_config.color[template_type].icon_text_color : template_config.color[template_type].text_color; bg_color = bgFn(template_config.color[template_type].background_color); const arrayRgba = bg_color.split(","); arrayRgba.splice(3, 1, " 1)"); border_color = borderFn(`${arrayRgba.join(",")}`); addToCartBtnTextColor = template_config.color[template_type].button_text_color; addToCartBtnBorderColor = template_config.color[template_type].button_border_color; addToCartBtnBgColor = template_config.color[template_type].button_background_color; } } catch (error) { console.error('template_config_error', error); template_config = { color: { [template_type]: { icon_text_color: DEFAULT_CONFIG.TEXT_COLOR, text_color: DEFAULT_CONFIG.TEXT_COLOR, background_color: DEFAULT_CONFIG.BG } } }; } // 标签 const isTag = template_type == 'tag'; // 文字和横幅 const isTextAndBanner = template_type == 'text' || template_type == 'banner'; // 是否一键加购 const isAddToCart = template_type == 'add_to_cart'; // 文字样式 const textStyle = `color: ${text_color}; background-color: transparent; border: none;`; // 标签样式 const labelStyle = `color: ${text_color};border: 1px solid ${border_color};background-color:${bg_color};padding: 4px;`; // 横幅样式 const bannerStyle = `color: ${text_color};border: none; background-color:${bg_color}`; // 一键加购单个容器样式(只包含动态样式) const addToCartSingleContainerStyle = `color: ${text_color}; background-color:${bg_color};`; // 一键加购按钮样式(只包含配置的动态样式) const addToCartBtnStyle = `color: ${addToCartBtnTextColor}; background-color:${addToCartBtnBgColor}; border:1px solid ${addToCartBtnBorderColor};`; // 外层样式在标签样式下不展示颜色配置,除开标签类型,颜色都可以在外层覆盖 let outerStyle = ''; if (template_type == 'text') { outerStyle = textStyle; } else if (template_type == 'tag') { outerStyle = "border: none;"; } else if (template_type == 'banner') { outerStyle = bannerStyle; } /** * 1. 标签一定是单独样式展示的 * 2. 折叠:横向布局,文字和横幅,合并成一行文本; 标签:单独样式处理 * 3. 平铺:纵向布局,文字、横幅和标签; 标签:单独样式处理;一键加购默认都是平铺 */ let txtHtml = ``; if (isFold) { if(isTag) { // 标签 const spanText = text_arr.map((text) => { return `
${text}
`; }).join(''); txtHtml = `
${spanText}
`; } else { // 文字和横幅 txtHtml = `
${first_automatic_discount.config.text}
`; } } else { // 文字和横幅, 但标签有自己的样式,且一键加购有单独样式 const spanText = text_arr.map((text, index) => { const condition_value = condition_values[index]; if(isAddToCart) { return `
${text}
Add to cart
` } else { return `
${text}
`; } }).join(''); // 都是纵向布局,标签有间距 txtHtml = `
${spanText}
`; } /** * 显示图标的判断 */ const discount_type = item.discount_type; const isShowRebateIcon = ["DT_REBATE_CTQ_OTP", "DT_REBATE_CTQ_OTR", "DT_REBATE_CTA_OTP", "DT_REBATE_CTA_OTR", "DT_M_N_DISCOUNT"].includes(discount_type) && isTextAndBanner const isShowBxgyIcon = ["DT_BUY_ONE_GET_ONE", "DT_BUY_X_GET_Y"].includes(discount_type) const isShowBundleIcon = ["DT_CLASSIC_BUNDLE","DT_MIX_MATCH_BUNDLE"].includes(discount_type); /** * 渲染下拉框或抽屉的折扣列表 */ const discount_list_html = (curItem) => { return `
${function() { return curItem.discount.map(childItem => { const childLandingUrl = `/promotions/discount-default/${childItem.discount_id}`; const childFinalHref = __resolveHref(childItem, childLandingUrl); childItem.__finalHref = childFinalHref; return childFinalHref ? `
${childItem.config.text}
` : `
${childItem.config.text}
`; }).join(''); }()}
`; } return `
${txtHtml} ${finalHref ? `
` : ''}
${discount_list_html(item)}
${discount_list_html(item)}
${function() { return text_arr.map((text) => { return `
${text}
`; }).join(''); }()}
`; }).join(''); })()}
` } })()}
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = '14394d13-c27e-4e34-9399-b35e8a37c22a'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = 'e49a93d4-3bb3-47b8-90b7-f9a027ae0879'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == 'e49a93d4-3bb3-47b8-90b7-f9a027ae0879' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = 'e49a93d4-3bb3-47b8-90b7-f9a027ae0879'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() {} unmountCallback() {} setupAction_() { this.registerAction('showAddToCartToast', () => { const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy') if(themeAddToCartToastEl) return const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
Size-
S
${function(){ const enable_selected_variants = "true" === 'false'; const optionValue = data.value; return `
${optionValue ? `${enable_selected_variants ? '-' : ''}${optionValue}` : ''}
`; }()}
S
M
L
XL
XXL
${function(){ return `
Please select a Size
`; }()}
Quantity
Support global delivery
Normally delivered in about 15-20 days
Support customization
Add to cart
-
$22.90
${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]) || Object.keys(data).length > 1 ? data : null; const productVariant = {"id":"14394d13-c27e-4e34-9399-b35e8a37c22a","product_id":"e49a93d4-3bb3-47b8-90b7-f9a027ae0879","title":"S","weight_unit":"kg","inventory_quantity":1000,"sku":"\u7403\u5458 25\/26 \u6bd5\u5c14\u5df4\u9102\u7ade\u6280 \u4e3b\u573a\u7403\u8863","barcode":"","position":1,"option1":"S","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":22.9,"min_quantity":1}],"weight":"0","compare_at_price":"47.9","price":"22.9","retail_price":"47.9","available":true,"url":"\/products\/player-version-athletic-bilbao-away-kit-24-25-football-jersey-12871732-blkg-by3k-6qj8?variant=14394d13-c27e-4e34-9399-b35e8a37c22a","available_quantity":999999999,"options":[{"name":"Size","value":"S"}],"off_ratio":"52","flashsale_info":{"variant_id":"14394d13-c27e-4e34-9399-b35e8a37c22a","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"22.9","compare_at_price":"","discount_price":"22.9","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"52","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":164}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return `
` }else { const price = variantData && variantData.price; return price != undefined ? `
` : '
'; } }()}
Buy it now
Product was out of stock.
Product is unavailable.
people are viewing this right now
Shipping
Estimated Delivery:
Jun-11
-
Jun-16
${function() { const type = 'hero'; const postageFreeAmount = 60; const custom_text_hero = "Free shipping on orders over $60"; const totalPrice = +data.total_price; const diffPrice = postageFreeAmount - totalPrice; const percentDiff = (diffPrice > 0 ? (totalPrice / postageFreeAmount * 100) : 100) + '%'; let tipText = "Your order is free delivery"; const custom_text_wind = "Buy {amount} more to enjoy FREE Shipping"; const custom_text = type === 'hero' ? custom_text_hero : custom_text_wind; if (diffPrice > 0) { tipText = custom_text.replace('{amount}', `
`); } return ` ${type === 'hero' ? `
${tipText}
` : `
${tipText}
Your order is free delivery
` } `; }()}
Share
Tweet
Pin it
Kind tips: It is recommended to turn the clothes inside out when washing/avoid violent rubbing/avoid soaking in water for a long time
You may also like
Recently viewed
${function(){ const settings_product_title = "title"; const product_grid_image_size = "100%"; const settings_product_image_hover_on = true; let settings_product_save_label = false; const product_sold_out_label = true; const settings_product_swatches_name = ["color","size"]; const settings_collection_color_swatches = true; const product_price_currency = `
` const from_on = data.price_max != data.price_min ? '
from
{{ price }}
'.replace(/\{\{\s*price\s*\}\}/, product_price_currency) : product_price_currency; const variantShowLimit = 2; const private_id = 'product-tmpl-' + Math.random().toFixed(6).slice(-6) const product_variants = data.variants || []; const product_id = data.id; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; if (product_grid_image_size !== 'natural') { imageHeight = (imageWidth * parseFloat(product_grid_image_size)) / 100; } const price = Number(data.price_min); let compareAtPrice = Number(data.compare_at_price); let offRatio = data.off_ratio; const type = data.type; const isMock = data.isMock; let product_image_hover_on = false; for (let i = 0; i < product_variants.length; i++) { const item = product_variants[i]; const vcap = Number(item.compare_at_price); if (item.price == price && vcap > compareAtPrice) { compareAtPrice = vcap; offRatio = item.off_ratio; } } let second_image = null; if (settings_product_image_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { second_image = img; product_image_hover_on = true; break; } } } let sold_label_on = false; let sale_label_on = false; if (settings_product_save_label == null) { settings_product_save_label = true; } if (!data.available && product_sold_out_label) { sold_label_on = true; } if (settings_product_save_label && compareAtPrice > price && data.available) { sale_label_on = true; } const diffPrice = compareAtPrice - price; const variantValues = []; const showVariants = []; if (data.need_variant_image && settings_collection_color_swatches && settings_product_swatches_name.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.originData.options[i]; const optionName = option.name && option.name.toLowerCase(); if (settings_product_swatches_name.includes(optionName)) { for (let j = 0; j < product_variants.length; j++) { const variant = product_variants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return `
${function(){ if(showVariants.length == 0){ return `
` } return `
${ showVariants.map(item=>{ return `
`; }).join('') }
` }() }
SOLD OUT
SALE
${ showVariants.slice(0,variantShowLimit).map((item,index)=>{ return `
`; }).join('') }
+${showVariants.length - variantShowLimit}
${(settings_product_title === 'sub_title' && data.brief) ? data.brief : data.title}
${from_on}
-
-
${data.available ? ` ` : ''}
`; }()}
Cart
Your cart is reserved for
${data.mm}
m
${data.ss}
s
!
${data.line_items.map(item => { const renderDiscountApp = () => { const isEmpty = item.discount_applications && item.discount_applications.length < 1; const isNotExist = !item.discount_applications; if (isEmpty || isNotExist) { return "" } return `
${ (item.discount_applications || []).map(discount_item => { const discount_item_amount = discount_item.discount_amount || discount_item.amount || ''; return `
${discount_item.title}
(-
)
` }).join('') }
` } return `
${item.product_title}
${item.options.map(o => `
${o.name}:
${o.value}
`).join('')} ${(item.parsedProperties || []).map((propertie)=>{ if (propertie.isImage){ return `
${propertie.name}:
View image
` }else{ return `
${propertie.name}:
${propertie.value}
` } }).join('')}
Free gift
*${item.quantity}
${renderDiscountApp()}
`; }).join('')}
Goes great with
cart
cart
Your cart is currently empty.
Continue shopping
${function() { const freeAmount = 60; const totalPrice = (data && data.total_price) || (data && data.cart && data.cart.total_price) || 0; const amountDiff = freeAmount - totalPrice; const percentDiff = (amountDiff > 0 ? (totalPrice / freeAmount * 100).toFixed(2) : 100) + '%'; const spendTip = "Buy {amount} more to enjoy FREE Shipping"; let tipText = "Your order is free delivery"; if (amountDiff > 0 && spendTip) { tipText = spendTip.replace('{amount}', `
`); } return `
${tipText}
${percentDiff}
`; }()}
${function() { return `
Add order note
Add order note
`; }()}
Total:
${data.total_discount > 0 ? ( `
Save
${data.discount_applications.length > 0 && data.discount_applications.map(item => { return `
${item.title}:
` }).join('')}
Save
` ) : ''}
Check out
Taxes and shipping calculated at checkout
${function() { const freeAmount = 60; const totalPrice = (data && data.total_price) || (data && data.cart && data.cart.total_price) || 0; const amountDiff = freeAmount - totalPrice; const percentDiff = (amountDiff > 0 ? (totalPrice / freeAmount * 100).toFixed(2) : 100) + '%'; const spendTip = "Buy {amount} more to enjoy FREE Shipping"; let tipText = "Your order is free delivery"; if (amountDiff > 0 && spendTip) { tipText = spendTip.replace('{amount}', `
`); } return `
${tipText}
${percentDiff}
`; }()}
Total:
${data.total_discount > 0 ? ( `
Save
${data.discount_applications.length > 0 && data.discount_applications.map(item => { return `
${item.title}:
` }).join('')}
Save
` ) : ''}
Check out
Taxes and shipping calculated at checkout
${data.discount_applications.length > 0 && `
Subtotal:
` || ''} ${data.discount_applications.length > 0 && data.discount_applications.map(item => { return `
${item.title}:
` }).join('') || ''}
Total:
Check out
Taxes and shipping calculated at checkout
${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]) || Object.keys(data).length > 1 ? data : null; const productVariant = null; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return `
` }else { const price = variantData && variantData.price; return price != undefined ? `
` : '
'; } }()}
const carousel = document.getElementById('quick-view-images'); const selecotr = document.getElementById('quick-view-thumb-images'); const resizeObserver = new ResizeObserver(entries => { for (let entry of entries) { const { height } = entry.contentRect; selecotr.style.height = height + 'px'; } }); resizeObserver.observe(carousel);
${function(){ const remove_variant_images_on = false; let product_swatches_name = ["color","size"]; product_swatches_name = product_swatches_name.map((name) => name.toLowerCase()); const variantsNamesSet = new Set(data.options.map((opt) => opt.name.toLowerCase()) || []); const containsSwatches = product_swatches_name.some((name) => variantsNamesSet.has(name)); const variantsList = (data && data.variants) || [] const variants = variantsList.map((item) => item.image.path) || []; const productData = data; let images = data.images; if(remove_variant_images_on && containsSwatches) { images = data.images.filter((img) => !variants.includes(img.path)); } const selectedVariant = data.variants.find(v => v.available) || data.variants[0]; const selectedIndex = !!selectedVariant ? images.findIndex(img => img.src === (selectedVariant.image && selectedVariant.image.src)) : 0; const initialSlide = selectedIndex === -1 ? 0 : selectedIndex; return `
${images.map((image, index) => `
`).join('')}
${images.map(image => `
`).join('')} ${images.length > 1 ? `
` : ''}
${data.title}
Price
${function() { const origin = "view" const product = (origin === 'shop' ? data.product : data) || {}; const selectedVariant = product.variants.find(v => v.available) || product.variants[0]; return !!selectedVariant ? `
-
` : `
-
`; }()}
Quantity
${selectedVariant.available ? "Add to cart" : "SOLD OUT"}
Buy it now
Product was out of stock.
Product is unavailable.
` }()}
${function(){ const optionName = option.name || ''; const optionId = option.id || ''; let isThumbImage = !!option.showThumbImage; const thumbStyle = "image"; const variantType = "button"; const isSelected = (value) => { const selected = (data.selectedOptions || []).find(v => v.name === optionName); return selected && selected.value.length && selected.value[0] == value; }; const getThumbImage = (value) => { const options = data.product.options || []; const option = options.find(o => o.name === optionName); if (option.thumbImages) { const thumbImage = option.thumbImages.find(t => t.value === value); if (thumbImage && thumbImage.image) { return { src: thumbImage.image.src, alt: thumbImage.image.alt }; } } return {src: '', alt: ''}; }; return `
${optionName.toLowerCase()}
${value}
${value}
${optionName}:
${data.selectedOptions && data.selectedOptions.length && data.selectedOptions.find(v => v.name === optionName).value[0]}
${value}
`; }()}
${function(){ return `
${data.value}
` }()}
-
-