1<!DOCTYPE html><html lang="tr"><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta name='viewport' content='width=device-width, user-scalable=yes'><link rel="preconnect" href="https://percdn.com/"/><link rel="dns-prefetch" href="https://percdn.com/"/><link rel="icon" href="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09/l/favicon-85442862-sw199sh202.webp" /><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/template/smart/default/assets/plugins/bootstrap.soft.min.css?v=1661412851" /><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/template/smart/default/assets/style.min.css?v=1790058138" /><title>Erkek Ayakkabı Modelleri: Åıklık ve Tarzı Bir Arada İfade Edin</title><meta name="description" content="A Kalite İthal Premium Seri, en uygun fiyat ve yüksek iÅçilik kalitesiyle. İthal materyallerle hazırlanan yeni sezon tasarımlarımızı hemen keÅfedin. Aynı gün kargo ve güvenli ödeme seçeneÄi. ithal modeller, a kalite, premium tasarım, yeni sezon, uygun fiyatlı modeller, ithal çanta, ithal ayakkabı" /><link rel="canonical" href="https://www.vezzalux.com/e-ayakkabi" /><meta property="og:title" content="Erkek Ayakkabı Modelleri: Åıklık ve Tarzı Bir Arada İfade Edin" /><meta property="og:site_name" content="vezzalux.com" /><meta property="og:type" content="product" /><meta property="og:url" content="https://www.vezzalux.com/e-ayakkabi" /><meta property="og:keywords" content="A Kalite İthal Premium Seri, en uygun fiyat ve yüksek iÅçilik kalitesiyle. İthal materyallerle hazırlanan yeni sezon tasarımlarımızı hemen keÅfedin. Aynı gün kargo ve güvenli ödeme seçeneÄi. ithal modeller, a kalite, premium tasarım, yeni sezon, uygun fiyatlı modeller, ithal çanta, ithal ayakkabı" /><meta property="og:description" content="A Kalite İthal Premium Seri, en uygun fiyat ve yüksek iÅçilik kalitesiyle. İthal materyallerle hazırlanan yeni sezon tasarımlarımızı hemen keÅfedin. Aynı gün kargo ve güvenli ödeme seçeneÄi. ithal modeller, a kalite, premium tasarım, yeni sezon, uygun fiyatlı modeller, ithal çanta, ithal ayakkabı" /><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><style type="text/css"> 2 body { 3 font-family: 'Montserrat', sans-serif; 4 } 5 :root{ 6 --body-bg:#ffffff; 7 --menu-bg-color: ; 8 --menu-color: ; 9 --menu-color-hover: ; 10 --main-color: #000000; 11 --main-color2: #d93f31; 12 --header-top-color: ; 13 --header-top-color-hover: ; 14 --add-cart-list: #ffffff; 15 --add-cart-list-hover: #ffffff; 16 --add-cart-list-bg: #000000; 17 --add-cart-list-bg-hover: #404040; 18 --buy-now: #fafafa; 19 --buy-now-bg: #d93e30; 20 --buy-now-hover: #ffffff; 21 --buy-now-bg-hover: #d93526; 22 --add-cart-detail:#ffffff; 23 --add-cart-detail-bg:#030303; 24 --add-cart-detail-hover:#ffffff; 25 --add-cart-detail-bg-hover:#383838; 26 --complete-payment:#ffffff; 27 --complete-payment-bg:#4dc761; 28 --complete-payment-hover:#ffffff; 29 --complete-payment-bg-hover:#3aa14b; 30 --transition-time: .4s ease-out; 31 }; 32 33 </style><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/theme/___sirius/assets/style.css?v=1778851540" /><meta name="p:domain_verify" content="25e3a71548a050bc5ccca55118a28a5c"/><style type="text/css"> 34 @media(min-width:1240px){ 35 .container, 36 .container-sm, 37 .container-md, 38 .container-lg, 39 .container-xl { 40 max-width: 1400px !important; 41 width: 97%; 42 } 43 } 44 </style>
44<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Website","url":"https:\/\/www.vezzalux.com","name":"CB TOPTAN ELEKTRONİK MARKET LOJİSTİK HİZMETLERİ LTD. ÅTİ.","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.vezzalux.com\/arama?k={search_term_string}","query-input":"required name=search_term_string"}}</script>
44<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Store","name":"CB TOPTAN ELEKTRONİK MARKET LOJİSTİK HİZMETLERİ LTD. ÅTİ.","url":"https:\/\/www.vezzalux.com","logo":"https:\/\/percdn.com\/f\/607271\/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09\/l\/logo-69d55489731bf-7554919-sw200sh40.webp","image":"https:\/\/percdn.com\/f\/607271\/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09\/l\/logo-69d55489731bf-7554919-sw200sh40.webp","address":""}</script>
44<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"CollectionPage","name":"Ayakkabı","description":"A Kalite İthal Premium Seri, en uygun fiyat ve yüksek iÅçilik kalitesiyle. İthal materyallerle hazırlanan yeni sezon tasarımlarımızı hemen keÅfedin. Aynı gün kargo ve güvenli ödeme seçeneÄi. ithal modeller, a kalite, premium tasarım, yeni sezon, uygun fiyatlı modeller, ithal çanta, ithal ayakkabı","url":"https:\/\/www.vezzalux.com\/e-ayakkabi"}</script>
44<meta name="google-site-verification" content="yNU04GUe7YKmyrA5dgljPWJux657cixHZOzYgEVHZl0" /><meta name="facebook-domain-verification" content="ajkipxcusho7jyfbny57hqlp5p3x91" /><meta name="yandex-verification" content="dd66f2a817b31fe7" /><meta name="p:domain_verify" content="<meta name="p:domain_verify" content="25e3a71548a050bc5ccca55118a28a5c"/>" /><!-- Global site tag (gtag.js) -->
vendor: 63 bytes, line 44
44<script async src="https://www.googletagmanager.com/gtag/js?id=
44UA-0000000-0
vendor: 11 bytes, line 44
44"></script>
44<script> 45 var google_tag_defined = true; 46
vendor: 207 bytes, lines 46-49
46window.dataLayer = window.dataLayer || []; 47 function gtag(){dataLayer.push(arguments);} 48 gtag('js', new Date()); 49 gtag('config', '
49UA-0000000-0
vendor: 52 bytes, lines 49-50
49'); 50
50gtag('config', 'G-KXMB3PNF50'); 51 </script>
51<!-- Facebook Pixel Code -->
51<script>
vendor: 603 bytes, lines 51-60
51 52 !function(f,b,e,v,n,t,s) 53 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 54 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 55 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 56 n.queue=[];t=b.createElement(e);t.async=!0; 57 t.src=v;s=b.getElementsByTagName(e)[0]; 58 s.parentNode.insertBefore(t,s)}(window, document,'script', 59 'https://connect.facebook.net/en_US/fbevents.js'); 60 fbq('init', '
601511092333874339
vendor: 24 bytes, lines 60-61
60'); 61
61fbq('track', 'PageView',{}); 62 </script>
62<!-- End Facebook Pixel Code --><!-- Yandex.Metrika counter -->
62<script type="text/javascript" >
vendor: 372 bytes, lines 62-67
62 63 (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; 64 m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) 65 (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); 66 67 ym(
67109217023
vendor: 228 bytes, lines 67-73
67, "init", { 68 clickmap:true, 69 trackLinks:true, 70 accurateTrackBounce:true, 71 ecommerce:"dataLayer" 72 }); 73
73</script>
73<noscript><div><img src="https://mc.yandex.ru/watch/109217023" style="position:absolute; left:-9999px;" alt="" /></div></noscript><!-- /Yandex.Metrika counter --></head><body class="categories-body "><div class="addons-campaign-bar acb-type-0 acb-desktop-1 acb-mobile-1" 74 style="background-color: #080808; height: 60px; background-repeat: no-repeat; background-position: center;"><a href="#" class="url"><div class="container"><div class="text" style="color: #ffffff; font-size: 15px"> 75 Tüm AlıÅveriÅlerde Ãcretsiz Aynı Gün Kargo! 14 Gün İade+Güvenli Ãdeme 76 </div></div></a></div><style type="text/css"> 77 @media (max-width: 991px) { 78 .addons-campaign-bar { 79 height: 40px !important; 80 } 81 .addons-campaign-bar { 82 margin-top: 60px; 83 margin-bottom: -60px; 84 } 85 .addons-campaign-bar .text { 86 font-size: 14px !important; 87 } 88 } 89</style><div class="addons-marquee-bar amb-desktop-1 amb-mobile-1 amb-direction-0" 90 style="background-color: #000000; background-repeat: no-repeat; background-position: center;"><a href="javascript:;" class="item" style="color: #ffffff"> 91 Seçili ürünlerde %60 a Varan İndirim 92 </a><a href="javascript:;" class="item" style="color: #ffffff"> 93 Seçili ürünlerde %60 a Varan İndirim 94 </a><a href="javascript:;" class="item" style="color: #ffffff"> 95 Seçili ürünlerde %60 a Varan İndirim 96 </a><a href="javascript:;" class="item" style="color: #ffffff"> 97 Seçili ürünlerde %60 a Varan İndirim 98 </a></div><style type="text/css"> 99 @media (min-width: 992px) { 100 .addons-marquee-bar { 101 height: 40px !important; 102 } 103 .addons-marquee-bar .item { 104 font-size: 17px !important; 105 } 106 .addons-marquee-bar .item { 107 margin-right: 45px !important; 108 } 109 } 110 @media (max-width: 991px) { 111 .addons-marquee-bar { 112 height: 34px !important; 113 } 114 .addons-marquee-bar { 115 margin-top: 60px; 116 margin-bottom: -60px; 117 } 118 .addons-marquee-bar .item { 119 font-size: 14px !important; 120 } 121 .addons-marquee-bar .item { 122 margin-right: 25px !important; 123 } 124 } 125</style><section class="pattern-group pattern-group-t-0 pattern-group-p-categories "><div class="no-container"><div class="pattern-group-body"><div class="p-g-b-c-wrapper"><div class="p-g-b-c-inner"><div class="p-g-mod p-g-mod-t-28 p-g-mod-header p-g-mod-trans "><div class="p-g-mod-body p-g-mod-body-p-0 "><header class="desktop"><section class="h-center"><div class="container-fluid container-fluid-relative h-center-shadow"><div class="row"><div class="col-md-4"><div class="header-area first"><div class="icon-open"><i class="fas fa-bars mr-3"></i> 126 Menü 127 </div></div></div><div class="col-md-4"><div class="logo header-area center"><a href="https://www.vezzalux.com" ><img src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09/l/logo-69d55489731bf-7554919-sw200sh40.webp" alt="" /></a></div></div><div class="col-md-4"><div class="header-area last mr-4"><div class="header-bar"><a class="bar-link bar-search mr-4"><span class="icon"><i class="coreicon-search-1"></i></span></a><a href="https://www.vezzalux.com/uye-giris" class="bar-link bar-user mr-4"><span class="icon"><i class="coreicon-user-5"></i></span></a><div class="dropdown header-cart-hover"><a class="bar-link bar-cart" href="https://www.vezzalux.com/sepet" id="console-menu-3" role="button"><span class="icon"><i class="coreicon-cart-2"></i><span class="count" data-cart-quantity>0</span></span></a><div class="dropdown-menu" aria-labelledby="console-menu-3"><div class="top-header"><span class="title"> 128 Sepetim
129 <span class="count2" data-cart-quantity>0 </span><span class="count2-description">Ãrün</span></span></div><div class="products" data-cart-products></div><div class="summary" data-cart-summary></div></div></div></div></div></div><div class="search"><form action="https://www.vezzalux.com/arama" method="get" data-smart-product-search-image><div class="input-box"><input type="text" name="k" class="form-control" placeholder="Aramak istediÄin ürünü yaz, kolayca bul!" /></div><button type="submit" class="btn btn-orange btn-send"><i class="fas fa-search"></i></button></form></div></div></div></section></header><header class="mobile"><div class="op-black"></div><div class="left"><a href="javascript:;" class="icon-group ml-1 btn-sidebar-menu"><i class="fas fa-align-right"></i></a><a href="javascript:;" class="icon-group ml-1 btn-sidebar-menu ml-2"><i class="coreicon-search-1"></i></a></div><div class="center"><div class="logo"><a href="https://www.vezzalux.com"><img src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09/l/mobile-logo-50121567-sw200sh40.webp" alt="" /></a></div></div><div class="right"><a href="https://www.vezzalux.com/sepet" class="icon-group mr-3"><i class="coreicon-basket-2"></i><span class="badge" data-cart-quantity>0</span></a><a href="javascript:;" class="icon-group mr-1 btn-sidebar-user"><i class="coreicon-user-5"></i></a></div><div class="clearfix"></div><nav class="sidebar-menu-type-2"><div class="logo-area"><a href="https://www.vezzalux.com" ><img src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdFOVU1NG5hQT09/l/logo-69d55489731bf-7554919-sw200sh40.webp" alt="" /></a><div class="mobile-menu-close"><i class="fas fa-times"></i></div></div><div class="scrollbar"><section class="mobile-search"><form action="https://www.vezzalux.com/arama" method="get" data-choose-action="redirect" data-smart-mobile-product-search-image ><div class="input-box"><input type="text" name="k" class="form-control" placeholder="Ara.." /></div><button type="submit" class="btn btn-orange btn-send"><div><i class="coreicon-search"></i></div></button></form><div class="clearfix"></div></section><div class="mobil-area-title"> 130 TÃM KATEGORİLER 131 </div><div class="categories"><ul><li class="sc-282"><a href="javascript:;" class="btn-categories-show" data-id="282"><span class="name float-left">ERKEK</span><span class="icon float-right"><i class="fas fa-angle-right"></i></span><div class="clearfix"></div></a><ul class="multi categories-list-282"><li class="sc-282-all"><a href="https://www.vezzalux.com/erkek"><span class="name float-left"> 132 Tüm 133 ERKEK</span><div class="clearfix"></div></a></li><li class="sc-267"><a href="javascript:;" class="btn-categories-show" data-id="267"><span class="name float-left">Ayakkabı</span><span class="icon float-right"><i class="fas fa-angle-right"></i></span><div class="clearfix"></div></a><ul class="multi categories-list-267"><li class="sc-267-all"><a href="https://www.vezzalux.com/e-ayakkabi"><span class="name float-left"> 134 Tüm 135 Ayakkabı</span><div class="clearfix"></div></a></li><li class="sc-191"><a href="https://www.vezzalux.com/erkek-loafer-erkek-loafer" data-id="191"><span class="name ">Loafer</span><div class="clearfix"></div></a></li><li class="sc-247"><a href="https://www.vezzalux.com/erkek-sneaker-bogazli-erkek-sneaker-bogazli" data-id="247"><span class="name ">BoÄazlı Sneaker</span><div class="clearfix"></div></a></li><li class="sc-251"><a href="https://www.vezzalux.com/erkek-terlik-erkek-terlik" data-id="251"><span class="name ">Terlik</span><div class="clearfix"></div></a></li><li class="sc-280"><a href="https://www.vezzalux.com/erkek-sneaker-erkek-sneaker-650" data-id="280"><span class="name ">Sneaker</span><div class="clearfix"></div></a></li><li class="sc-278"><a href="https://www.vezzalux.com/erkek-bot-erkek-bot-4391" data-id="278"><span class="name ">Bot</span><div class="clearfix"></div></a></li></ul></li><li class="sc-268"><a href="https://www.vezzalux.com/e-canta" data-id="268"><span class="name ">Ãanta</span><div class="clearfix"></div></a></li></ul></li><li class="sc-263"><a href="javascript:;" class="btn-categories-show" data-id="263"><span class="name float-left">KADIN</span><span class="icon float-right"><i class="fas fa-angle-right"></i></span><div class="clearfix"></div></a><ul class="multi categories-list-263"><li class="sc-263-all"><a href="https://www.vezzalux.com/kadin"><span class="name float-left"> 136 Tüm 137 KADIN</span><div class="clearfix"></div></a></li><li class="sc-266"><a href="https://www.vezzalux.com/k-canta" data-id="266"><span class="name ">Ãanta</span><div class="clearfix"></div></a></li><li class="sc-265"><a href="javascript:;" class="btn-categories-show" data-id="265"><span class="name float-left">Ayakkabı</span><span class="icon float-right"><i class="fas fa-angle-right"></i></span><div class="clearfix"></div></a><ul class="multi categories-list-265"><li class="sc-265-all"><a href="https://www.vezzalux.com/k-ayakkabi"><span class="name float-left"> 138 Tüm 139 Ayakkabı</span><div class="clearfix"></div></a></li><li class="sc-185"><a href="https://www.vezzalux.com/kadin-sneaker-kadin-sneaker" data-id="185"><span class="name ">
139Sneaker</span><div class="clearfix"></div></a></li><li class="sc-187"><a href="https://www.vezzalux.com/kadin-terlik-kadin-terlik" data-id="187"><span class="name ">Terlik</span><div class="clearfix"></div></a></li><li class="sc-189"><a href="https://www.vezzalux.com/kadin-babet-kadin-babet" data-id="189"><span class="name ">Babet</span><div class="clearfix"></div></a></li><li class="sc-194"><a href="https://www.vezzalux.com/kadin-loafer-kadin-loafer" data-id="194"><span class="name ">Loafer</span><div class="clearfix"></div></a></li><li class="sc-204"><a href="https://www.vezzalux.com/kadin-bot-kadin-bot" data-id="204"><span class="name ">Bot</span><div class="clearfix"></div></a></li><li class="sc-206"><a href="https://www.vezzalux.com/kadin-topuklu-ayakkabi-kadin-topuklu-ayakkabi" data-id="206"><span class="name ">Topuklu Ayakkabı</span><div class="clearfix"></div></a></li><li class="sc-209"><a href="https://www.vezzalux.com/kadin-sandalet-kadin-sandalet" data-id="209"><span class="name ">Sandalet</span><div class="clearfix"></div></a></li><li class="sc-215"><a href="https://www.vezzalux.com/kadintopuklu-terlik-kadintopuklu-terlik" data-id="215"><span class="name ">Topuklu Terlik</span><div class="clearfix"></div></a></li><li class="sc-217"><a href="https://www.vezzalux.com/kadin-yagmurluk-uzun-kadin-yagmurluk-uzun" data-id="217"><span class="name ">YaÄmurluk Uzun</span><div class="clearfix"></div></a></li><li class="sc-219"><a href="https://www.vezzalux.com/kadin-yagmurluk-kisa-kadin-yagmurluk-kisa" data-id="219"><span class="name ">YaÄmurluk Kısa</span><div class="clearfix"></div></a></li><li class="sc-223"><a href="https://www.vezzalux.com/kadin-sneaker-bogazli-kadin-sneaker-bogazli" data-id="223"><span class="name ">BoÄazlı Sneaker</span><div class="clearfix"></div></a></li><li class="sc-242"><a href="https://www.vezzalux.com/kadin-kar-botu-kadin-kar-botu" data-id="242"><span class="name ">Kar Botu</span><div class="clearfix"></div></a></li><li class="sc-244"><a href="https://www.vezzalux.com/kadin-topuklu-bot-kadin-topuklu-bot" data-id="244"><span class="name ">Topuklu Bot</span><div class="clearfix"></div></a></li><li class="sc-284"><a href="https://www.vezzalux.com/sneaker-bogazli" data-id="284"><span class="name ">Sneaker BoÄazlı</span><div class="clearfix"></div></a></li></ul></li></ul></li><li class="sc-270"><a href="https://www.vezzalux.com/yeni-sezon" data-id="270"><span class="name ">YENİ SEZON</span><div class="clearfix"></div></a></li><li class="sc-291"><a href="https://www.vezzalux.com/erkek-tek-kalanlar" data-id="291"><span class="name ">FIRSAT ÃRÃNLERİ</span><div class="clearfix"></div></a></li><li class="sc-markalar"><a href="javascript:;" class="btn-categories-show" data-id="markalar"><span class="name float-left">Markalar</span><span class="icon float-right"><i class="fas fa-angle-right"></i></span><div class="clearfix"></div></a><ul class="multi categories-list-markalar"><li class="sc-markalar-all"><a href="https://www.vezzalux.com/markalar"><span class="name float-left">Tüm Markalar</span><div class="clearfix"></div></a></li><li class="sc-marka-1"><a href="https://www.vezzalux.com/adidas"><span class="name">Adidas</span><div class="clearfix"></div></a></li><li class="sc-marka-2"><a href="https://www.vezzalux.com/alaia"><span class="name">Alaia</span><div class="clearfix"></div></a></li><li class="sc-marka-3"><a href="https://www.vezzalux.com/alexander-mcqueen"><span class="name">Alexander Mcqueen</span><div class="clearfix"></div></a></li><li class="sc-marka-4"><a href="https://www.vezzalux.com/amina-muaddi"><span class="name">Amina Muaddi</span><div class="clearfix"></div></a></li><li class="sc-marka-5"><a href="https://www.vezzalux.com/amiri"><span class="name">Amiri</span><div class="clearfix"></div></a></li><li class="sc-marka-6"><a href="https://www.vezzalux.com/aquazzura"><span class="name">Aquazzura</span><div class="clearfix"></div></a></li><li class="sc-marka-7"><a href="https://www.vezzalux.com/balenciaga"><span class="name">Balenciaga</span><div class="clearfix"></div></a></li><li class="sc-marka-8"><a href="https://www.vezzalux.com/balmain"><span class="name">Balmain</span><div class="clearfix"></div></a></li><li class="sc-marka-9"><a href="https://www.vezzalux.com/bottega-veneta"><span class="name">Bottega Veneta</span><div class="clearfix"></div></a></li><li class="sc-marka-10"><a href="https://www.vezzalux.com/brunnella-cucinelli"><span class="name">Brunnella Cucinelli</span><div class="clearfix"></div></a></li><li class="sc-marka-11"><a href="https://www.vezzalux.com/celine"><span class="name">Celine</span><div class="clearfix"></div></a></li><li class="sc-marka-12"><a href="https://www.vezzalux.com/chanel"><span class="name">Chanel</span><div class="clearfix"></div></a></li><li class="sc-marka-13"><a href="https://www.vezzalux.com/chloe"><span class="name">Chloe</span><div class="clearfix"></div></a></li><li class="sc-marka-14"><a href="https://www.vezzalux.com/christian-louboutin"><span class="name">Christian Louboutin</span><div class="clearfix"></div></a></li><li class="sc-marka-15"><a href="https://www.vezzalux.com/dior"><span class="name">Dior</span><div class="clearfix"></div></a></li><li class="sc-marka-16"><a href="https://www.vezzalux.com/dolce-gabbana"><span class="name">Dolce Gabbana</span><div class="clearfix"></div></a></li><li class="sc-marka-17"><a href="https://www.vezzalux.com/dsq2"><span class="name">Dsq2</span><div class="clearfix"></div></a></li><li class="sc-marka-18"><a href="https://www.vezzalux.com/fendi"><span class="name">Fendi</span><div class="clearfix"></div></a></li><li class="sc-marka-19"><a href="https://www.vezzalux.com/ferragamo"><span class="name">Ferragamo</span><div class="clearfix"></div></a></li><li class="sc-marka-20"><a href="https://www.vezzalux.com/givenchy"><span class="name">Givenchy</span><div class="clearfix"></div></a></li><li class="sc-marka-21"><a href="https://www.vezzalux.com/golden-goose"><span class="name">Golden Goose</span><div class="clearfix"></div></a></li><li class="sc-marka-22"><a href="https://www.vezzalux.com/goyard"><span class="name">Goyard</span><div class="clearfix"></div></a></li><li class="sc-marka-23"><a href="https://www.vezzalux.com/gucci"><span class="name">Gucci</span><div class="clearfix"></div></a></li><li class="sc-marka-24"><a href="https://www.vezzalux.com/hermes"><span class="name">Hermes</span><div class="clearfix"></div></a></li><li class="sc-marka-25"><a href="https://www.vezzalux.com/jimmy-choo"><span class="name">Jimmy Choo</span><div class="clearfix"></div></a></li><li class="sc-marka-26"><a href="https://www.vezzalux.com/loewe"><span class="name">Loewe</span><div class="clearfix"></div></a></li><li class="sc-marka-27"><a href="https://www.vezzalux.com/lora-piana"><span class="name">Lora piana</span><div class="clearfix"></div></a></li><li class="sc-marka-28"><a href="https://www.vezzalux.com/louis-vuitton"><span class="name">Louis Vuitton</span><div class="clearfix"></div></a></li><li class="sc-marka-29"><a href="https://www.vezzalux.com/mach-mach"><span class="name">Mach Mach</span><div class="clearfix"></div></a></li><li class="sc-marka-30"><a href="https://www.vezzalux.com/miu-miu"><span class="name">Miu Miu</span><div class="clearfix"></div></a></li><li class="sc-marka-31"><a href="https://www.vezzalux.com/moncler"><span class="name">Moncler</span><div class="clearfix"></div></a></li><li class="sc-marka-32"><a href="https://www.vezzalux.com/montblanc"><span class="name">Montblanc</span><div class="clearfix"></div></a></li><li class="sc-marka-33"><a href="https://www.vezzalux.com/off-white"><span class="name">Off White</span><div class="clearfix"></div></a></li><li class="sc-marka-34"><a href="https://www.vezzalux.com/prada"><span class="name">Prada</span><div class="clearfix"></div></a></li><li class="sc-marka-35"><a href="https://www.vezzalux.com/premiata"><span class="name">Premiata</span><div class="clearfix"></div></a></li><li class="sc-marka-36"><a href="https://www.vezzalux.com/stella-c"><span class="name">Stella C.</span><div class="clearfix"></div></a></li><li class="sc-marka-37"><a href="https://www.vezzalux.com/the-row"><span class="name">The Row</span><div class="clearfix"></div></a></li><li class="sc-marka-38"><a href="https://www.vezzalux.com/ugg"><span class="name">Ugg</span><div class="clearfix"></div></a></li><li class="sc-marka-39"><a href="https://www.vezzalux.com/valentino"><span class="name">Valentino</span><div class="clearfix"></div></a></li><li class="sc-marka-40"><a href="https://www.vezzalux.com/versace"><span class="name">Versace</span><div class="clearfix"></div></a></li><li class="sc-marka-41"><a href="https://www.vezzalux.com/ysl"><span class="name">Ysl</span><div class="clearfix"></div></a></li><li class="sc-marka-42"><a href="https://www.vezzalux.com/zegna"><span class="name">Zegna</span><div class="clearfix"></div></a></li></ul></li></ul></div><div class="mobil-area-title"> 140 YARDIM MERKEZİ 141 </div><div class="mobil-area-2"><div class="short-link border-1"><a href="https://www.vezzalux.com/uye-giris"><i class="coreicon-user-3"></i> 142 GiriÅ Yap 143 </a></div><div class="short-link border-2"><a href="https://www.vezzalux.com/uye-ol"><i class="coreicon-user-4"></i> 144 Ãye Ol 145 </a></div><div class="short-link border-3"><a href="https://www.vezzalux.com/siparis-takip"><i class="coreicon-cart"></i> 146 SipariÅ Takip 147 </a></div><div class="short-link border-4"><a href="https://www.vezzalux.com/sss"><i class="coreicon-note"></i> 148 S.S.S 149 </a></div></div></div></div></nav><nav class="sidebar-user"><div class="title"> 150 Hesabım 151 <a href="javascript:;" class="btn-sidebar-user btn-close"><i class="fas fa-times-circle"></i></a></div><div class="scrollbar"><div class="login-menu"><a href="https://www.vezzalux.com/uye-giris"><i class="coreicon-user-5"></i> GiriÅ Yap</a><a href="https://www.vezzalux.com/uye-ol"><i class="coreicon-user-5"></i> Ãye Ol</a><a href="https://www.vezzalux.com/uye-giris?sayfa=sifre"><i class="coreicon-user-5"></i>Åifremi Unuttum</a></div><div class="title-alt"> 152 MüÅteri Hizmetleri 153 </div><div class="footer-links"><ul><li><a href="javascript:;"><i class="coreicon-megaphone mr-2"></i> 154 05336563444 155 </a></li><li><a href="/cdn-cgi/l/email-protection#eb82858d84ab9d8e91918a879e93c5888486"><i class="coreicon-envelope-1 mr-2"></i><span>
156 <span class="__cf_email__" data-cfemail="4b22252d240b3d2e31312a273e3365282426">[email protected]</span> 157 </span></a></li></ul></div><div class="title-alt"> 158 DiÄer 159 </div><div class="footer-links"><ul><li><a href="https://www.vezzalux.com/hakkimizda"> 160 Hakkımızda 161 </a></li><li><a href="https://www.vezzalux.com/iletisim"> 162 İletiÅim 163 </a></li><li><a href="https://www.vezzalux.com/gizlilik-sozlesmesi"> 164 Gizlilik SözleÅmesi 165 </a></li><li><a href="https://www.vezzalux.com/kullanici-sozlesmesi"> 166 Kullanıcı SözleÅmesi 167 </a></li><li><a href="https://www.vezzalux.com/cerez-politikasi"> 168 Ãerez Politikası 169 </a></li><li><a href="https://www.vezzalux.com/mesafeli-satis-sozlesmesi"> 170 Mesafeli SatıŠSözleÅmesi 171 </a></li><li><a href="https://www.vezzalux.com/sss"> 172 Sıkça Sorulan Sorular 173 </a></li><li><a href="https://www.vezzalux.com/siparis-takip"> 174 SipariÅ Takip 175 </a></li><li><a href="https://www.vezzalux.com/havale-bildirimleri"> 176 Havale Bildirimleri 177 </a></li></ul></div></div></nav></header><div class="mobile-header-space"></div><style> 178/* "Tümünü Gör" linki - alt menülerin en üstünde belirgin */ 179.menu-sub .menu-sub-all-link a{ 180 color:#c0392b !important; 181 font-weight:600 !important; 182 font-size:13px !important; 183 letter-spacing:.5px; 184 text-transform:uppercase; 185} 186.menu-sub .menu-sub-all-link a i{ 187 margin-right:6px; 188} 189 190/* Markalar alt menüsündeki marka linkleri */ 191.menu-sub .menu-marka-item a{ 192 font-weight:500; 193} 194 195/* ===== ALT MENà SCROLL DÃZENLEMESI ===== 196 İç içe scroll sorununu çözer. 197 Alt menü tek baÅına kaydırılır, dıŠscroll'u tetiklemez. */ 198.nav-mobile .menu-sub{ 199 height:100vh; 200 max-height:100vh; 201 overflow-y:auto; 202 overflow-x:hidden; 203 -webkit-overflow-scrolling:touch; 204 overscroll-behavior:contain; 205} 206 207/* "Geri" butonu sticky - üstte sabit kalsın */ 208.nav-mobile .menu-sub .menu-sub-title{ 209 position:sticky; 210 top:0; 211 background:#fff; 212 z-index:10; 213 border-bottom:1px solid #eee; 214} 215 216/* "Tümünü Gör" - geri butonunun hemen altında, normal akıÅta */ 217.nav-mobile .menu-sub .menu-sub-all-link{ 218 background:#fff; 219 border-bottom:1px solid #f5f5f5; 220} 221.nav-mobile .menu-sub .menu-sub-all-link a{ 222 display:block; 223 padding:14px 16px; 224} 225 226/* Scroll bar ince ve Åık */ 227.nav-mobile .menu-sub::-webkit-scrollbar{ 228 width:3px; 229} 230.nav-mobile .menu-sub::-webkit-scrollbar-track{ 231 background:transparent; 232} 233.nav-mobile .menu-sub::-webkit-scrollbar-thumb{ 234 background:#ddd; 235 border-radius:3px; 236} 237.nav-mobile .menu-sub::-webkit-scrollbar-thumb:hover{ 238 background:#aaa; 239} 240 241/* Marka resimleri küçük olsun */ 242.menu-sub .menu-marka-item img{ 243 max-width:24px; 244 max-height:24px; 245 margin-right:8px; 246 vertical-align:middle; 247 object-fit:contain; 248} 249 250/* Marka liste itemları daha rahat tıklanabilir */ 251.menu-sub .menu-marka-item a{ 252 display:flex; 253 align-items:center; 254 padding:12px 16px; 255} 256</style><ul class="nav-mobile"><li class="menu-container"><ul class="menu-sidebar"><div class="menu-sidebar-button"><span><i class="fas fa-bars mr-2"></i> 257 Menü 258 </span><i class="fas fa-times icon-close"></i></div><li><a href="https://www.vezzalux.com"> 259 Ana Sayfa 260 </a></li><li><input type="checkbox" id="sub-0" class="submenu-toggle"><label class="submenu-label" for="sub-0"> 261 ERKEK 262 </label><div class="arrow right">âº</div><ul class="menu-sub"><li class="menu-sub-title"><strong><label class="submenu-label" for="sub-0"><div class="arrow left">â¹</div> Geri 263 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/erkek"><i class="fas fa-th"></i> 264 Tümünü Gör 265 (ERKEK) 266 </a></li><li><input type="checkbox" id="sub-0-0" class="submenu-toggle"><label class="submenu-label" for="sub-0-0"> 267 Ayakkabı 268 </label><div class="arrow right">âº</div><ul class="menu-sub"><li class="menu-sub-title"><strong><label class="submenu-label" for="sub-0-0"><div class="arrow left">â¹</div> Geri 269 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/e-ayakkabi"><i class="fas fa-th"></i> 270 Tümünü Gör 271 (Ayakkabı) 272 </a></li><li><a href="https://www.vezzalux.com/erkek-loafer-erkek-loafer">Loafer</a></li><li><a href="https://www.vezzalux.com/erkek-sneaker-bogazli-erkek-sneaker-bogazli">BoÄazlı Sneaker</a></li><li><a href="https://www.vezzalux.com/erkek-terlik-erkek-terlik">Terlik</a></li><li><a href="https://www.vezzalux.com/erkek-sneaker-erkek-sneaker-650">Sneaker</a></li><li><a href="https://www.vezzalux.com/erkek-bot-erkek-bot-4391">Bot</a></li></ul></li><li><a href="https://www.vezzalux.com/e-canta">Ãanta</a></li></ul></li><li><input type="checkbox" id="sub-1" class="submenu-toggle"><label class="submenu-label" for="sub-1"> 273 KADIN 274 </label><div class="arrow right">âº</div><ul class="menu-sub"><li class="menu-sub-title"><strong><label class="submenu-label" for="sub-1"><div class="arrow left">â¹</div> Geri 275 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/kadin"><i class="fas fa-th"></i> 276 Tümünü Gör 277 (KADIN) 278 </a></li><li><a href="https://www.vezzalux.com/k-canta">Ãanta</a></li><li><input type="checkbox" id="sub-1-1" class="submenu-toggle"><label class="submenu-label" for="sub-1-1"> 279 Ayakkabı 280 </label><div class="arrow right">âº</div><ul class="menu-sub"><li class="menu-sub-title"><strong><label class="submenu-label" for="sub-1-1"><div class="arrow left">â¹</div> Geri 281 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/k-ayakkabi"><i class="fas fa-th"></i> 282 Tümünü Gör 283 (Ayakkabı) 284 </a></li><li><a href="https://www.vezzalux.com/kadin-sneaker-kadin-sneaker">Sneaker</a></li><li><a href="https://www.vezzalux.com/kadin-terlik-kadin-terlik">Terlik</a></li><li><a href="https://www.vezzalux.com/kadin-babet-kadin-babet">
284Babet</a></li><li><a href="https://www.vezzalux.com/kadin-loafer-kadin-loafer">Loafer</a></li><li><a href="https://www.vezzalux.com/kadin-bot-kadin-bot">Bot</a></li><li><a href="https://www.vezzalux.com/kadin-topuklu-ayakkabi-kadin-topuklu-ayakkabi">Topuklu Ayakkabı</a></li><li><a href="https://www.vezzalux.com/kadin-sandalet-kadin-sandalet">Sandalet</a></li><li><a href="https://www.vezzalux.com/kadintopuklu-terlik-kadintopuklu-terlik">Topuklu Terlik</a></li><li><a href="https://www.vezzalux.com/kadin-yagmurluk-uzun-kadin-yagmurluk-uzun">YaÄmurluk Uzun</a></li><li><a href="https://www.vezzalux.com/kadin-yagmurluk-kisa-kadin-yagmurluk-kisa">YaÄmurluk Kısa</a></li><li><a href="https://www.vezzalux.com/kadin-sneaker-bogazli-kadin-sneaker-bogazli">BoÄazlı Sneaker</a></li><li><a href="https://www.vezzalux.com/kadin-kar-botu-kadin-kar-botu">Kar Botu</a></li><li><a href="https://www.vezzalux.com/kadin-topuklu-bot-kadin-topuklu-bot">Topuklu Bot</a></li><li><a href="https://www.vezzalux.com/sneaker-bogazli">Sneaker BoÄazlı</a></li></ul></li></ul></li><li><a href="https://www.vezzalux.com/yeni-sezon"> 285 YENİ SEZON 286 </a></li><li><a href="https://www.vezzalux.com/erkek-tek-kalanlar"> 287 FIRSAT ÃRÃNLERİ 288 </a></li><li class="menu-markalar-item"><input type="checkbox" id="sub-markalar" class="submenu-toggle"><label class="submenu-label" for="sub-markalar"> 289 Markalar 290 </label><div class="arrow right">âº</div><ul class="menu-sub"><li class="menu-sub-title"><strong><label class="submenu-label" for="sub-markalar"><div class="arrow left">â¹</div> Geri 291 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/markalar"><i class="fas fa-th"></i> 292 Tümünü Gör (Markalar) 293 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/adidas"> 294 Adidas 295 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/alaia"> 296 Alaia 297 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/alexander-mcqueen"> 298 Alexander Mcqueen 299 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/amina-muaddi"> 300 Amina Muaddi 301 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/amiri"> 302 Amiri 303 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/aquazzura"> 304 Aquazzura 305 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/balenciaga"> 306 Balenciaga 307 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/balmain"> 308 Balmain 309 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/bottega-veneta"> 310 Bottega Veneta 311 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/brunnella-cucinelli"> 312 Brunnella Cucinelli 313 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/celine"> 314 Celine 315 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/chanel"> 316 Chanel 317 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/chloe"> 318 Chloe 319 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/christian-louboutin"> 320 Christian Louboutin 321 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dior"> 322 Dior 323 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dolce-gabbana"> 324 Dolce Gabbana 325 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dsq2"> 326 Dsq2 327 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/fendi"> 328 Fendi 329 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ferragamo"> 330 Ferragamo 331 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/givenchy"> 332 Givenchy 333 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/golden-goose"> 334 Golden Goose 335 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/goyard"> 336 Goyard 337 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/gucci"> 338 Gucci 339 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/hermes"> 340 Hermes 341 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/jimmy-choo"> 342 Jimmy Choo 343 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/loewe"> 344 Loewe 345 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/lora-piana"> 346 Lora piana 347 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/louis-vuitton"> 348 Louis Vuitton 349 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/mach-mach"> 350 Mach Mach 351 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/miu-miu"> 352 Miu Miu 353 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/moncler"> 354 Moncler 355 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/montblanc"> 356 Montblanc 357 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/off-white"> 358 Off White 359 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/prada"> 360 Prada 361 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/premiata"> 362 Premiata 363 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/stella-c"> 364 Stella C. 365 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/the-row"> 366 The Row 367 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ugg"> 368 Ugg 369 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/valentino"> 370 Valentino 371 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/versace"> 372 Versace 373 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ysl"> 374 Ysl 375 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/zegna"> 376 Zegna 377 </a></li></ul></li></ul></li></ul></div></div></div></div></div></div></section><section class="pattern-group pattern-group-t-0 pattern-group-p-categories "><div class="container"><div class="pattern-group-body"><div class="row"><div class="col-list col-12 d-block col-sm-12 d-sm-block col-md-12 d-md-block col-lg-12 d-lg-block col-xl-12 d-xl-block p-g-b-c-0"><div class="p-g-b-c-wrapper"><div class="p-g-b-c-inner"><div class="p-g-mod p-g-mod-t-19 p-g-mod-breadcrumb p-g-mod-trans "><div class="p-g-mod-body p-g-mod-body-p-0 "><nav aria-label="breadcrumb" class="breadcrumb-wrapper"><ol class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="https://www.vezzalux.com"><span itemprop='name'>Ana Sayfa</span><meta itemprop="position" content="1" /></a></li><li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="https://www.vezzalux.com/erkek"><span itemprop='name'>ERKEK</span><meta itemprop="position" content="2" /></a></li><li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="https://www.vezzalux.com/e-ayakkabi"><span itemprop='name'>Ayakkabı</span><meta itemprop="position" content="3" /></a></li></ol></nav></div></div></div></div></div></div></div></div></section><section class="pattern-group pattern-group-t-0 pattern-group-p-categories "><div class="container-md"><div class="pattern-group-body"><div class="row"><div class="col-list col-0 d-none col-sm-0 d-sm-none col-md-0 d-md-none col-lg-3 d-lg-block col-xl-3 d-xl-block p-g-b-c-0"><div class="p-g-b-c-wrapper"><div class="p-g-b-c-inner"><div class="p-g-mod p-g-mod-t-35 p-g-mod-t-cat-filter "><div class="p-g-mod-body "><div class="text-center"><div class="spinner-border text-secondary" role="status"><span class="sr-only">Yükleniyor...</span></div></div></div></div><div class="p-g-mod p-g-mod-t-21 p-g-mod-t-cat-filter p-g-mod-t-cat-display-0"><div class="p-g-mod-header "><div class="p-g-m-h-info"><div class="p-g-m-h-i-title"> 378 Alt Kategoriler 379 </div></div></div><div class="p-g-mod-body "><div class="category-filter-list cat-display-type-0" data-smart-cat-filter="sub-categories"></div></div></div><div class="p-g-mod p-g-mod-t-22 p-g-mod-t-cat-filter p-g-mod-t-cat-display-0 lux-size-global-filter-module"><div class="p-g-mod-header "><div class="p-g-m-h-info"><div class="p-g-m-h-i-title"> 380 Markalar 381 </div></div></div><div class="p-g-mod-body "><style> 382.lux-size-global-filter-module { 383 display: block !important; 384 width: 100%; 385} 386 387.lux-size-filter-group { 388 display: block; 389 width: 100%; 390 margin-bottom: 24px; 391} 392 393.lux-size-filter-title { 394 display: block; 395 margin-bottom: 12px; 396 font-size: 12px; 397 font-weight: 700; 398 color: #111; 399 letter-spacing: .8px; 400 text-transform: uppercase; 401} 402 403.lux-size-filter-group .category-filter-list { 404 display: block !important; 405 width: 100%; 406 visibility: visible !important; 407 opacity: 1 !important; 408} 409 410.lux-size-button-list { 411 display: flex; 412 flex-wrap: wrap; 413 gap: 8px; 414} 415 416.lux-size-btn { 417 display: inline-flex; 418 align-items: center; 419 justify-content: center; 420 min-height: 34px; 421 min-width: 42px; 422 padding: 7px 14px; 423 border: 1px solid #ddd; 424 border-radius: 20px; 425 background: #fff; 426 color: #111; 427 font-size: 13px; 428 font-weight: 500; 429 line-height: 1; 430 cursor: pointer; 431 margin: 0; 432 transition: all .2s ease; 433 text-decoration: none !important; 434} 435 436.lux-size-btn:hover { 437 border-color: #111; 438 color: #111; 439} 440 441.lux-size-btn.is-active { 442 background: #111; 443 border-color: #111; 444 color: #fff !important; 445} 446 447.lux-size-loading { 448 display: none; 449 font-size: 12px; 450 color: #999; 451 padding: 6px 0; 452} 453</style><div class="lux-size-filter-group"><div class="category-filter-list" data-smart-cat-filter="brands"></div></div><div class="lux-size-filter-group" id="luxSizeGlobalFilter"><div class="lux-size-filter-title">Bedenler</div><div class="lux-size-button-list"><a href="javascript:;" class="lux-size-btn is-active" data-size-filter=""> 454 Tümü 455 </a><a href="javascript:;" 456 class="lux-size-btn" 457 data-size-filter="36"> 458 36 459 </a><a href="javascript:;" 460 class="lux-size-btn" 461 data-size-filter="37"> 462 37 463 </a><a href="javascript:;" 464 class="lux-size-btn" 465 data-size-filter="38"> 466 38 467 </a><a href="javascript:;" 468 class="lux-size-btn" 469 data-size-filter="39"> 470 39 471 </a><a href="javascript:;" 472 class="lux-size-btn" 473 data-size-filter="40"> 474 40 475 </a><a href="javascript:;" 476 class="lux-size-btn" 477 data-size-filter="41"> 478 41 479 </a><a href="javascript:;" 480 class="lux-size-btn" 481 data-size-filter="42"> 482 42 483 </a><a href="javascript:;" 484 class="lux-size-btn" 485 data-size-filter="43"> 486 43 487 </a><a href="javascript:;" 488 class="lux-size-btn" 489 data-size-filter="44"> 490 44 491 </a><a href="javascript:;" 492 class="lux-size-btn" 493 data-size-filter="45"> 494 45 495 </a><a href="javascript:;" 496 class="lux-size-btn" 497 data-size-filter="46"> 498 46 499 </a></div><div class="lux-size-loading" id="luxSizeLoading"> 500 Ãrünler filtreleniyor... 501 </div></div>
vendor: 108 bytes, line 501
501<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
501<script> 502document.addEventListener('DOMContentLoaded', function(){ 503 504 var filterBox = document.getElementById('luxSizeGlobalFilter'); 505 if(!filterBox) return; 506 507 var loadingEl = document.getElementById('luxSizeLoading'); 508 509 var PRODUCTS_PER_PAGE = 24; 510 var PAGE_CONCURRENT_LIMIT = 4; 511 var VARIANT_CONCURRENT_LIMIT = 8; 512 var MAX_PAGES_SAFE = 120; 513 514 var productMap = {}; 515 var productQueue = []; 516 var activeSizes = []; 517 var currentCustomPage = 1; 518 var allPagesLoaded = false; 519 var variantsLoaded = false; 520 var requestRunning = false; 521 522 function clean(v){ 523 return String(v || '').replace(/\s+/g, ' ').trim(); 524 } 525 526 function norm(v){ 527 return clean(v).toLocaleUpperCase('tr-TR'); 528 } 529 530 function getUrlSizes(){ 531 var url = new URL(window.location.href); 532 var raw = url.searchParams.get('bedenler') || ''; 533 534 if(!raw) return []; 535 536 return raw.split(',') 537 .map(function(v){ return norm(v); }) 538 .filter(function(v){ return v !== ''; }); 539 } 540 541 function setUrlSizes(sizes){ 542 var url = new URL(window.location.href); 543 544 if(sizes && sizes.length){ 545 url.searchParams.set('bedenler', sizes.join(',')); 546 } else { 547 url.searchParams.delete('bedenler'); 548 } 549 550 url.searchParams.delete('sayfa'); 551 url.searchParams.delete('page'); 552 553 window.history.replaceState({}, '', url.toString()); 554 } 555 556 function getGrid(){ 557 return document.getElementById('luxProductGrid'); 558 } 559 560 function getProductsArea(){ 561 return document.getElementById('luxCategoryProductsArea'); 562 } 563 564 function getNativePagination(){ 565 return document.getElementById('luxNativePagination'); 566 } 567 568 function getCustomPagination(){ 569 return document.getElementById('luxCustomPagination'); 570 } 571 572 function getCustomEmpty(){ 573 return document.getElementById('luxCustomEmpty'); 574 } 575 576 function getPerPage(){ 577 var area = getProductsArea(); 578 var value = area ? parseInt(area.getAttribute('data-lux-per-page') || '', 10) : 0; 579 580 if(!isNaN(value) && value > 0){ 581 return value; 582 } 583 584 return PRODUCTS_PER_PAGE; 585 } 586 587 function activateLuxImages(scope){ 588 scope = scope || document; 589 590 scope.querySelectorAll('img').forEach(function(img){ 591 var dataSrc = 592 img.getAttribute('data-src') || 593 img.getAttribute('data-original') || 594 img.getAttribute('data-lazy') || 595 img.getAttribute('data-lazy-src') || 596 img.getAttribute('data-echo'); 597 598 var dataSrcset = img.getAttribute('data-srcset'); 599 600 if(dataSrcset){ 601 img.setAttribute('srcset', dataSrcset); 602 img.removeAttribute('data-srcset'); 603 } 604 605 if(dataSrc){ 606 img.setAttribute('src', dataSrc); 607 608 img.removeAttribute('data-src'); 609 img.removeAttribute('data-original'); 610 img.removeAttribute('data-lazy'); 611 img.removeAttribute('data-lazy-src'); 612 img.removeAttribute('data-echo'); 613 614 img.classList.remove('lazyload'); 615 img.classList.remove('lazy'); 616 img.classList.add('lazyloaded'); 617 } 618 619 if(img.getAttribute('loading') === 'lazy'){ 620 img.setAttribute('loading', 'eager'); 621 } 622 }); 623 624 if(window.lazyLoadInstance && typeof window.lazyLoadInstance.update === 'function'){ 625 try { 626 window.lazyLoadInstance.update(); 627 } catch(e){} 628 } 629 630 if(typeof LazyLoad !== 'undefined'){ 631 try { 632 new LazyLoad(); 633 } catch(e){} 634 } 635 636 if(typeof lazyLoadInstance !== 'undefined' && lazyLoadInstance.update){ 637 try { 638 lazyLoadInstance.update(); 639 } catch(e){} 640 } 641 } 642 643 function getCacheKey(link){ 644 return 'lux_global_size_cache_v2_' + encodeURIComponent(link); 645 } 646 647 function getCachedSizes(link){ 648 try { 649 var raw = sessionStorage.getItem(getCacheKey(link)); 650 if(!raw) return null; 651 652 var data = JSON.parse(raw); 653 if(!data || !data.time || !data.sizes) return null; 654 655 var ttl = 30 * 60 * 1000; 656 657 if(Date.now() - data.time > ttl) return null; 658 659 return data.sizes; 660 } catch(e){ 661 return null; 662 } 663 } 664
665 function setCachedSizes(link, sizes){ 666 try { 667 sessionStorage.setItem(getCacheKey(link), JSON.stringify({ 668 time: Date.now(), 669 sizes: sizes 670 })); 671 } catch(e){} 672 } 673 674 function isSoldOut(el){ 675 if(!el) return false; 676 677 var cls = String(el.className || '').toLowerCase(); 678 679 if(cls.indexOf('sold-out') !== -1) return true; 680 if(cls.indexOf('soldout') !== -1) return true; 681 if(cls.indexOf('sold_out') !== -1) return true; 682 if(cls.indexOf('disabled') !== -1) return true; 683 if(cls.indexOf('stoksuz') !== -1) return true; 684 if(cls.indexOf('out-of-stock') !== -1) return true; 685 if(cls.indexOf('outstock') !== -1) return true; 686 if(cls.indexOf('stok-yok') !== -1) return true; 687 if(cls.indexOf('pasif') !== -1) return true; 688 if(cls.indexOf('passive') !== -1) return true; 689 690 if(el.hasAttribute('disabled')) return true; 691 if(el.getAttribute('aria-disabled') === 'true') return true; 692 if(el.getAttribute('data-in-stock') === '0') return true; 693 if(el.getAttribute('data-in-stock') === 'false') return true; 694 if(el.getAttribute('data-stokta-var-mi') === '0') return true; 695 if(el.getAttribute('data-stokta-var-mi') === 'false') return true; 696 697 return false; 698 } 699 700 function isSizeTitle(v){ 701 v = norm(v); 702 703 return ( 704 v === 'BEDEN' || 705 v === 'BEDENLER' || 706 v === 'NUMARA' || 707 v === 'SIZE' || 708 v.indexOf('BEDEN') !== -1 || 709 v.indexOf('NUMARA') !== -1 || 710 v.indexOf('SIZE') !== -1 711 ); 712 } 713 714 function getProductWrapper(card){ 715 return card.closest('[data-lux-product-shell="1"]') || 716 card.closest('.col-list-p-v-1') || 717 card.closest('[class*="col-"]') || 718 card.parentElement; 719 } 720 721 function registerCard(card){ 722 var productId = clean(card.getAttribute('data-lux-card-id')); 723 var link = clean(card.getAttribute('data-lux-product-link')); 724 725 if(!productId || !link) return; 726 if(productMap[productId]) return; 727 728 var wrapper = getProductWrapper(card); 729 730 productMap[productId] = { 731 id: productId, 732 link: link, 733 card: card, 734 wrapper: wrapper, 735 sizes: [], 736 loaded: false 737 }; 738 739 productQueue.push({ 740 id: productId, 741 link: link 742 }); 743 } 744 745 function collectCurrentProducts(){ 746 document.querySelectorAll('#luxProductGrid .card-product[data-lux-card-id][data-lux-product-link], .card-product[data-lux-card-id][data-lux-product-link]').forEach(function(card){ 747 registerCard(card); 748 }); 749 } 750 751 function buildPageUrl(pageNo){ 752 var url = new URL(window.location.href); 753 754 url.searchParams.set('sayfa', pageNo); 755 url.searchParams.delete('page'); 756 url.searchParams.delete('bedenler'); 757 758 return url.toString(); 759 } 760 761 function fetchPage(pageNo){ 762 return fetch(buildPageUrl(pageNo), { 763 method: 'GET', 764 credentials: 'same-origin', 765 headers: { 766 'Accept': 'text/html' 767 } 768 }) 769 .then(function(r){ 770 return r.text(); 771 }) 772 .then(function(html){ 773 var doc = new DOMParser().parseFromString(html, 'text/html'); 774 var shells = doc.querySelectorAll('#luxProductGrid [data-lux-product-shell="1"]'); 775 776 if(!shells.length){ 777 shells = doc.querySelectorAll('.col-list-p-v-1'); 778 } 779 780 if(!shells.length) return 0; 781 782 var grid = getGrid(); 783 if(!grid) return 0; 784 785 var frag = document.createDocumentFragment(); 786 var added = 0; 787 788 shells.forEach(function(shell){ 789 var card = shell.querySelector('.card-product[data-lux-card-id][data-lux-product-link]'); 790 if(!card) return; 791 792 var productId = clean(card.getAttribute('data-lux-card-id')); 793 if(!productId || productMap[productId]) return; 794 795 var clone = shell.cloneNode(true); 796 797 clone.style.display = 'none'; 798 clone.setAttribute('data-lux-product-shell', '1'); 799 clone.setAttribute('data-lux-added-page', pageNo); 800 801 frag.appendChild(clone); 802 added++; 803 }); 804 805 if(frag.childNodes.length){ 806 grid.appendChild(frag); 807 808 grid.querySelectorAll('[data-lux-added-page="' + pageNo + '"]').forEach(function(shell){ 809 activateLuxImages(shell); 810 }); 811 812 grid.querySelectorAll('[data-lux-added-page="' + pageNo + '"] .card-product[data-lux-card-id][data-lux-product-link]').forEach(function(card){ 813 registerCard(card); 814 }); 815 } 816 817 return added; 818 }) 819 .catch(function(){ 820 return 0; 821 }); 822 } 823 824 function runLimited(items, limit, worker, done){ 825 var index = 0; 826 var active = 0; 827 var finished = 0; 828 var total = items.length; 829 830 if(total === 0){ 831 done(); 832 return; 833 } 834 835 function next(){ 836 while(active < limit && index < total){ 837 var item = items[index++]; 838 active++; 839 840 worker(item).then(function(){ 841 active--; 842 finished++; 843 844 if(finished >= total){ 845 done(); 846 } else { 847 next(); 848 } 849 }); 850 } 851 } 852 853 next(); 854 } 855 856 function fetchAllPages(done){ 857 if(allPagesLoaded){ 858 done(); 859 return; 860 } 861 862 var area = getProductsArea(); 863 var twigTotalPage = area ? parseInt(area.getAttribute('data-lux-total-page') || '1', 10) : 1; 864 865 if(!isNaN(twigTotalPage) && twigTotalPage > 1){ 866 var pages = []; 867 868 for(var p = 2; p <= twigTotalPage; p++){ 869 pages.push(p); 870 } 871 872 runLimited(pages, PAGE_CONCURRENT_LIMIT, fetchPage, function(){ 873 allPagesLoaded = true; 874 done(); 875 }); 876 877 return; 878 } 879 880 var nextPage = 2; 881 var stop = false;
882 883 function batch(){ 884 if(stop || nextPage > MAX_PAGES_SAFE){ 885 allPagesLoaded = true; 886 done(); 887 return; 888 } 889 890 var pages = []; 891 892 for(var i = 0; i < PAGE_CONCURRENT_LIMIT; i++){ 893 pages.push(nextPage); 894 nextPage++; 895 } 896 897 Promise.all(pages.map(fetchPage)).then(function(results){ 898 var added = 0; 899 900 results.forEach(function(count){ 901 added += parseInt(count || 0, 10); 902 }); 903 904 if(added <= 0){ 905 stop = true; 906 allPagesLoaded = true; 907 done(); 908 } else { 909 batch(); 910 } 911 }).catch(function(){ 912 allPagesLoaded = true; 913 done(); 914 }); 915 } 916 917 batch(); 918 } 919 920 function parseSizesFromHtml(html){ 921 var doc = new DOMParser().parseFromString(html, 'text/html'); 922 var sizes = []; 923 924 var variantBox = doc.querySelector('.variant-box'); 925 if(!variantBox) return sizes; 926 927 var variants = variantBox.querySelectorAll('.variant, li[data-variant-baslik], [data-variant-baslik]'); 928
929 variants.forEach(function(li, index){ 930 var title = ''; 931 932 var nameEl = li.querySelector('.name'); 933 934 if(nameEl){ 935 title = clean(nameEl.textContent.replace(':', '')); 936 } 937 938 if(!title){ 939 title = clean( 940 li.getAttribute('data-variant-baslik') || 941 li.getAttribute('data-variant-name') || 942 li.getAttribute('data-variant-title') || 943 '' 944 ); 945 } 946 947 var shouldRead = isSizeTitle(title); 948 949 if(!shouldRead && index === 0){ 950 shouldRead = true; 951 } 952 953 if(!shouldRead) return; 954 955 var optionLinks = li.querySelectorAll('.options a[data-variant-value], .options a, a[data-variant-value]'); 956 957 if(optionLinks.length > 0){ 958 optionLinks.forEach(function(a){ 959 if(isSoldOut(a)) return; 960 961 var val = clean( 962 a.getAttribute('data-variant-value') || 963 a.getAttribute('data-value') || 964 a.textContent 965 ); 966 967 if(val && sizes.indexOf(val) === -1){ 968 sizes.push(val); 969 } 970 }); 971 } else { 972 var select = li.querySelector('select'); 973 974 if(select){ 975 select.querySelectorAll('option').forEach(function(opt){ 976 if(!opt.value) return; 977 if(isSoldOut(opt)) return; 978 979 var val = clean( 980 opt.getAttribute('data-variant-value') || 981 opt.value || 982 opt.textContent 983 ); 984 985 if(val && sizes.indexOf(val) === -1){ 986 sizes.push(val); 987 } 988 }); 989 } 990 } 991 }); 992 993 return sizes; 994 } 995 996 function fetchProductSizes(item){ 997 var product = productMap[item.id]; 998 999 if(!product){ 1000 return Promise.resolve([]); 1001 } 1002 1003 if(product.loaded){ 1004 return Promise.resolve(product.sizes); 1005 } 1006 1007 var cached = getCachedSizes(item.link); 1008 1009 if(cached){ 1010 product.sizes = cached; 1011 product.loaded = true; 1012 product.card.setAttribute('data-lux-stock-sizes', cached.join('|')); 1013 1014 return Promise.resolve(cached); 1015 } 1016 1017 return fetch(item.link, { 1018 method: 'GET', 1019 credentials: 'same-origin', 1020 headers: { 1021 'Accept': 'text/html' 1022 } 1023 }) 1024 .then(function(r){ 1025 return r.text(); 1026 }) 1027 .then(function(html){ 1028 var sizes = parseSizesFromHtml(html); 1029 1030 product.sizes = sizes; 1031 product.loaded = true; 1032 product.card.setAttribute('data-lux-stock-sizes', sizes.join('|')); 1033 1034 setCachedSizes(item.link, sizes); 1035 1036 return sizes; 1037 }) 1038 .catch(function(){ 1039 product.sizes = []; 1040 product.loaded = true; 1041 product.card.setAttribute('data-lux-stock-sizes', ''); 1042 1043 return []; 1044 }); 1045 } 1046 1047 function fetchAllVariants(done){ 1048 if(variantsLoaded){ 1049 done(); 1050 return; 1051 } 1052 1053 var unique = []; 1054 var seen = {}; 1055 1056 productQueue.forEach(function(item){ 1057 if(!seen[item.id]){ 1058 seen[item.id] = true; 1059 unique.push(item); 1060 } 1061 }); 1062 1063 productQueue = unique; 1064 1065 runLimited(productQueue, VARIANT_CONCURRENT_LIMIT, fetchProductSizes, function(){ 1066 variantsLoaded = true; 1067 done(); 1068 }); 1069 } 1070 1071 function getFilteredProducts(){ 1072 var list = []; 1073 1074 Object.keys(productMap).forEach(function(productId){ 1075 var product = productMap[productId]; 1076 1077 if(!activeSizes.length){ 1078 list.push(product); 1079 return; 1080 } 1081 1082 var hasSize = false;
1083 1084 product.sizes.forEach(function(size){ 1085 if(activeSizes.indexOf(norm(size)) !== -1){ 1086 hasSize = true; 1087 } 1088 }); 1089 1090 if(hasSize){ 1091 list.push(product); 1092 } 1093 }); 1094 1095 return list; 1096 } 1097 1098 function setPaginationMode(){ 1099 var area = getProductsArea(); 1100 var nativePagination = getNativePagination(); 1101 var customPagination = getCustomPagination(); 1102 1103 if(activeSizes.length){ 1104 document.body.classList.add('lux-size-filter-active'); 1105 1106 if(area){ 1107 area.classList.add('is-lux-filter-active'); 1108 } 1109 1110 if(nativePagination){ 1111 nativePagination.style.display = 'none'; 1112 } 1113 1114 if(customPagination){ 1115 customPagination.style.display = 'flex'; 1116 } 1117 } else { 1118 document.body.classList.remove('lux-size-filter-active'); 1119 1120 if(area){ 1121 area.classList.remove('is-lux-filter-active'); 1122 } 1123 1124 if(nativePagination){ 1125 nativePagination.style.display = ''; 1126 } 1127 1128 if(customPagination){ 1129 customPagination.style.display = 'none'; 1130 customPagination.innerHTML = ''; 1131 } 1132 } 1133 } 1134 1135 function resetToNativeMode(){ 1136 setPaginationMode(); 1137 1138 Object.keys(productMap).forEach(function(productId){ 1139 var product = productMap[productId]; 1140 1141 if(!product.wrapper) return; 1142 1143 if(product.wrapper.getAttribute('data-lux-added-page')){ 1144 product.wrapper.style.display = 'none'; 1145 } else { 1146 product.wrapper.style.display = ''; 1147 activateLuxImages(product.wrapper); 1148 } 1149 }); 1150 1151 var emptyBox = getCustomEmpty(); 1152 1153 if(emptyBox){ 1154 emptyBox.style.display = 'none'; 1155 } 1156 } 1157 1158 function renderFilteredProducts(){ 1159 setPaginationMode(); 1160 1161 if(!activeSizes.length){ 1162 resetToNativeMode(); 1163 return; 1164 } 1165 1166 var products = getFilteredProducts(); 1167 var total = products.length; 1168 var perPage = getPerPage(); 1169 var totalPages = Math.max(1, Math.ceil(total / perPage)); 1170 var emptyBox = getCustomEmpty(); 1171 1172 if(currentCustomPage < 1){ 1173 currentCustomPage = 1; 1174 } 1175 1176 if(currentCustomPage > totalPages){ 1177 currentCustomPage = totalPages; 1178 } 1179 1180 Object.keys(productMap).forEach(function(productId){ 1181 var product = productMap[productId]; 1182 1183 if(product.wrapper){ 1184 product.wrapper.style.display = 'none'; 1185 } 1186 }); 1187 1188 if(total === 0){ 1189 if(emptyBox){ 1190 emptyBox.style.display = 'block'; 1191 } 1192 1193 renderCustomPagination(totalPages); 1194 return; 1195 } 1196 1197 if(emptyBox){ 1198 emptyBox.style.display = 'none'; 1199 } 1200 1201 var start = (currentCustomPage - 1) * perPage; 1202 var end = start + perPage; 1203 1204 products.slice(start, end).forEach(function(product){ 1205 if(product.wrapper){ 1206 product.wrapper.style.display = ''; 1207 activateLuxImages(product.wrapper); 1208 } 1209 }); 1210 1211 renderCustomPagination(totalPages); 1212 } 1213 1214 function paginationNumbers(current, total){ 1215 var arr = []; 1216 var delta = 2; 1217 1218 if(total <= 7){ 1219 for(var i = 1; i <= total; i++){ 1220 arr.push(i); 1221 } 1222 1223 return arr; 1224 } 1225 1226 arr.push(1); 1227 1228 if(current - delta > 2){ 1229 arr.push('...'); 1230 } 1231 1232 for(var j = Math.max(2, current - delta); j <= Math.min(total - 1, current + delta); j++){ 1233 arr.push(j); 1234 } 1235 1236 if(current + delta < total - 1){ 1237 arr.push('...'); 1238 } 1239 1240 arr.push(total); 1241 1242 return arr; 1243 } 1244 1245 function renderCustomPagination(totalPages){ 1246 var pagination = getCustomPagination(); 1247 1248 if(!pagination) return; 1249 1250 pagination.innerHTML = ''; 1251 1252 if(!activeSizes.length || totalPages <= 1){ 1253 pagination.style.display = 'none'; 1254 return; 1255 } 1256 1257 pagination.style.display = 'flex'; 1258 1259 function makeButton(label, disabled, active, callback){ 1260 var btn = document.createElement('button'); 1261 1262 btn.type = 'button'; 1263 btn.innerHTML = label; 1264 btn.disabled = !!disabled; 1265 1266 if(active){ 1267 btn.classList.add('is-active'); 1268 } 1269 1270 if(!disabled && typeof callback === 'function'){ 1271 btn.addEventListener('click', callback); 1272 } 1273 1274 return btn; 1275 } 1276 1277 pagination.appendChild(makeButton('â¹', currentCustomPage <= 1, false, function(){ 1278 currentCustomPage--; 1279 renderFilteredProducts(); 1280 scrollToProducts(); 1281 })); 1282
1283 paginationNumbers(currentCustomPage, totalPages).forEach(function(page){ 1284 if(page === '...'){ 1285 var span = document.createElement('span'); 1286 span.textContent = '...'; 1287 pagination.appendChild(span); 1288 } else { 1289 pagination.appendChild(makeButton(page, false, page === currentCustomPage, function(){ 1290 currentCustomPage = page; 1291 renderFilteredProducts(); 1292 scrollToProducts(); 1293 })); 1294 } 1295 }); 1296 1297 pagination.appendChild(makeButton('âº', currentCustomPage >= totalPages, false, function(){ 1298 currentCustomPage++; 1299 renderFilteredProducts(); 1300 scrollToProducts(); 1301 })); 1302 } 1303 1304 function scrollToProducts(){ 1305 var grid = getGrid(); 1306 1307 if(grid){ 1308 grid.scrollIntoView({ 1309 behavior: 'smooth', 1310 block: 'start' 1311 }); 1312 } 1313 } 1314 1315 function updateButtons(){ 1316 document.querySelectorAll('.lux-size-btn').forEach(function(btn){ 1317 var size = norm(btn.getAttribute('data-size-filter') || ''); 1318 1319 if(size === ''){ 1320 btn.classList.toggle('is-active', activeSizes.length === 0); 1321 } else { 1322 btn.classList.toggle('is-active', activeSizes.indexOf(size) !== -1); 1323 } 1324 }); 1325 } 1326 1327 function startGlobalFilter(){ 1328 if(requestRunning) return; 1329 1330 if(!activeSizes.length){ 1331 resetToNativeMode(); 1332 return; 1333 } 1334 1335 requestRunning = true; 1336 1337 if(loadingEl){ 1338 loadingEl.style.display = 'block'; 1339 } 1340 1341 collectCurrentProducts(); 1342 1343 fetchAllPages(function(){ 1344 fetchAllVariants(function(){ 1345 requestRunning = false; 1346 1347 if(loadingEl){ 1348 loadingEl.style.display = 'none'; 1349 } 1350 1351 renderFilteredProducts(); 1352 }); 1353 }); 1354 } 1355 1356 function bindButtons(){ 1357 document.querySelectorAll('.lux-size-btn').forEach(function(btn){ 1358 btn.onclick = function(e){ 1359 e.preventDefault(); 1360 1361 if(requestRunning) return; 1362 1363 var selected = norm(this.getAttribute('data-size-filter') || ''); 1364 1365 if(selected === ''){ 1366 activeSizes = []; 1367 } else { 1368 var index = activeSizes.indexOf(selected); 1369 1370 if(index === -1){ 1371 activeSizes.push(selected); 1372 } else { 1373 activeSizes.splice(index, 1); 1374 } 1375 } 1376 1377 currentCustomPage = 1; 1378 1379 setUrlSizes(activeSizes); 1380 updateButtons(); 1381 startGlobalFilter(); 1382 }; 1383 }); 1384 } 1385 1386 function init(){ 1387 activeSizes = getUrlSizes(); 1388 1389 collectCurrentProducts(); 1390 bindButtons(); 1391 updateButtons(); 1392 activateLuxImages(document); 1393 1394 if(activeSizes.length){ 1395 startGlobalFilter(); 1396 } else { 1397 resetToNativeMode(); 1398 } 1399 } 1400 1401 init(); 1402 1403}); 1404</script>
1404</div></div><div class="p-g-mod p-g-mod-t-24 p-g-mod-t-cat-filter p-g-mod-t-cat-display-0"><div class="p-g-mod-header "><div class="p-g-m-h-info"><div class="p-g-m-h-i-title"> 1405 Fiyat Aralıkları 1406 </div></div></div><div class="p-g-mod-body "><div class="category-price-inputs" data-smart-cat-filter="price-inputs"><input class="form-control number-input" name="smart-cat-min-price" 1407 data-smart-cat-search="1" placeholder="En Az" 1408 value="" /><span class="seperator">-</span><input class="form-control number-input" name="smart-cat-max-price" 1409 data-smart-cat-search="1" placeholder="En Ãok" 1410 value=""/><button class="btn" type="button" data-smart-cat-price-button><i class="fas fa-arrow-right"></i></button></div><div class="category-filter-list" data-smart-cat-filter="price-ranges"></div></div></div><div class="p-g-mod p-g-mod-t-25 p-g-mod-t-cat-filter p-g-mod-t-cat-display-0"><div class="p-g-mod-header "><div class="p-g-m-h-info"><div class="p-g-m-h-i-title"> 1411 Listeleme 1412 </div></div></div><div class="p-g-mod-body "><div class="category-filter-list"><div class="list-wrap" data-simplebar data-simplebar-auto-hide="false"><ul class="list"><li><div class="lag-checkbox"><input id="cat-filter-list-stoktakiler" name="smart-cat-list" value="stoktakiler" data-smart-cat-search="1" type="radio" ><label for="cat-filter-list-stoktakiler">Sadece stoktakileri göster</label><span></span></div></li><li><div class="lag-checkbox"><input id="cat-filter-list-uk" name="smart-cat-list" value="uk" data-smart-cat-search="1" type="radio" ><label for="cat-filter-list-uk">Ãcretsiz Kargo</label><span></span></div></li></ul></div></div></div></div><div class="p-g-mod p-g-mod-t-26 p-g-mod-t-cat-display-0 cat-lux-action-module"><div class="p-g-mod-body p-g-mod-body-p-0 "><style> 1413.cat-lux-action-module { 1414 display: block !important; 1415 visibility: visible !important; 1416 opacity: 1 !important; 1417} 1418 1419.cat-lux-filter-actions { 1420 width: 100%; 1421 display: flex !important; 1422 align-items: center; 1423 justify-content: space-between; 1424 gap: 10px; 1425 padding: 14px 0; 1426 margin: 10px 0 16px; 1427 position: relative; 1428 z-index: 50; 1429 visibility: visible !important; 1430 opacity: 1 !important; 1431} 1432 1433.cat-lux-filter-btn { 1434 min-height: 42px; 1435 padding: 11px 18px; 1436 border-radius: 4px; 1437 border: 1px solid #111; 1438 font-size: 13px; 1439 font-weight: 600; 1440 line-height: 1.2; 1441 text-decoration: none !important; 1442 display: inline-flex !important; 1443 align-items: center; 1444 justify-content: center; 1445 gap: 8px; 1446 cursor: pointer; 1447 font-family: inherit; 1448 transition: all .2s ease; 1449 visibility: visible !important; 1450 opacity: 1 !important; 1451 white-space: nowrap; 1452} 1453 1454.cat-lux-filter-btn-clear { 1455 background: #fff; 1456 color: #111 !important; 1457} 1458 1459.cat-lux-filter-btn-clear:hover { 1460 background: #111; 1461 color: #fff !important; 1462} 1463 1464.cat-lux-filter-btn-show { 1465 background: #111; 1466 color: #fff !important; 1467} 1468 1469.cat-lux-filter-btn-show:hover { 1470 background: #333; 1471 color: #fff !important; 1472} 1473 1474.cat-lux-filter-btn svg { 1475 width: 15px; 1476 height: 15px; 1477 stroke: currentColor; 1478 fill: none; 1479 stroke-width: 2; 1480} 1481 1482@media (min-width: 992px) { 1483 .cat-lux-filter-btn-show { 1484 display: none !important; 1485 } 1486 1487 .cat-lux-filter-actions { 1488 justify-content: flex-start; 1489 } 1490} 1491 1492@media (max-width: 991px) { 1493 .cat-lux-filter-actions { 1494 position: sticky; 1495 bottom: 0; 1496 left: 0; 1497 right: 0; 1498 background: #fff; 1499 padding: 12px; 1500 margin: 0; 1501 z-index: 9999; 1502 box-shadow: 0 -8px 24px rgba(0,0,0,.08); 1503 border-top: 1px solid #eee; 1504 } 1505 1506 .cat-lux-filter-btn { 1507 flex: 1; 1508 width: 50%; 1509 min-height: 46px; 1510 font-size: 13px; 1511 } 1512} 1513</style><div class="cat-lux-filter-actions"><a href="https://www.vezzalux.com/e-ayakkabi" class="cat-lux-filter-btn cat-lux-filter-btn-clear"><svg viewBox="0 0 24 24">
1513<path d="M18 6L6 18" stroke-linecap="round" stroke-linejoin="round"></path><path d="M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"></path></svg> 1514 Seçimleri Temizle 1515 </a><a href="javascript:;" 1516 onclick="if(typeof hideSmartCategoryPopup === 'function'){ hideSmartCategoryPopup(); } return false;" 1517 class="cat-lux-filter-btn cat-lux-filter-btn-show"> 1518 Ãrünleri Listele 1519 <svg viewBox="0 0 24 24"><path d="M5 12h14" stroke-linecap="round" stroke-linejoin="round"></path><path d="M13 6l6 6-6 6" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></div></div></div></div></div></div><div class="col-list col-12 d-block col-sm-12 d-sm-block col-md-12 d-md-block col-lg-9 d-lg-block col-xl-9 d-xl-block p-g-b-c-1"><div class="p-g-b-c-wrapper"><div class="p-g-b-c-inner"><div class="p-g-mod p-g-mod-t-20 p-g-mod-pagination "><div class="p-g-mod-header "><div class="p-g-m-h-info"><h1 class="p-g-m-h-i-title"> 1520 Ayakkabı 1521 </h1></div></div><div class="p-g-mod-body p-g-mod-body-p-0 "><div class="d-none d-lg-block"><div class="category-filter-order"><div class="list-wrap"><ul class="list"><li><select class="form-control form-select category-filter-order-desktop" 1522 onchange="catFilterOrder(this)"><option selected value="cok-satanlar"> 1523 En çok satanlar 1524 </option><option value="en-yeniler"> 1525 En yeniler 1526 </option><option value="a-z"> 1527 Ãrün adı (A-Z) 1528 </option><option value="z-a"> 1529 Ãrün adı (Z-A) 1530 </option><option value="en-dusuk-fiyat"> 1531 En düÅük fiyat 1532 </option><option value="en-yuksek-fiyat"> 1533 En yüksek fiyat 1534 </option><option value="en-cok-oylanan"> 1535 En çok oylananlar 1536 </option></select><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1537 id="cat-filter-order-cok-satanlar" 1538 name="smart-cat-siralama" 1539 value="cok-satanlar" 1540 data-search-value="cok-satanlar" 1541 data-smart-cat-search="1" 1542 type="radio" 1543 checked 1544 ><label for="cat-filter-order-cok-satanlar"> 1545 En çok satanlar 1546 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1547 id="cat-filter-order-en-yeniler" 1548 name="smart-cat-siralama" 1549 value="en-yeniler" 1550 data-search-value="en-yeniler" 1551 data-smart-cat-search="1" 1552 type="radio" 1553 1554 ><label for="cat-filter-order-en-yeniler"> 1555 En yeniler 1556 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1557 id="cat-filter-order-a-z" 1558 name="smart-cat-siralama" 1559 value="a-z" 1560 data-search-value="a-z" 1561 data-smart-cat-search="1" 1562 type="radio" 1563 1564 ><label for="cat-filter-order-a-z"> 1565 Ãrün adı (A-Z) 1566 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1567 id="cat-filter-order-z-a" 1568 name="smart-cat-siralama" 1569 value="z-a" 1570 data-search-value="z-a" 1571 data-smart-cat-search="1" 1572 type="radio" 1573 1574 ><label for="cat-filter-order-z-a"> 1575 Ãrün adı (Z-A) 1576 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1577 id="cat-filter-order-en-dusuk-fiyat" 1578 name="smart-cat-siralama" 1579 value="en-dusuk-fiyat" 1580 data-search-value="en-dusuk-fiyat" 1581 data-smart-cat-search="1" 1582 type="radio" 1583 1584 ><label for="cat-filter-order-en-dusuk-fiyat"> 1585 En düÅük fiyat 1586 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1587 id="cat-filter-order-en-yuksek-fiyat" 1588 name="smart-cat-siralama" 1589 value="en-yuksek-fiyat" 1590 data-search-value="en-yuksek-fiyat" 1591 data-smart-cat-search="1" 1592 type="radio" 1593 1594 ><label for="cat-filter-order-en-yuksek-fiyat"> 1595 En yüksek fiyat 1596 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1597 id="cat-filter-order-en-cok-oylanan" 1598 name="smart-cat-siralama" 1599 value="en-cok-oylanan" 1600 data-search-value="en-cok-oylanan" 1601 data-smart-cat-search="1" 1602 type="radio" 1603 1604 ><label for="cat-filter-order-en-cok-oylanan"> 1605 En çok oylananlar 1606 </label></div></li></li><li><div class="product-view-select"><a href="javascript:;" class="two-view" onclick="categoryViewType(6, 6, 2)"><div></div><div></div></a><a href="javascript:;" class="three-view" onclick="categoryViewType(4, 4, 3)"><div></div><div></div><div></div></a><a href="javascript:;" class="four-view" onclick="categoryViewType(4, 3, 4)"><div></div><div></div><div></div><div></div></a></div></li></ul></div></div></div><div class="d-block d-sm-block d-md-block d-lg-none"><div class="cat-responsive-buttons"><div class="btn-group"><button class="btn btn-outline-dark" onclick="showSmartCategoryPopup('filter')">Filtreleme</button><button class="btn btn-outline-dark" onclick="showSmartCategoryPopup('order')">Sıralama</button></div></div><div class="cat-responsive-popup d-none"><div class="c-r-p-content"></div><div class="c-r-p-bar"></div></div></div><div class="category-pg-inner lux-category-products-area" 1607 id="luxCategoryProductsArea" 1608 data-lux-base-url="https://www.vezzalux.com/e-ayakkabi" 1609 data-lux-total-page="6" 1610 data-lux-per-page="24"><div class="row" id="luxProductGrid">
1610<div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 1611 data-lux-product-shell="1" 1612 data-lux-page="1"><style> 1613@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 1614 1615/* ===== VEZZA LUX CARD ===== */ 1616.card-product{ 1617 font-family:'Poppins',sans-serif; 1618 background:#fff !important; 1619 position:relative; 1620} 1621.card-product-inner{ 1622 background:transparent !important; 1623 position:relative; 1624} 1625.card-product .c-p-i-link, 1626.card-product a{ 1627 background:transparent !important; 1628} 1629.card-product-inner > div{ 1630 background:transparent !important; 1631} 1632.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 1633 background:transparent !important; 1634} 1635.card-product .card-product-content, 1636.card-product .price-group, 1637.card-product .prices{ 1638 background:transparent !important; 1639} 1640[class*="skeleton"], 1641[class*="placeholder"], 1642[class*="loading"]{ 1643 background:transparent !important; 1644} 1645 1646/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 1647.image-wrapper{ 1648 position:relative; 1649 width:100%; 1650 aspect-ratio:1/1; 1651 overflow:hidden; 1652 background:#fff !important; 1653} 1654 1655.image{ 1656 position:relative; 1657 width:100%; 1658 height:100%; 1659} 1660 1661.image-wrapper img{ 1662 width:100% !important; 1663 height:100% !important; 1664 object-fit:cover !important; 1665 object-position:center center !important; 1666 display:block; 1667 transition:transform .35s ease; 1668} 1669 1670/* ===== DISCOUNT ===== */ 1671.discount{ 1672 position:absolute; 1673 top:12px; 1674 left:12px; 1675 width:28px; 1676 height:48px; 1677 background:#e10b0b; 1678 color:#fff; 1679 font-size:12px; 1680 font-weight:600; 1681 display:flex; 1682 align-items:center; 1683 justify-content:center; 1684 writing-mode:vertical-rl; 1685 transform:rotate(180deg); 1686 letter-spacing:.5px; 1687 z-index:7; 1688} 1689 1690/* ===== FAV ===== */ 1691.lux-fav{ 1692 position:absolute; 1693 top:12px; 1694 right:12px; 1695 z-index:7; 1696} 1697.lux-fav a, 1698.lux-fav button{ 1699 background:transparent !important; 1700 border:0 !important; 1701 padding:0 !important; 1702 cursor:pointer; 1703 display:inline-flex; 1704 align-items:center; 1705 justify-content:center; 1706} 1707 1708/* ===== SEPET IKON ===== */ 1709.lux-bag{ 1710 position:absolute; 1711 bottom:12px; 1712 right:12px; 1713 z-index:7; 1714 width:34px; 1715 height:34px; 1716 display:inline-flex; 1717 align-items:center; 1718 justify-content:center; 1719 background:rgba(255,255,255,.92); 1720 border:1px solid rgba(0,0,0,.10); 1721 border-radius:10px; 1722 cursor:pointer; 1723 transition:.2s ease; 1724} 1725.lux-bag:hover{ 1726 background:#fff; 1727 border-color:rgba(0,0,0,.25); 1728} 1729.lux-bag.is-loading{ 1730 opacity:.6; 1731 cursor:wait; 1732} 1733.lux-bag.is-success{ 1734 background:#2e7d32 !important; 1735 border-color:#2e7d32 !important; 1736 color:#fff !important; 1737} 1738.card-product.sizes-open .lux-bag{ 1739 opacity:0; 1740 pointer-events:none; 1741} 1742 1743/* Loading spinner */ 1744.lux-bag.is-loading i::before{ 1745 content:"â³"; 1746} 1747 1748/* ===== SIZE STRIP ===== */ 1749.size-strip{ 1750 width:100%; 1751 max-height:0; 1752 overflow:hidden; 1753 background:#fff; 1754 display:flex; 1755 flex-wrap:wrap; 1756 transition:max-height .3s ease, border-color .3s ease; 1757 border-top:1px solid transparent; 1758 border-bottom:1px solid transparent; 1759} 1760.size-strip.open{ 1761 max-height:200px; 1762 border-top-color:rgba(0,0,0,.08); 1763 border-bottom-color:rgba(0,0,0,.08); 1764} 1765.size-item{ 1766 flex:1 0 auto; 1767 min-width:38px; 1768 height:42px; 1769 display:flex; 1770 align-items:center; 1771 justify-content:center; 1772 font-size:13px; 1773 font-weight:500; 1774 color:#111 !important; 1775 cursor:pointer; 1776 user-select:none; 1777 background:transparent; 1778 transition:background .15s ease, color .15s ease; 1779 border-right:1px solid rgba(0,0,0,.08); 1780} 1781.size-item:last-child{ border-right:0; } 1782.size-item:hover:not(.disabled):not(.adding){ 1783 background:#000 !important; 1784 color:#fff !important; 1785} 1786.size-item.disabled{ 1787 color:#111 !important; 1788 text-decoration:line-through !important; 1789 opacity:.30 !important; 1790 cursor:not-allowed; 1791} 1792.size-item.adding{ 1793 background:#2e7d32 !important; 1794 color:#fff !important; 1795 cursor:wait; 1796} 1797 1798/* ===== META ===== */ 1799.lux-meta{ 1800 padding:12px 6px 6px; 1801 background:transparent !important; 1802} 1803.lux-brand{ 1804 font-size:16px; 1805 font-weight:600; 1806 color:#111; 1807 margin-bottom:2px; 1808} 1809.lux-title{ 1810 font-size:14px; 1811 font-weight:400; 1812 line-height:1.45; 1813 color:#111; 1814 margin:0; 1815} 1816.lux-price{ 1817 margin-top:10px; 1818 display:flex; 1819 gap:10px; 1820 align-items:baseline; 1821 background:transparent !important; 1822} 1823.lux-price .list-price{ 1824 font-size:14px; 1825 font-weight:400; 1826 color:#111; 1827 text-decoration:line-through; 1828} 1829.lux-price .sale-price{ 1830 font-size:16px; 1831 font-weight:600; 1832 color:#e10b0b; 1833} 1834 1835.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
1836.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 1837</style><div class="card-product" 1838 id="card-10731" 1839 data-lux-card-id="10731" 1840 data-lux-product-link="https://www.vezzalux.com/cl-1302-yesil-loafer-erkek-ayakkabi" 1841 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/cl-1302-yesil-loafer-erkek-ayakkabi" class="c-p-i-link" title="Cl 1302 YeÅil Loafer Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c143c3d14c-49923211-sw800sh800.webp" alt="Cl 1302 YeÅil Loafer Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c143c3d14c-49923211-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c143d7af31-10508327-sw800sh800.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 1842 onclick="userProductFavourite('add', 10731)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 1843 id="lux-bag-10731" 1844 onclick="return luxBagClick(event, 10731);" 1845 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10731" style="display:none;"></div><div class="size-strip" id="size-strip-10731" data-loaded="0"></div><a href="https://www.vezzalux.com/cl-1302-yesil-loafer-erkek-ayakkabi" class="c-p-i-link" title="Cl 1302 YeÅil Loafer Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Christian Louboutin</div><div class="lux-title">Cl 1302 YeÅil Loafer Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
1845<script> 1846(function(){ 1847 1848 /* Bir kez kur */ 1849 if(window.__luxCardInit) return; 1850 window.__luxCardInit = true; 1851 1852 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 1853 window.__luxVariantCache = window.__luxVariantCache || {}; 1854 1855 function closeAll(){ 1856 document.querySelectorAll('.size-strip.open').forEach(function(s){ 1857 s.classList.remove('open'); 1858 }); 1859 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 1860 c.classList.remove('sizes-open'); 1861 }); 1862 } 1863 1864 function flashSuccess(productId){ 1865 var bag = document.getElementById('lux-bag-' + productId); 1866 if(!bag) return; 1867 bag.classList.add('is-success'); 1868 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 1869 } 1870 1871 /* DıŠtıklama - kapat */ 1872 document.addEventListener('click', function(e){ 1873 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 1874 if(!inside) closeAll(); 1875 }); 1876 1877 document.addEventListener('keydown', function(e){ 1878 if(e.key === 'Escape') closeAll(); 1879 }); 1880 1881 1882 /* ============================================ 1883 MODAL KILLER - yedek güvence 1884 ============================================ */ 1885 var LUX_MODAL_KILL_ACTIVE = false; 1886 1887 function killVisibleModals(){ 1888 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 1889 modals.forEach(function(m){ 1890 var id = (m.id || '').toLowerCase(); 1891 var txt = (m.textContent || '').toLowerCase(); 1892 var isCartModal = id.indexOf('cart') > -1 1893 || id.indexOf('variant') > -1 1894 || id.indexOf('fast') > -1 1895 || id.indexOf('urun') > -1 1896 || txt.indexOf('lütfen seçin') > -1; 1897 1898 if(isCartModal){ 1899 if(typeof jQuery !== 'undefined'){ 1900 try { jQuery(m).modal('hide'); } catch(e){} 1901 } 1902 m.classList.remove('show','in'); 1903 m.style.display = 'none'; 1904 } 1905 }); 1906 1907 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 1908 document.body.classList.remove('modal-open'); 1909 document.body.style.overflow = ''; 1910 document.body.style.paddingRight = ''; 1911 } 1912 1913 function startModalKill(durationMs){ 1914 if(LUX_MODAL_KILL_ACTIVE) return; 1915 LUX_MODAL_KILL_ACTIVE = true; 1916 killVisibleModals(); 1917 var interval = setInterval(killVisibleModals, 50); 1918 setTimeout(function(){ 1919 clearInterval(interval); 1920 LUX_MODAL_KILL_ACTIVE = false; 1921 }, durationMs || 2000); 1922 } 1923 1924 1925 /* ============================================ 1926 AJAX: Varyantları detay sayfasından çek 1927 ============================================ 1928 Ãrün detay sayfasının tam HTML'ini indir, 1929 DOMParser ile parse et, varyantları bul 1930 ============================================ */ 1931 function fetchVariants(productId, productLink, callback){ 1932 1933 /* Cache'te varsa hemen döndür */ 1934 if(window.__luxVariantCache[productId]){ 1935 callback(window.__luxVariantCache[productId]); 1936 return; 1937 } 1938 1939 fetch(productLink, { 1940 method: 'GET', 1941 credentials: 'same-origin', 1942 headers: { 'Accept': 'text/html' } 1943 }) 1944 .then(function(r){ return r.text(); }) 1945 .then(function(html){ 1946 var parser = new DOMParser(); 1947 var doc = parser.parseFromString(html, 'text/html'); 1948 1949 /* Detay sayfasındaki .variant-box'ı bul */ 1950 var variantBox = doc.querySelector('.variant-box'); 1951 if(!variantBox){ 1952 callback({ variants: [], error: 'no_variant_box' }); 1953 return; 1954 } 1955 1956 /* Her varyant grubu için select'leri ve option'ları oku */ 1957 var variants = []; 1958 var variantLis = variantBox.querySelectorAll('.variant'); 1959 1960 variantLis.forEach(function(li, idx){ 1961 var nameEl = li.querySelector('.name'); 1962 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 1963 1964 var values = []; 1965 1966 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 1967 var optLinks = li.querySelectorAll('.options a'); 1968 1969 if(optLinks.length > 0){ 1970 optLinks.forEach(function(a){ 1971 /* Beden/renk deÄerini doÄru attribute'tan oku
1972 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 1973 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 1974 - textContent: fallback */ 1975 var deger = a.getAttribute('data-variant-value') 1976 || a.textContent.trim(); 1977 1978 /* Stok kontrolü - birden fazla yoldan kontrol et */ 1979 var isSoldOut = a.classList.contains('sold-out') 1980 || a.classList.contains('sold_out') 1981 || a.classList.contains('disabled') 1982 || a.classList.contains('stoksuz') 1983 || a.classList.contains('out-of-stock') 1984 || a.hasAttribute('disabled') 1985 || a.getAttribute('data-in-stock') === '0' 1986 || a.getAttribute('data-in-stock') === 'false' 1987 || a.getAttribute('data-stokta-var-mi') === '0' 1988 || a.getAttribute('data-stokta-var-mi') === 'false'; 1989 1990 values.push({ 1991 deger: deger, 1992 inStock: !isSoldOut 1993 }); 1994 }); 1995 } else { 1996 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 1997 var select = li.querySelector('select'); 1998 if(select){ 1999 var opts = select.querySelectorAll('option'); 2000 opts.forEach(function(o){ 2001 if(!o.value) return; 2002 values.push({ 2003 deger: o.value, 2004 inStock: !o.disabled 2005 }); 2006 }); 2007 } 2008 } 2009 2010 variants.push({ 2011 index: idx, 2012 baslik: name, 2013 values: values 2014 }); 2015 }); 2016 2017 var result = { variants: variants }; 2018 window.__luxVariantCache[productId] = result; 2019 callback(result); 2020 }) 2021 .catch(function(err){ 2022 console.error('Varyant çekme hatası:', err); 2023 callback({ variants: [], error: 'fetch_failed' }); 2024 }); 2025 } 2026 2027 2028 /* ============================================ 2029 Beden Åeridini ve gizli variant-box'ı oluÅtur 2030 ============================================ */ 2031 function buildVariantUI(productId, data){ 2032 var card = document.getElementById('card-' + productId); 2033 if(!card) return false; 2034 2035 var holder = card.querySelector('.lux-variant-box'); 2036 var strip = document.getElementById('size-strip-' + productId); 2037 if(!holder || !strip) return false; 2038 2039 if(!data.variants || data.variants.length === 0){ 2040 /* Varyant yok */ 2041 return false; 2042 } 2043 2044 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 2045 var displayVariant = null;
2046 data.variants.forEach(function(v){ 2047 if(!displayVariant && v.values.length > 1){ 2048 displayVariant = v; 2049 } 2050 }); 2051 2052 /* Gizli variant-box HTML */ 2053 var html = '<div class="variant-box"><ul>'; 2054 data.variants.forEach(function(v){ 2055 html += '<li class="variant">'; 2056 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 2057 2058 if(v.values.length > 1){ 2059 html += '<option value="">Lütfen seçin</option>'; 2060 } 2061 2062 v.values.forEach(function(val, i){ 2063 var selected = (v.values.length === 1) ? ' selected' : ''; 2064 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 2065 }); 2066 2067 html += '</select></li>'; 2068 }); 2069 html += '</ul></div>'; 2070 2071 holder.innerHTML = html; 2072 holder.style.display = ''; 2073 2074 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 2075 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 2076 if(displayVariant){ 2077 var stripHtml = ''; 2078 var inStockCount = 0; 2079 2080 /* DEBUG - console'da gör */ 2081 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 2082 2083 displayVariant.values.forEach(function(val){ 2084 /* SADECE stokta olanları ekle */ 2085 if(val.inStock === true){ 2086 stripHtml += '<div class="size-item" ' 2087 + 'data-urun-id="' + productId + '" ' 2088 + 'data-varyant-deger="' + val.deger + '" ' 2089 + 'onclick="return luxAddVariant(event, this);">' 2090 + val.deger + '</div>'; 2091 inStockCount++; 2092 } 2093 }); 2094 2095 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 2096 if(inStockCount === 0){ 2097 strip.setAttribute('data-loaded', '1'); 2098 strip.setAttribute('data-has-variants', '0'); 2099 return false; 2100 } 2101
2102 strip.innerHTML = stripHtml; 2103 strip.setAttribute('data-loaded', '1'); 2104 strip.setAttribute('data-has-variants', '1'); 2105 return true; 2106 } else { 2107 strip.setAttribute('data-loaded', '1'); 2108 strip.setAttribute('data-has-variants', '0'); 2109 return false; 2110 } 2111 } 2112 2113 2114 /* ============================================ 2115 SEPET IKONU TIKLAMASI 2116 ============================================ */ 2117 window.luxBagClick = function(ev, productId){ 2118 ev.preventDefault(); 2119 ev.stopPropagation(); 2120 2121 var card = document.getElementById('card-' + productId); 2122 var strip = document.getElementById('size-strip-' + productId); 2123 var bag = document.getElementById('lux-bag-' + productId); 2124 if(!card || !strip) return false; 2125 2126 /* Strip zaten yüklenmiÅse direkt davran */ 2127 if(strip.getAttribute('data-loaded') === '1'){ 2128 if(strip.getAttribute('data-has-variants') === '1'){ 2129 toggleStrip(productId); 2130 } else { 2131 addToCartSmart(productId); 2132 } 2133 return false; 2134 } 2135 2136 /* İlk tıklama - AJAX ile varyantları çek */ 2137 bag.classList.add('is-loading'); 2138 var productLink = card.getAttribute('data-lux-product-link'); 2139 2140 fetchVariants(productId, productLink, function(data){ 2141 bag.classList.remove('is-loading'); 2142 2143 var hasVariants = buildVariantUI(productId, data); 2144 2145 if(hasVariants){ 2146 /* Bedenler var - Åeridi aç */ 2147 toggleStrip(productId); 2148 } else { 2149 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 2150 addToCartSmart(productId); 2151 } 2152 }); 2153 2154 return false; 2155 }; 2156 2157 function toggleStrip(productId){ 2158 var strip = document.getElementById('size-strip-' + productId); 2159 var card = document.getElementById('card-' + productId); 2160 if(!strip) return; 2161 2162 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2163 if(s !== strip) s.classList.remove('open'); 2164 }); 2165 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2166 if(c !== card) c.classList.remove('sizes-open'); 2167 }); 2168 2169 strip.classList.toggle('open'); 2170 if(card) card.classList.toggle('sizes-open'); 2171 } 2172 2173 2174 /* ============================================ 2175 BEDEN TIKLAMASI 2176 ============================================ */ 2177 window.luxAddVariant = function(ev, elem){ 2178 ev.preventDefault(); 2179 ev.stopPropagation(); 2180 2181 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 2182 2183 var productId = elem.getAttribute('data-urun-id'); 2184 var varyantDeger = elem.getAttribute('data-varyant-deger'); 2185 2186 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2187 if(!holder) return false; 2188 2189 /* Seçilen bedeni ilk select'e yaz */ 2190 var firstSelect = holder.querySelector('select[data-variant="0"]'); 2191 if(firstSelect){ 2192 firstSelect.value = varyantDeger; 2193 if(typeof jQuery !== "undefined"){ 2194 jQuery(firstSelect).val(varyantDeger).trigger('change'); 2195 } 2196 } 2197 2198 /* DiÄer select'lere ilk geçerli deÄeri koy */ 2199 var allSelects = holder.querySelectorAll('select[data-variant]'); 2200 allSelects.forEach(function(sel, idx){ 2201 if(idx === 0) return; 2202 if(sel.value) return; 2203 var options = sel.querySelectorAll('option'); 2204 for(var i = 0; i < options.length; i++){ 2205 if(options[i].value){ 2206 sel.value = options[i].value; 2207 if(typeof jQuery !== "undefined"){ 2208 jQuery(sel).val(options[i].value).trigger('change'); 2209 } 2210 break; 2211 } 2212 } 2213 }); 2214 2215 /* Görsel feedback */ 2216 elem.classList.add('adding'); 2217 var originalText = elem.textContent; 2218 elem.textContent = 'â'; 2219 2220 /* Sepete ekle */ 2221 addToCartSmart(productId, { 2222 checkVariant: true, 2223 variantCount: allSelects.length, 2224 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 2225 }); 2226 2227 setTimeout(function(){ 2228 elem.textContent = originalText; 2229 elem.classList.remove('adding'); 2230 closeAll(); 2231 }, 800); 2232 2233 return false; 2234 }; 2235 2236 2237 /* ============================================ 2238 SEPETE EKLE - Modal killer ile 2239 ============================================ */ 2240 function addToCartSmart(productId, extraOptions){ 2241 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2242 2243 var options = { 2244 quantity: 1, 2245 hideNativeModal: 'lux-card-' + productId 2246 }; 2247 2248 if(extraOptions){
2249 Object.keys(extraOptions).forEach(function(k){ 2250 options[k] = extraOptions[k]; 2251 }); 2252 } else if(holder){ 2253 var selects = holder.querySelectorAll('select[data-variant]'); 2254 if(selects.length > 0){ 2255 options.checkVariant = true; 2256 options.variantCount = selects.length; 2257 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 2258 } 2259 } 2260 2261 startModalKill(2000); 2262 2263 if(typeof addCart === "function"){ 2264 try { 2265 addCart(productId, 'card', options); 2266 flashSuccess(productId); 2267 } catch(err){ 2268 console.error('Sepete ekleme hatası:', err); 2269 } 2270 } 2271 } 2272 2273})(); 2274</script>
2274</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 2275 data-lux-product-shell="1" 2276 data-lux-page="1"><style> 2277@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 2278 2279/* ===== VEZZA LUX CARD ===== */ 2280.card-product{ 2281 font-family:'Poppins',sans-serif; 2282 background:#fff !important; 2283 position:relative; 2284} 2285.card-product-inner{ 2286 background:transparent !important; 2287 position:relative; 2288} 2289.card-product .c-p-i-link, 2290.card-product a{ 2291 background:transparent !important; 2292} 2293.card-product-inner > div{ 2294 background:transparent !important; 2295} 2296.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 2297 background:transparent !important; 2298} 2299.card-product .card-product-content, 2300.card-product .price-group, 2301.card-product .prices{ 2302 background:transparent !important; 2303} 2304[class*="skeleton"], 2305[class*="placeholder"], 2306[class*="loading"]{ 2307 background:transparent !important; 2308} 2309 2310/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 2311.image-wrapper{ 2312 position:relative; 2313 width:100%; 2314 aspect-ratio:1/1; 2315 overflow:hidden; 2316 background:#fff !important; 2317} 2318 2319.image{ 2320 position:relative; 2321 width:100%; 2322 height:100%; 2323} 2324 2325.image-wrapper img{ 2326 width:100% !important; 2327 height:100% !important; 2328 object-fit:cover !important; 2329 object-position:center center !important; 2330 display:block; 2331 transition:transform .35s ease; 2332} 2333 2334/* ===== DISCOUNT ===== */ 2335.discount{ 2336 position:absolute; 2337 top:12px; 2338 left:12px; 2339 width:28px; 2340 height:48px; 2341 background:#e10b0b; 2342 color:#fff; 2343 font-size:12px; 2344 font-weight:600; 2345 display:flex; 2346 align-items:center; 2347 justify-content:center; 2348 writing-mode:vertical-rl; 2349 transform:rotate(180deg); 2350 letter-spacing:.5px; 2351 z-index:7; 2352} 2353 2354/* ===== FAV ===== */ 2355.lux-fav{ 2356 position:absolute; 2357 top:12px; 2358 right:12px; 2359 z-index:7; 2360} 2361.lux-fav a, 2362.lux-fav button{ 2363 background:transparent !important; 2364 border:0 !important; 2365 padding:0 !important; 2366 cursor:pointer; 2367 display:inline-flex; 2368 align-items:center; 2369 justify-content:center; 2370} 2371 2372/* ===== SEPET IKON ===== */ 2373.lux-bag{ 2374 position:absolute; 2375 bottom:12px; 2376 right:12px; 2377 z-index:7; 2378 width:34px; 2379 height:34px; 2380 display:inline-flex; 2381 align-items:center; 2382 justify-content:center; 2383 background:rgba(255,255,255,.92); 2384 border:1px solid rgba(0,0,0,.10); 2385 border-radius:10px; 2386 cursor:pointer; 2387 transition:.2s ease; 2388} 2389.lux-bag:hover{ 2390 background:#fff; 2391 border-color:rgba(0,0,0,.25); 2392} 2393.lux-bag.is-loading{ 2394 opacity:.6; 2395 cursor:wait; 2396} 2397.lux-bag.is-success{ 2398 background:#2e7d32 !important; 2399 border-color:#2e7d32 !important; 2400 color:#fff !important; 2401} 2402.card-product.sizes-open .lux-bag{ 2403 opacity:0; 2404 pointer-events:none; 2405} 2406 2407/* Loading spinner */ 2408.lux-bag.is-loading i::before{ 2409 content:"â³"; 2410} 2411 2412/* ===== SIZE STRIP ===== */ 2413.size-strip{ 2414 width:100%; 2415 max-height:0; 2416 overflow:hidden; 2417 background:#fff; 2418 display:flex; 2419 flex-wrap:wrap; 2420 transition:max-height .3s ease, border-color .3s ease; 2421 border-top:1px solid transparent; 2422 border-bottom:1px solid transparent; 2423} 2424.size-strip.open{ 2425 max-height:200px; 2426 border-top-color:rgba(0,0,0,.08); 2427 border-bottom-color:rgba(0,0,0,.08); 2428} 2429.size-item{ 2430 flex:1 0 auto; 2431 min-width:38px; 2432 height:42px; 2433 display:flex; 2434 align-items:center; 2435 justify-content:center; 2436 font-size:13px; 2437 font-weight:500; 2438 color:#111 !important; 2439 cursor:pointer; 2440 user-select:none; 2441 background:transparent; 2442 transition:background .15s ease, color .15s ease; 2443 border-right:1px solid rgba(0,0,0,.08); 2444} 2445.size-item:last-child{ border-right:0; } 2446.size-item:hover:not(.disabled):not(.adding){ 2447 background:#000 !important; 2448 color:#fff !important; 2449} 2450.size-item.disabled{ 2451 color:#111 !important; 2452 text-decoration:line-through !important; 2453 opacity:.30 !important; 2454 cursor:not-allowed; 2455} 2456.size-item.adding{ 2457 background:#2e7d32 !important; 2458 color:#fff !important; 2459 cursor:wait; 2460} 2461 2462/* ===== META ===== */ 2463.lux-meta{ 2464 padding:12px 6px 6px; 2465 background:transparent !important; 2466} 2467.lux-brand{ 2468 font-size:16px; 2469 font-weight:600; 2470 color:#111; 2471 margin-bottom:2px; 2472} 2473.lux-title{ 2474 font-size:14px; 2475 font-weight:400; 2476 line-height:1.45; 2477 color:#111; 2478 margin:0; 2479} 2480.lux-price{ 2481 margin-top:10px; 2482 display:flex; 2483 gap:10px; 2484 align-items:baseline; 2485 background:transparent !important; 2486} 2487.lux-price .list-price{ 2488 font-size:14px; 2489 font-weight:400; 2490 color:#111; 2491 text-decoration:line-through; 2492} 2493.lux-price .sale-price{ 2494 font-size:16px; 2495 font-weight:600; 2496 color:#e10b0b; 2497} 2498 2499.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
2500.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 2501</style><div class="card-product" 2502 id="card-10741" 2503 data-lux-card-id="10741" 2504 data-lux-product-link="https://www.vezzalux.com/bottega-1314-kahverengi-loafer-erkek-ayakkabi" 2505 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/bottega-1314-kahverengi-loafer-erkek-ayakkabi" class="c-p-i-link" title="Bottega 1314 Kahverengi Süet Loafer Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a6071abe94b8-92650790-sw800sh800.webp" alt="Bottega 1314 Kahverengi Süet Loafer Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a6071abe94b8-92650790-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a6071ad2eb4d-56408374-sw800sh800.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 2506 onclick="userProductFavourite('add', 10741)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 2507 id="lux-bag-10741" 2508 onclick="return luxBagClick(event, 10741);" 2509 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10741" style="display:none;"></div><div class="size-strip" id="size-strip-10741" data-loaded="0"></div><a href="https://www.vezzalux.com/bottega-1314-kahverengi-loafer-erkek-ayakkabi" class="c-p-i-link" title="Bottega 1314 Kahverengi Süet Loafer Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Bottega Veneta</div><div class="lux-title">Bottega 1314 Kahverengi Süet Loafer Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">13.500,00 TL</div></div></div></a></div></div>
2509<script> 2510(function(){ 2511 2512 /* Bir kez kur */ 2513 if(window.__luxCardInit) return; 2514 window.__luxCardInit = true; 2515 2516 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 2517 window.__luxVariantCache = window.__luxVariantCache || {}; 2518 2519 function closeAll(){ 2520 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2521 s.classList.remove('open'); 2522 }); 2523 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2524 c.classList.remove('sizes-open'); 2525 }); 2526 } 2527 2528 function flashSuccess(productId){ 2529 var bag = document.getElementById('lux-bag-' + productId); 2530 if(!bag) return; 2531 bag.classList.add('is-success'); 2532 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 2533 } 2534 2535 /* DıŠtıklama - kapat */ 2536 document.addEventListener('click', function(e){ 2537 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 2538 if(!inside) closeAll(); 2539 }); 2540 2541 document.addEventListener('keydown', function(e){ 2542 if(e.key === 'Escape') closeAll(); 2543 }); 2544 2545 2546 /* ============================================ 2547 MODAL KILLER - yedek güvence 2548 ============================================ */ 2549 var LUX_MODAL_KILL_ACTIVE = false; 2550 2551 function killVisibleModals(){ 2552 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 2553 modals.forEach(function(m){ 2554 var id = (m.id || '').toLowerCase(); 2555 var txt = (m.textContent || '').toLowerCase(); 2556 var isCartModal = id.indexOf('cart') > -1 2557 || id.indexOf('variant') > -1 2558 || id.indexOf('fast') > -1 2559 || id.indexOf('urun') > -1 2560 || txt.indexOf('lütfen seçin') > -1; 2561 2562 if(isCartModal){ 2563 if(typeof jQuery !== 'undefined'){ 2564 try { jQuery(m).modal('hide'); } catch(e){} 2565 } 2566 m.classList.remove('show','in'); 2567 m.style.display = 'none'; 2568 } 2569 }); 2570 2571 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 2572 document.body.classList.remove('modal-open'); 2573 document.body.style.overflow = ''; 2574 document.body.style.paddingRight = ''; 2575 } 2576 2577 function startModalKill(durationMs){ 2578 if(LUX_MODAL_KILL_ACTIVE) return; 2579 LUX_MODAL_KILL_ACTIVE = true; 2580 killVisibleModals(); 2581 var interval = setInterval(killVisibleModals, 50); 2582 setTimeout(function(){ 2583 clearInterval(interval); 2584 LUX_MODAL_KILL_ACTIVE = false; 2585 }, durationMs || 2000); 2586 } 2587 2588 2589 /* ============================================ 2590 AJAX: Varyantları detay sayfasından çek 2591 ============================================ 2592 Ãrün detay sayfasının tam HTML'ini indir, 2593 DOMParser ile parse et, varyantları bul 2594 ============================================ */ 2595 function fetchVariants(productId, productLink, callback){ 2596 2597 /* Cache'te varsa hemen döndür */ 2598 if(window.__luxVariantCache[productId]){ 2599 callback(window.__luxVariantCache[productId]); 2600 return; 2601 } 2602 2603 fetch(productLink, { 2604 method: 'GET', 2605 credentials: 'same-origin', 2606 headers: { 'Accept': 'text/html' } 2607 }) 2608 .then(function(r){ return r.text(); }) 2609 .then(function(html){ 2610 var parser = new DOMParser(); 2611 var doc = parser.parseFromString(html, 'text/html'); 2612 2613 /* Detay sayfasındaki .variant-box'ı bul */ 2614 var variantBox = doc.querySelector('.variant-box'); 2615 if(!variantBox){ 2616 callback({ variants: [], error: 'no_variant_box' }); 2617 return; 2618 } 2619 2620 /* Her varyant grubu için select'leri ve option'ları oku */ 2621 var variants = []; 2622 var variantLis = variantBox.querySelectorAll('.variant'); 2623 2624 variantLis.forEach(function(li, idx){ 2625 var nameEl = li.querySelector('.name'); 2626 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 2627 2628 var values = []; 2629 2630 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 2631 var optLinks = li.querySelectorAll('.options a'); 2632 2633 if(optLinks.length > 0){ 2634 optLinks.forEach(function(a){ 2635 /* Beden/renk deÄerini doÄru attribute'tan oku
2636 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 2637 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 2638 - textContent: fallback */ 2639 var deger = a.getAttribute('data-variant-value') 2640 || a.textContent.trim(); 2641 2642 /* Stok kontrolü - birden fazla yoldan kontrol et */ 2643 var isSoldOut = a.classList.contains('sold-out') 2644 || a.classList.contains('sold_out') 2645 || a.classList.contains('disabled') 2646 || a.classList.contains('stoksuz') 2647 || a.classList.contains('out-of-stock') 2648 || a.hasAttribute('disabled') 2649 || a.getAttribute('data-in-stock') === '0' 2650 || a.getAttribute('data-in-stock') === 'false' 2651 || a.getAttribute('data-stokta-var-mi') === '0' 2652 || a.getAttribute('data-stokta-var-mi') === 'false'; 2653 2654 values.push({ 2655 deger: deger, 2656 inStock: !isSoldOut 2657 }); 2658 }); 2659 } else { 2660 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 2661 var select = li.querySelector('select'); 2662 if(select){ 2663 var opts = select.querySelectorAll('option'); 2664 opts.forEach(function(o){ 2665 if(!o.value) return; 2666 values.push({ 2667 deger: o.value, 2668 inStock: !o.disabled 2669 }); 2670 }); 2671 } 2672 } 2673 2674 variants.push({ 2675 index: idx, 2676 baslik: name, 2677 values: values 2678 }); 2679 }); 2680 2681 var result = { variants: variants }; 2682 window.__luxVariantCache[productId] = result; 2683 callback(result); 2684 }) 2685 .catch(function(err){ 2686 console.error('Varyant çekme hatası:', err); 2687 callback({ variants: [], error: 'fetch_failed' }); 2688 }); 2689 } 2690 2691 2692 /* ============================================ 2693 Beden Åeridini ve gizli variant-box'ı oluÅtur 2694 ============================================ */ 2695 function buildVariantUI(productId, data){ 2696 var card = document.getElementById('card-' + productId); 2697 if(!card) return false; 2698 2699 var holder = card.querySelector('.lux-variant-box'); 2700 var strip = document.getElementById('size-strip-' + productId); 2701 if(!holder || !strip) return false; 2702 2703 if(!data.variants || data.variants.length === 0){ 2704 /* Varyant yok */ 2705 return false; 2706 } 2707 2708 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 2709 var displayVariant = null;
2710 data.variants.forEach(function(v){ 2711 if(!displayVariant && v.values.length > 1){ 2712 displayVariant = v; 2713 } 2714 }); 2715 2716 /* Gizli variant-box HTML */ 2717 var html = '<div class="variant-box"><ul>'; 2718 data.variants.forEach(function(v){ 2719 html += '<li class="variant">'; 2720 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 2721 2722 if(v.values.length > 1){ 2723 html += '<option value="">Lütfen seçin</option>'; 2724 } 2725 2726 v.values.forEach(function(val, i){ 2727 var selected = (v.values.length === 1) ? ' selected' : ''; 2728 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 2729 }); 2730 2731 html += '</select></li>'; 2732 }); 2733 html += '</ul></div>'; 2734 2735 holder.innerHTML = html; 2736 holder.style.display = ''; 2737 2738 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 2739 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 2740 if(displayVariant){ 2741 var stripHtml = ''; 2742 var inStockCount = 0; 2743 2744 /* DEBUG - console'da gör */ 2745 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 2746 2747 displayVariant.values.forEach(function(val){ 2748 /* SADECE stokta olanları ekle */ 2749 if(val.inStock === true){ 2750 stripHtml += '<div class="size-item" ' 2751 + 'data-urun-id="' + productId + '" ' 2752 + 'data-varyant-deger="' + val.deger + '" ' 2753 + 'onclick="return luxAddVariant(event, this);">' 2754 + val.deger + '</div>'; 2755 inStockCount++; 2756 } 2757 }); 2758 2759 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 2760 if(inStockCount === 0){ 2761 strip.setAttribute('data-loaded', '1'); 2762 strip.setAttribute('data-has-variants', '0'); 2763 return false; 2764 } 2765
2766 strip.innerHTML = stripHtml; 2767 strip.setAttribute('data-loaded', '1'); 2768 strip.setAttribute('data-has-variants', '1'); 2769 return true; 2770 } else { 2771 strip.setAttribute('data-loaded', '1'); 2772 strip.setAttribute('data-has-variants', '0'); 2773 return false; 2774 } 2775 } 2776 2777 2778 /* ============================================ 2779 SEPET IKONU TIKLAMASI 2780 ============================================ */ 2781 window.luxBagClick = function(ev, productId){ 2782 ev.preventDefault(); 2783 ev.stopPropagation(); 2784 2785 var card = document.getElementById('card-' + productId); 2786 var strip = document.getElementById('size-strip-' + productId); 2787 var bag = document.getElementById('lux-bag-' + productId); 2788 if(!card || !strip) return false; 2789 2790 /* Strip zaten yüklenmiÅse direkt davran */ 2791 if(strip.getAttribute('data-loaded') === '1'){ 2792 if(strip.getAttribute('data-has-variants') === '1'){ 2793 toggleStrip(productId); 2794 } else { 2795 addToCartSmart(productId); 2796 } 2797 return false; 2798 } 2799 2800 /* İlk tıklama - AJAX ile varyantları çek */ 2801 bag.classList.add('is-loading'); 2802 var productLink = card.getAttribute('data-lux-product-link'); 2803 2804 fetchVariants(productId, productLink, function(data){ 2805 bag.classList.remove('is-loading'); 2806 2807 var hasVariants = buildVariantUI(productId, data); 2808 2809 if(hasVariants){ 2810 /* Bedenler var - Åeridi aç */ 2811 toggleStrip(productId); 2812 } else { 2813 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 2814 addToCartSmart(productId); 2815 } 2816 }); 2817 2818 return false; 2819 }; 2820 2821 function toggleStrip(productId){ 2822 var strip = document.getElementById('size-strip-' + productId); 2823 var card = document.getElementById('card-' + productId); 2824 if(!strip) return; 2825 2826 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2827 if(s !== strip) s.classList.remove('open'); 2828 }); 2829 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2830 if(c !== card) c.classList.remove('sizes-open'); 2831 }); 2832 2833 strip.classList.toggle('open'); 2834 if(card) card.classList.toggle('sizes-open'); 2835 } 2836 2837 2838 /* ============================================ 2839 BEDEN TIKLAMASI 2840 ============================================ */ 2841 window.luxAddVariant = function(ev, elem){ 2842 ev.preventDefault(); 2843 ev.stopPropagation(); 2844 2845 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 2846 2847 var productId = elem.getAttribute('data-urun-id'); 2848 var varyantDeger = elem.getAttribute('data-varyant-deger'); 2849 2850 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2851 if(!holder) return false; 2852 2853 /* Seçilen bedeni ilk select'e yaz */ 2854 var firstSelect = holder.querySelector('select[data-variant="0"]'); 2855 if(firstSelect){ 2856 firstSelect.value = varyantDeger; 2857 if(typeof jQuery !== "undefined"){ 2858 jQuery(firstSelect).val(varyantDeger).trigger('change'); 2859 } 2860 } 2861 2862 /* DiÄer select'lere ilk geçerli deÄeri koy */ 2863 var allSelects = holder.querySelectorAll('select[data-variant]'); 2864 allSelects.forEach(function(sel, idx){ 2865 if(idx === 0) return; 2866 if(sel.value) return; 2867 var options = sel.querySelectorAll('option'); 2868 for(var i = 0; i < options.length; i++){ 2869 if(options[i].value){ 2870 sel.value = options[i].value; 2871 if(typeof jQuery !== "undefined"){ 2872 jQuery(sel).val(options[i].value).trigger('change'); 2873 } 2874 break; 2875 } 2876 } 2877 }); 2878 2879 /* Görsel feedback */ 2880 elem.classList.add('adding'); 2881 var originalText = elem.textContent; 2882 elem.textContent = 'â'; 2883 2884 /* Sepete ekle */ 2885 addToCartSmart(productId, { 2886 checkVariant: true, 2887 variantCount: allSelects.length, 2888 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 2889 }); 2890 2891 setTimeout(function(){ 2892 elem.textContent = originalText; 2893 elem.classList.remove('adding'); 2894 closeAll(); 2895 }, 800); 2896 2897 return false; 2898 }; 2899 2900 2901 /* ============================================ 2902 SEPETE EKLE - Modal killer ile 2903 ============================================ */ 2904 function addToCartSmart(productId, extraOptions){ 2905 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2906 2907 var options = { 2908 quantity: 1, 2909 hideNativeModal: 'lux-card-' + productId 2910 }; 2911 2912 if(extraOptions){
2913 Object.keys(extraOptions).forEach(function(k){ 2914 options[k] = extraOptions[k]; 2915 }); 2916 } else if(holder){ 2917 var selects = holder.querySelectorAll('select[data-variant]'); 2918 if(selects.length > 0){ 2919 options.checkVariant = true; 2920 options.variantCount = selects.length; 2921 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 2922 } 2923 } 2924 2925 startModalKill(2000); 2926 2927 if(typeof addCart === "function"){ 2928 try { 2929 addCart(productId, 'card', options); 2930 flashSuccess(productId); 2931 } catch(err){ 2932 console.error('Sepete ekleme hatası:', err); 2933 } 2934 } 2935 } 2936 2937})(); 2938</script>
2938</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 2939 data-lux-product-shell="1" 2940 data-lux-page="1"><style> 2941@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 2942 2943/* ===== VEZZA LUX CARD ===== */ 2944.card-product{ 2945 font-family:'Poppins',sans-serif; 2946 background:#fff !important; 2947 position:relative; 2948} 2949.card-product-inner{ 2950 background:transparent !important; 2951 position:relative; 2952} 2953.card-product .c-p-i-link, 2954.card-product a{ 2955 background:transparent !important; 2956} 2957.card-product-inner > div{ 2958 background:transparent !important; 2959} 2960.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 2961 background:transparent !important; 2962} 2963.card-product .card-product-content, 2964.card-product .price-group, 2965.card-product .prices{ 2966 background:transparent !important; 2967} 2968[class*="skeleton"], 2969[class*="placeholder"], 2970[class*="loading"]{ 2971 background:transparent !important; 2972} 2973 2974/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 2975.image-wrapper{ 2976 position:relative; 2977 width:100%; 2978 aspect-ratio:1/1; 2979 overflow:hidden; 2980 background:#fff !important; 2981} 2982 2983.image{ 2984 position:relative; 2985 width:100%; 2986 height:100%; 2987} 2988 2989.image-wrapper img{ 2990 width:100% !important; 2991 height:100% !important; 2992 object-fit:cover !important; 2993 object-position:center center !important; 2994 display:block; 2995 transition:transform .35s ease; 2996} 2997 2998/* ===== DISCOUNT ===== */ 2999.discount{ 3000 position:absolute; 3001 top:12px; 3002 left:12px; 3003 width:28px; 3004 height:48px; 3005 background:#e10b0b; 3006 color:#fff; 3007 font-size:12px; 3008 font-weight:600; 3009 display:flex; 3010 align-items:center; 3011 justify-content:center; 3012 writing-mode:vertical-rl; 3013 transform:rotate(180deg); 3014 letter-spacing:.5px; 3015 z-index:7; 3016} 3017 3018/* ===== FAV ===== */ 3019.lux-fav{ 3020 position:absolute; 3021 top:12px; 3022 right:12px; 3023 z-index:7; 3024} 3025.lux-fav a, 3026.lux-fav button{ 3027 background:transparent !important; 3028 border:0 !important; 3029 padding:0 !important; 3030 cursor:pointer; 3031 display:inline-flex; 3032 align-items:center; 3033 justify-content:center; 3034} 3035 3036/* ===== SEPET IKON ===== */ 3037.lux-bag{ 3038 position:absolute; 3039 bottom:12px; 3040 right:12px; 3041 z-index:7; 3042 width:34px; 3043 height:34px; 3044 display:inline-flex; 3045 align-items:center; 3046 justify-content:center; 3047 background:rgba(255,255,255,.92); 3048 border:1px solid rgba(0,0,0,.10); 3049 border-radius:10px; 3050 cursor:pointer; 3051 transition:.2s ease; 3052} 3053.lux-bag:hover{ 3054 background:#fff; 3055 border-color:rgba(0,0,0,.25); 3056} 3057.lux-bag.is-loading{ 3058 opacity:.6; 3059 cursor:wait; 3060} 3061.lux-bag.is-success{ 3062 background:#2e7d32 !important; 3063 border-color:#2e7d32 !important; 3064 color:#fff !important; 3065} 3066.card-product.sizes-open .lux-bag{ 3067 opacity:0; 3068 pointer-events:none; 3069} 3070 3071/* Loading spinner */ 3072.lux-bag.is-loading i::before{ 3073 content:"â³"; 3074} 3075 3076/* ===== SIZE STRIP ===== */ 3077.size-strip{ 3078 width:100%; 3079 max-height:0; 3080 overflow:hidden; 3081 background:#fff; 3082 display:flex; 3083 flex-wrap:wrap; 3084 transition:max-height .3s ease, border-color .3s ease; 3085 border-top:1px solid transparent; 3086 border-bottom:1px solid transparent; 3087} 3088.size-strip.open{ 3089 max-height:200px; 3090 border-top-color:rgba(0,0,0,.08); 3091 border-bottom-color:rgba(0,0,0,.08); 3092} 3093.size-item{ 3094 flex:1 0 auto; 3095 min-width:38px; 3096 height:42px; 3097 display:flex; 3098 align-items:center; 3099 justify-content:center; 3100 font-size:13px; 3101 font-weight:500; 3102 color:#111 !important; 3103 cursor:pointer; 3104 user-select:none; 3105 background:transparent; 3106 transition:background .15s ease, color .15s ease; 3107 border-right:1px solid rgba(0,0,0,.08); 3108} 3109.size-item:last-child{ border-right:0; } 3110.size-item:hover:not(.disabled):not(.adding){ 3111 background:#000 !important; 3112 color:#fff !important; 3113} 3114.size-item.disabled{ 3115 color:#111 !important; 3116 text-decoration:line-through !important; 3117 opacity:.30 !important; 3118 cursor:not-allowed; 3119} 3120.size-item.adding{ 3121 background:#2e7d32 !important; 3122 color:#fff !important; 3123 cursor:wait; 3124} 3125 3126/* ===== META ===== */ 3127.lux-meta{ 3128 padding:12px 6px 6px; 3129 background:transparent !important; 3130} 3131.lux-brand{ 3132 font-size:16px; 3133 font-weight:600; 3134 color:#111; 3135 margin-bottom:2px; 3136} 3137.lux-title{ 3138 font-size:14px; 3139 font-weight:400; 3140 line-height:1.45; 3141 color:#111; 3142 margin:0; 3143} 3144.lux-price{ 3145 margin-top:10px; 3146 display:flex; 3147 gap:10px; 3148 align-items:baseline; 3149 background:transparent !important; 3150} 3151.lux-price .list-price{ 3152 font-size:14px; 3153 font-weight:400; 3154 color:#111; 3155 text-decoration:line-through; 3156} 3157.lux-price .sale-price{ 3158 font-size:16px; 3159 font-weight:600; 3160 color:#e10b0b; 3161} 3162 3163.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
3164.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 3165</style><div class="card-product" 3166 id="card-10329" 3167 data-lux-card-id="10329" 3168 data-lux-product-link="https://www.vezzalux.com/lora-1008-haki-erkek-ayakkabi" 3169 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%43</div><a href="https://www.vezzalux.com/lora-1008-haki-erkek-ayakkabi" class="c-p-i-link" title="Lora 1008 Haki Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb216fc85-78788887-sw1200sh1200.webp" alt="Lora 1008 Haki Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb216fc85-78788887-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb1fe1fa2-39760782-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 3170 onclick="userProductFavourite('add', 10329)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 3171 id="lux-bag-10329" 3172 onclick="return luxBagClick(event, 10329);" 3173 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10329" style="display:none;"></div><div class="size-strip" id="size-strip-10329" data-loaded="0"></div><a href="https://www.vezzalux.com/lora-1008-haki-erkek-ayakkabi" class="c-p-i-link" title="Lora 1008 Haki Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Lora piana</div><div class="lux-title">Lora 1008 Haki Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">11.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
3173<script> 3174(function(){ 3175 3176 /* Bir kez kur */ 3177 if(window.__luxCardInit) return; 3178 window.__luxCardInit = true; 3179 3180 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 3181 window.__luxVariantCache = window.__luxVariantCache || {}; 3182 3183 function closeAll(){ 3184 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3185 s.classList.remove('open'); 3186 }); 3187 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3188 c.classList.remove('sizes-open'); 3189 }); 3190 } 3191 3192 function flashSuccess(productId){ 3193 var bag = document.getElementById('lux-bag-' + productId); 3194 if(!bag) return; 3195 bag.classList.add('is-success'); 3196 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 3197 } 3198 3199 /* DıŠtıklama - kapat */ 3200 document.addEventListener('click', function(e){ 3201 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 3202 if(!inside) closeAll(); 3203 }); 3204 3205 document.addEventListener('keydown', function(e){ 3206 if(e.key === 'Escape') closeAll(); 3207 }); 3208 3209 3210 /* ============================================ 3211 MODAL KILLER - yedek güvence 3212 ============================================ */ 3213 var LUX_MODAL_KILL_ACTIVE = false; 3214 3215 function killVisibleModals(){ 3216 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 3217 modals.forEach(function(m){ 3218 var id = (m.id || '').toLowerCase(); 3219 var txt = (m.textContent || '').toLowerCase(); 3220 var isCartModal = id.indexOf('cart') > -1 3221 || id.indexOf('variant') > -1 3222 || id.indexOf('fast') > -1 3223 || id.indexOf('urun') > -1 3224 || txt.indexOf('lütfen seçin') > -1; 3225 3226 if(isCartModal){ 3227 if(typeof jQuery !== 'undefined'){ 3228 try { jQuery(m).modal('hide'); } catch(e){} 3229 } 3230 m.classList.remove('show','in'); 3231 m.style.display = 'none'; 3232 } 3233 }); 3234 3235 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 3236 document.body.classList.remove('modal-open'); 3237 document.body.style.overflow = ''; 3238 document.body.style.paddingRight = ''; 3239 } 3240 3241 function startModalKill(durationMs){ 3242 if(LUX_MODAL_KILL_ACTIVE) return; 3243 LUX_MODAL_KILL_ACTIVE = true; 3244 killVisibleModals(); 3245 var interval = setInterval(killVisibleModals, 50); 3246 setTimeout(function(){ 3247 clearInterval(interval); 3248 LUX_MODAL_KILL_ACTIVE = false; 3249 }, durationMs || 2000); 3250 } 3251 3252 3253 /* ============================================ 3254 AJAX: Varyantları detay sayfasından çek 3255 ============================================ 3256 Ãrün detay sayfasının tam HTML'ini indir, 3257 DOMParser ile parse et, varyantları bul 3258 ============================================ */ 3259 function fetchVariants(productId, productLink, callback){ 3260 3261 /* Cache'te varsa hemen döndür */ 3262 if(window.__luxVariantCache[productId]){ 3263 callback(window.__luxVariantCache[productId]); 3264 return; 3265 } 3266 3267 fetch(productLink, { 3268 method: 'GET', 3269 credentials: 'same-origin', 3270 headers: { 'Accept': 'text/html' } 3271 }) 3272 .then(function(r){ return r.text(); }) 3273 .then(function(html){ 3274 var parser = new DOMParser(); 3275 var doc = parser.parseFromString(html, 'text/html'); 3276 3277 /* Detay sayfasındaki .variant-box'ı bul */ 3278 var variantBox = doc.querySelector('.variant-box'); 3279 if(!variantBox){ 3280 callback({ variants: [], error: 'no_variant_box' }); 3281 return; 3282 } 3283 3284 /* Her varyant grubu için select'leri ve option'ları oku */ 3285 var variants = []; 3286 var variantLis = variantBox.querySelectorAll('.variant'); 3287 3288 variantLis.forEach(function(li, idx){ 3289 var nameEl = li.querySelector('.name'); 3290 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 3291 3292 var values = []; 3293 3294 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 3295 var optLinks = li.querySelectorAll('.options a'); 3296 3297 if(optLinks.length > 0){ 3298 optLinks.forEach(function(a){ 3299 /* Beden/renk deÄerini doÄru attribute'tan oku
3300 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 3301 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 3302 - textContent: fallback */ 3303 var deger = a.getAttribute('data-variant-value') 3304 || a.textContent.trim(); 3305 3306 /* Stok kontrolü - birden fazla yoldan kontrol et */ 3307 var isSoldOut = a.classList.contains('sold-out') 3308 || a.classList.contains('sold_out') 3309 || a.classList.contains('disabled') 3310 || a.classList.contains('stoksuz') 3311 || a.classList.contains('out-of-stock') 3312 || a.hasAttribute('disabled') 3313 || a.getAttribute('data-in-stock') === '0' 3314 || a.getAttribute('data-in-stock') === 'false' 3315 || a.getAttribute('data-stokta-var-mi') === '0' 3316 || a.getAttribute('data-stokta-var-mi') === 'false'; 3317 3318 values.push({ 3319 deger: deger, 3320 inStock: !isSoldOut 3321 }); 3322 }); 3323 } else { 3324 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 3325 var select = li.querySelector('select'); 3326 if(select){ 3327 var opts = select.querySelectorAll('option'); 3328 opts.forEach(function(o){ 3329 if(!o.value) return; 3330 values.push({ 3331 deger: o.value, 3332 inStock: !o.disabled 3333 }); 3334 }); 3335 } 3336 } 3337 3338 variants.push({ 3339 index: idx, 3340 baslik: name, 3341 values: values 3342 }); 3343 }); 3344 3345 var result = { variants: variants }; 3346 window.__luxVariantCache[productId] = result; 3347 callback(result); 3348 }) 3349 .catch(function(err){ 3350 console.error('Varyant çekme hatası:', err); 3351 callback({ variants: [], error: 'fetch_failed' }); 3352 }); 3353 } 3354 3355 3356 /* ============================================ 3357 Beden Åeridini ve gizli variant-box'ı oluÅtur 3358 ============================================ */ 3359 function buildVariantUI(productId, data){ 3360 var card = document.getElementById('card-' + productId); 3361 if(!card) return false; 3362 3363 var holder = card.querySelector('.lux-variant-box'); 3364 var strip = document.getElementById('size-strip-' + productId); 3365 if(!holder || !strip) return false; 3366 3367 if(!data.variants || data.variants.length === 0){ 3368 /* Varyant yok */ 3369 return false; 3370 } 3371 3372 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 3373 var displayVariant = null;
3374 data.variants.forEach(function(v){ 3375 if(!displayVariant && v.values.length > 1){ 3376 displayVariant = v; 3377 } 3378 }); 3379 3380 /* Gizli variant-box HTML */ 3381 var html = '<div class="variant-box"><ul>'; 3382 data.variants.forEach(function(v){ 3383 html += '<li class="variant">'; 3384 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 3385 3386 if(v.values.length > 1){ 3387 html += '<option value="">Lütfen seçin</option>'; 3388 } 3389 3390 v.values.forEach(function(val, i){ 3391 var selected = (v.values.length === 1) ? ' selected' : ''; 3392 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 3393 }); 3394 3395 html += '</select></li>'; 3396 }); 3397 html += '</ul></div>'; 3398 3399 holder.innerHTML = html; 3400 holder.style.display = ''; 3401 3402 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 3403 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 3404 if(displayVariant){ 3405 var stripHtml = ''; 3406 var inStockCount = 0; 3407 3408 /* DEBUG - console'da gör */ 3409 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 3410 3411 displayVariant.values.forEach(function(val){ 3412 /* SADECE stokta olanları ekle */ 3413 if(val.inStock === true){ 3414 stripHtml += '<div class="size-item" ' 3415 + 'data-urun-id="' + productId + '" ' 3416 + 'data-varyant-deger="' + val.deger + '" ' 3417 + 'onclick="return luxAddVariant(event, this);">' 3418 + val.deger + '</div>'; 3419 inStockCount++; 3420 } 3421 }); 3422 3423 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 3424 if(inStockCount === 0){ 3425 strip.setAttribute('data-loaded', '1'); 3426 strip.setAttribute('data-has-variants', '0'); 3427 return false; 3428 } 3429
3430 strip.innerHTML = stripHtml; 3431 strip.setAttribute('data-loaded', '1'); 3432 strip.setAttribute('data-has-variants', '1'); 3433 return true; 3434 } else { 3435 strip.setAttribute('data-loaded', '1'); 3436 strip.setAttribute('data-has-variants', '0'); 3437 return false; 3438 } 3439 } 3440 3441 3442 /* ============================================ 3443 SEPET IKONU TIKLAMASI 3444 ============================================ */ 3445 window.luxBagClick = function(ev, productId){ 3446 ev.preventDefault(); 3447 ev.stopPropagation(); 3448 3449 var card = document.getElementById('card-' + productId); 3450 var strip = document.getElementById('size-strip-' + productId); 3451 var bag = document.getElementById('lux-bag-' + productId); 3452 if(!card || !strip) return false; 3453 3454 /* Strip zaten yüklenmiÅse direkt davran */ 3455 if(strip.getAttribute('data-loaded') === '1'){ 3456 if(strip.getAttribute('data-has-variants') === '1'){ 3457 toggleStrip(productId); 3458 } else { 3459 addToCartSmart(productId); 3460 } 3461 return false; 3462 } 3463 3464 /* İlk tıklama - AJAX ile varyantları çek */ 3465 bag.classList.add('is-loading'); 3466 var productLink = card.getAttribute('data-lux-product-link'); 3467 3468 fetchVariants(productId, productLink, function(data){ 3469 bag.classList.remove('is-loading'); 3470 3471 var hasVariants = buildVariantUI(productId, data); 3472 3473 if(hasVariants){ 3474 /* Bedenler var - Åeridi aç */ 3475 toggleStrip(productId); 3476 } else { 3477 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 3478 addToCartSmart(productId); 3479 } 3480 }); 3481 3482 return false; 3483 }; 3484 3485 function toggleStrip(productId){ 3486 var strip = document.getElementById('size-strip-' + productId); 3487 var card = document.getElementById('card-' + productId); 3488 if(!strip) return; 3489 3490 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3491 if(s !== strip) s.classList.remove('open'); 3492 }); 3493 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3494 if(c !== card) c.classList.remove('sizes-open'); 3495 }); 3496 3497 strip.classList.toggle('open'); 3498 if(card) card.classList.toggle('sizes-open'); 3499 } 3500 3501 3502 /* ============================================ 3503 BEDEN TIKLAMASI 3504 ============================================ */ 3505 window.luxAddVariant = function(ev, elem){ 3506 ev.preventDefault(); 3507 ev.stopPropagation(); 3508 3509 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 3510 3511 var productId = elem.getAttribute('data-urun-id'); 3512 var varyantDeger = elem.getAttribute('data-varyant-deger'); 3513 3514 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 3515 if(!holder) return false; 3516 3517 /* Seçilen bedeni ilk select'e yaz */ 3518 var firstSelect = holder.querySelector('select[data-variant="0"]'); 3519 if(firstSelect){ 3520 firstSelect.value = varyantDeger; 3521 if(typeof jQuery !== "undefined"){ 3522 jQuery(firstSelect).val(varyantDeger).trigger('change'); 3523 } 3524 } 3525 3526 /* DiÄer select'lere ilk geçerli deÄeri koy */ 3527 var allSelects = holder.querySelectorAll('select[data-variant]'); 3528 allSelects.forEach(function(sel, idx){ 3529 if(idx === 0) return; 3530 if(sel.value) return; 3531 var options = sel.querySelectorAll('option'); 3532 for(var i = 0; i < options.length; i++){ 3533 if(options[i].value){ 3534 sel.value = options[i].value; 3535 if(typeof jQuery !== "undefined"){ 3536 jQuery(sel).val(options[i].value).trigger('change'); 3537 } 3538 break; 3539 } 3540 } 3541 }); 3542 3543 /* Görsel feedback */ 3544 elem.classList.add('adding'); 3545 var originalText = elem.textContent; 3546 elem.textContent = 'â'; 3547 3548 /* Sepete ekle */ 3549 addToCartSmart(productId, { 3550 checkVariant: true, 3551 variantCount: allSelects.length, 3552 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 3553 }); 3554 3555 setTimeout(function(){ 3556 elem.textContent = originalText; 3557 elem.classList.remove('adding'); 3558 closeAll(); 3559 }, 800); 3560 3561 return false; 3562 }; 3563 3564 3565 /* ============================================ 3566 SEPETE EKLE - Modal killer ile 3567 ============================================ */ 3568 function addToCartSmart(productId, extraOptions){ 3569 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 3570 3571 var options = { 3572 quantity: 1, 3573 hideNativeModal: 'lux-card-' + productId 3574 }; 3575 3576 if(extraOptions){
3577 Object.keys(extraOptions).forEach(function(k){ 3578 options[k] = extraOptions[k]; 3579 }); 3580 } else if(holder){ 3581 var selects = holder.querySelectorAll('select[data-variant]'); 3582 if(selects.length > 0){ 3583 options.checkVariant = true; 3584 options.variantCount = selects.length; 3585 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 3586 } 3587 } 3588 3589 startModalKill(2000); 3590 3591 if(typeof addCart === "function"){ 3592 try { 3593 addCart(productId, 'card', options); 3594 flashSuccess(productId); 3595 } catch(err){ 3596 console.error('Sepete ekleme hatası:', err); 3597 } 3598 } 3599 } 3600 3601})(); 3602</script>
3602</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 3603 data-lux-product-shell="1" 3604 data-lux-page="1"><style> 3605@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 3606 3607/* ===== VEZZA LUX CARD ===== */ 3608.card-product{ 3609 font-family:'Poppins',sans-serif; 3610 background:#fff !important; 3611 position:relative; 3612} 3613.card-product-inner{ 3614 background:transparent !important; 3615 position:relative; 3616} 3617.card-product .c-p-i-link, 3618.card-product a{ 3619 background:transparent !important; 3620} 3621.card-product-inner > div{ 3622 background:transparent !important; 3623} 3624.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 3625 background:transparent !important; 3626} 3627.card-product .card-product-content, 3628.card-product .price-group, 3629.card-product .prices{ 3630 background:transparent !important; 3631} 3632[class*="skeleton"], 3633[class*="placeholder"], 3634[class*="loading"]{ 3635 background:transparent !important; 3636} 3637 3638/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 3639.image-wrapper{ 3640 position:relative; 3641 width:100%; 3642 aspect-ratio:1/1; 3643 overflow:hidden; 3644 background:#fff !important; 3645} 3646 3647.image{ 3648 position:relative; 3649 width:100%; 3650 height:100%; 3651} 3652 3653.image-wrapper img{ 3654 width:100% !important; 3655 height:100% !important; 3656 object-fit:cover !important; 3657 object-position:center center !important; 3658 display:block; 3659 transition:transform .35s ease; 3660} 3661 3662/* ===== DISCOUNT ===== */ 3663.discount{ 3664 position:absolute; 3665 top:12px; 3666 left:12px; 3667 width:28px; 3668 height:48px; 3669 background:#e10b0b; 3670 color:#fff; 3671 font-size:12px; 3672 font-weight:600; 3673 display:flex; 3674 align-items:center; 3675 justify-content:center; 3676 writing-mode:vertical-rl; 3677 transform:rotate(180deg); 3678 letter-spacing:.5px; 3679 z-index:7; 3680} 3681 3682/* ===== FAV ===== */ 3683.lux-fav{ 3684 position:absolute; 3685 top:12px; 3686 right:12px; 3687 z-index:7; 3688} 3689.lux-fav a, 3690.lux-fav button{ 3691 background:transparent !important; 3692 border:0 !important; 3693 padding:0 !important; 3694 cursor:pointer; 3695 display:inline-flex; 3696 align-items:center; 3697 justify-content:center; 3698} 3699 3700/* ===== SEPET IKON ===== */ 3701.lux-bag{ 3702 position:absolute; 3703 bottom:12px; 3704 right:12px; 3705 z-index:7; 3706 width:34px; 3707 height:34px; 3708 display:inline-flex; 3709 align-items:center; 3710 justify-content:center; 3711 background:rgba(255,255,255,.92); 3712 border:1px solid rgba(0,0,0,.10); 3713 border-radius:10px; 3714 cursor:pointer; 3715 transition:.2s ease; 3716} 3717.lux-bag:hover{ 3718 background:#fff; 3719 border-color:rgba(0,0,0,.25); 3720} 3721.lux-bag.is-loading{ 3722 opacity:.6; 3723 cursor:wait; 3724} 3725.lux-bag.is-success{ 3726 background:#2e7d32 !important; 3727 border-color:#2e7d32 !important; 3728 color:#fff !important; 3729} 3730.card-product.sizes-open .lux-bag{ 3731 opacity:0; 3732 pointer-events:none; 3733} 3734 3735/* Loading spinner */ 3736.lux-bag.is-loading i::before{ 3737 content:"â³"; 3738} 3739 3740/* ===== SIZE STRIP ===== */ 3741.size-strip{ 3742 width:100%; 3743 max-height:0; 3744 overflow:hidden; 3745 background:#fff; 3746 display:flex; 3747 flex-wrap:wrap; 3748 transition:max-height .3s ease, border-color .3s ease; 3749 border-top:1px solid transparent; 3750 border-bottom:1px solid transparent; 3751} 3752.size-strip.open{ 3753 max-height:200px; 3754 border-top-color:rgba(0,0,0,.08); 3755 border-bottom-color:rgba(0,0,0,.08); 3756} 3757.size-item{ 3758 flex:1 0 auto; 3759 min-width:38px; 3760 height:42px; 3761 display:flex; 3762 align-items:center; 3763 justify-content:center; 3764 font-size:13px; 3765 font-weight:500; 3766 color:#111 !important; 3767 cursor:pointer; 3768 user-select:none; 3769 background:transparent; 3770 transition:background .15s ease, color .15s ease; 3771 border-right:1px solid rgba(0,0,0,.08); 3772} 3773.size-item:last-child{ border-right:0; } 3774.size-item:hover:not(.disabled):not(.adding){ 3775 background:#000 !important; 3776 color:#fff !important; 3777} 3778.size-item.disabled{ 3779 color:#111 !important; 3780 text-decoration:line-through !important; 3781 opacity:.30 !important; 3782 cursor:not-allowed; 3783} 3784.size-item.adding{ 3785 background:#2e7d32 !important; 3786 color:#fff !important; 3787 cursor:wait; 3788} 3789 3790/* ===== META ===== */ 3791.lux-meta{ 3792 padding:12px 6px 6px; 3793 background:transparent !important; 3794} 3795.lux-brand{ 3796 font-size:16px; 3797 font-weight:600; 3798 color:#111; 3799 margin-bottom:2px; 3800} 3801.lux-title{ 3802 font-size:14px; 3803 font-weight:400; 3804 line-height:1.45; 3805 color:#111; 3806 margin:0; 3807} 3808.lux-price{ 3809 margin-top:10px; 3810 display:flex; 3811 gap:10px; 3812 align-items:baseline; 3813 background:transparent !important; 3814} 3815.lux-price .list-price{ 3816 font-size:14px; 3817 font-weight:400; 3818 color:#111; 3819 text-decoration:line-through; 3820} 3821.lux-price .sale-price{ 3822 font-size:16px; 3823 font-weight:600; 3824 color:#e10b0b; 3825} 3826 3827.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
3828.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 3829</style><div class="card-product" 3830 id="card-10215" 3831 data-lux-card-id="10215" 3832 data-lux-product-link="https://www.vezzalux.com/lv-872-turkuaz-erkek-ayakkabi" 3833 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/lv-872-turkuaz-erkek-ayakkabi" class="c-p-i-link" title="Lv 872 Turkuaz Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c84775d55-29149030-sw1200sh1200.webp" alt="Lv 872 Turkuaz Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c84775d55-29149030-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c84599d98-51854622-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 3834 onclick="userProductFavourite('add', 10215)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 3835 id="lux-bag-10215" 3836 onclick="return luxBagClick(event, 10215);" 3837 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10215" style="display:none;"></div><div class="size-strip" id="size-strip-10215" data-loaded="0"></div><a href="https://www.vezzalux.com/lv-872-turkuaz-erkek-ayakkabi" class="c-p-i-link" title="Lv 872 Turkuaz Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Louis Vuitton</div><div class="lux-title">Lv 872 Turkuaz Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
3837<script> 3838(function(){ 3839 3840 /* Bir kez kur */ 3841 if(window.__luxCardInit) return; 3842 window.__luxCardInit = true; 3843 3844 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 3845 window.__luxVariantCache = window.__luxVariantCache || {}; 3846 3847 function closeAll(){ 3848 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3849 s.classList.remove('open'); 3850 }); 3851 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3852 c.classList.remove('sizes-open'); 3853 }); 3854 } 3855 3856 function flashSuccess(productId){ 3857 var bag = document.getElementById('lux-bag-' + productId); 3858 if(!bag) return; 3859 bag.classList.add('is-success'); 3860 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 3861 } 3862 3863 /* DıŠtıklama - kapat */ 3864 document.addEventListener('click', function(e){ 3865 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 3866 if(!inside) closeAll(); 3867 }); 3868 3869 document.addEventListener('keydown', function(e){ 3870 if(e.key === 'Escape') closeAll(); 3871 }); 3872 3873 3874 /* ============================================ 3875 MODAL KILLER - yedek güvence 3876 ============================================ */ 3877 var LUX_MODAL_KILL_ACTIVE = false; 3878 3879 function killVisibleModals(){ 3880 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 3881 modals.forEach(function(m){ 3882 var id = (m.id || '').toLowerCase(); 3883 var txt = (m.textContent || '').toLowerCase(); 3884 var isCartModal = id.indexOf('cart') > -1 3885 || id.indexOf('variant') > -1 3886 || id.indexOf('fast') > -1 3887 || id.indexOf('urun') > -1 3888 || txt.indexOf('lütfen seçin') > -1; 3889 3890 if(isCartModal){ 3891 if(typeof jQuery !== 'undefined'){ 3892 try { jQuery(m).modal('hide'); } catch(e){} 3893 } 3894 m.classList.remove('show','in'); 3895 m.style.display = 'none'; 3896 } 3897 }); 3898 3899 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 3900 document.body.classList.remove('modal-open'); 3901 document.body.style.overflow = ''; 3902 document.body.style.paddingRight = ''; 3903 } 3904 3905 function startModalKill(durationMs){ 3906 if(LUX_MODAL_KILL_ACTIVE) return; 3907 LUX_MODAL_KILL_ACTIVE = true; 3908 killVisibleModals(); 3909 var interval = setInterval(killVisibleModals, 50); 3910 setTimeout(function(){ 3911 clearInterval(interval); 3912 LUX_MODAL_KILL_ACTIVE = false; 3913 }, durationMs || 2000); 3914 } 3915 3916 3917 /* ============================================ 3918 AJAX: Varyantları detay sayfasından çek 3919 ============================================ 3920 Ãrün detay sayfasının tam HTML'ini indir, 3921 DOMParser ile parse et, varyantları bul 3922 ============================================ */ 3923 function fetchVariants(productId, productLink, callback){ 3924 3925 /* Cache'te varsa hemen döndür */ 3926 if(window.__luxVariantCache[productId]){ 3927 callback(window.__luxVariantCache[productId]); 3928 return; 3929 } 3930 3931 fetch(productLink, { 3932 method: 'GET', 3933 credentials: 'same-origin', 3934 headers: { 'Accept': 'text/html' } 3935 }) 3936 .then(function(r){ return r.text(); }) 3937 .then(function(html){ 3938 var parser = new DOMParser(); 3939 var doc = parser.parseFromString(html, 'text/html'); 3940 3941 /* Detay sayfasındaki .variant-box'ı bul */ 3942 var variantBox = doc.querySelector('.variant-box'); 3943 if(!variantBox){ 3944 callback({ variants: [], error: 'no_variant_box' }); 3945 return; 3946 } 3947 3948 /* Her varyant grubu için select'leri ve option'ları oku */ 3949 var variants = []; 3950 var variantLis = variantBox.querySelectorAll('.variant'); 3951 3952 variantLis.forEach(function(li, idx){ 3953 var nameEl = li.querySelector('.name'); 3954 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 3955 3956 var values = []; 3957 3958 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 3959 var optLinks = li.querySelectorAll('.options a'); 3960 3961 if(optLinks.length > 0){ 3962 optLinks.forEach(function(a){ 3963 /* Beden/renk deÄerini doÄru attribute'tan oku
3964 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 3965 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 3966 - textContent: fallback */ 3967 var deger = a.getAttribute('data-variant-value') 3968 || a.textContent.trim(); 3969 3970 /* Stok kontrolü - birden fazla yoldan kontrol et */ 3971 var isSoldOut = a.classList.contains('sold-out') 3972 || a.classList.contains('sold_out') 3973 || a.classList.contains('disabled') 3974 || a.classList.contains('stoksuz') 3975 || a.classList.contains('out-of-stock') 3976 || a.hasAttribute('disabled') 3977 || a.getAttribute('data-in-stock') === '0' 3978 || a.getAttribute('data-in-stock') === 'false' 3979 || a.getAttribute('data-stokta-var-mi') === '0' 3980 || a.getAttribute('data-stokta-var-mi') === 'false'; 3981 3982 values.push({ 3983 deger: deger, 3984 inStock: !isSoldOut 3985 }); 3986 }); 3987 } else { 3988 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 3989 var select = li.querySelector('select'); 3990 if(select){ 3991 var opts = select.querySelectorAll('option'); 3992 opts.forEach(function(o){ 3993 if(!o.value) return; 3994 values.push({ 3995 deger: o.value, 3996 inStock: !o.disabled 3997 }); 3998 }); 3999 } 4000 } 4001 4002 variants.push({ 4003 index: idx, 4004 baslik: name, 4005 values: values 4006 }); 4007 }); 4008 4009 var result = { variants: variants }; 4010 window.__luxVariantCache[productId] = result; 4011 callback(result); 4012 }) 4013 .catch(function(err){ 4014 console.error('Varyant çekme hatası:', err); 4015 callback({ variants: [], error: 'fetch_failed' }); 4016 }); 4017 } 4018 4019 4020 /* ============================================ 4021 Beden Åeridini ve gizli variant-box'ı oluÅtur 4022 ============================================ */ 4023 function buildVariantUI(productId, data){ 4024 var card = document.getElementById('card-' + productId); 4025 if(!card) return false; 4026 4027 var holder = card.querySelector('.lux-variant-box'); 4028 var strip = document.getElementById('size-strip-' + productId); 4029 if(!holder || !strip) return false; 4030 4031 if(!data.variants || data.variants.length === 0){ 4032 /* Varyant yok */ 4033 return false; 4034 } 4035 4036 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 4037 var displayVariant = null;
4038 data.variants.forEach(function(v){ 4039 if(!displayVariant && v.values.length > 1){ 4040 displayVariant = v; 4041 } 4042 }); 4043 4044 /* Gizli variant-box HTML */ 4045 var html = '<div class="variant-box"><ul>'; 4046 data.variants.forEach(function(v){ 4047 html += '<li class="variant">'; 4048 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 4049 4050 if(v.values.length > 1){ 4051 html += '<option value="">Lütfen seçin</option>'; 4052 } 4053 4054 v.values.forEach(function(val, i){ 4055 var selected = (v.values.length === 1) ? ' selected' : ''; 4056 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 4057 }); 4058 4059 html += '</select></li>'; 4060 }); 4061 html += '</ul></div>'; 4062 4063 holder.innerHTML = html; 4064 holder.style.display = ''; 4065 4066 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 4067 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 4068 if(displayVariant){ 4069 var stripHtml = ''; 4070 var inStockCount = 0; 4071 4072 /* DEBUG - console'da gör */ 4073 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 4074 4075 displayVariant.values.forEach(function(val){ 4076 /* SADECE stokta olanları ekle */ 4077 if(val.inStock === true){ 4078 stripHtml += '<div class="size-item" ' 4079 + 'data-urun-id="' + productId + '" ' 4080 + 'data-varyant-deger="' + val.deger + '" ' 4081 + 'onclick="return luxAddVariant(event, this);">' 4082 + val.deger + '</div>'; 4083 inStockCount++; 4084 } 4085 }); 4086 4087 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 4088 if(inStockCount === 0){ 4089 strip.setAttribute('data-loaded', '1'); 4090 strip.setAttribute('data-has-variants', '0'); 4091 return false; 4092 } 4093
4094 strip.innerHTML = stripHtml; 4095 strip.setAttribute('data-loaded', '1'); 4096 strip.setAttribute('data-has-variants', '1'); 4097 return true; 4098 } else { 4099 strip.setAttribute('data-loaded', '1'); 4100 strip.setAttribute('data-has-variants', '0'); 4101 return false; 4102 } 4103 } 4104 4105 4106 /* ============================================ 4107 SEPET IKONU TIKLAMASI 4108 ============================================ */ 4109 window.luxBagClick = function(ev, productId){ 4110 ev.preventDefault(); 4111 ev.stopPropagation(); 4112 4113 var card = document.getElementById('card-' + productId); 4114 var strip = document.getElementById('size-strip-' + productId); 4115 var bag = document.getElementById('lux-bag-' + productId); 4116 if(!card || !strip) return false; 4117 4118 /* Strip zaten yüklenmiÅse direkt davran */ 4119 if(strip.getAttribute('data-loaded') === '1'){ 4120 if(strip.getAttribute('data-has-variants') === '1'){ 4121 toggleStrip(productId); 4122 } else { 4123 addToCartSmart(productId); 4124 } 4125 return false; 4126 } 4127 4128 /* İlk tıklama - AJAX ile varyantları çek */ 4129 bag.classList.add('is-loading'); 4130 var productLink = card.getAttribute('data-lux-product-link'); 4131 4132 fetchVariants(productId, productLink, function(data){ 4133 bag.classList.remove('is-loading'); 4134 4135 var hasVariants = buildVariantUI(productId, data); 4136 4137 if(hasVariants){ 4138 /* Bedenler var - Åeridi aç */ 4139 toggleStrip(productId); 4140 } else { 4141 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 4142 addToCartSmart(productId); 4143 } 4144 }); 4145 4146 return false; 4147 }; 4148 4149 function toggleStrip(productId){ 4150 var strip = document.getElementById('size-strip-' + productId); 4151 var card = document.getElementById('card-' + productId); 4152 if(!strip) return; 4153 4154 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4155 if(s !== strip) s.classList.remove('open'); 4156 }); 4157 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4158 if(c !== card) c.classList.remove('sizes-open'); 4159 }); 4160 4161 strip.classList.toggle('open'); 4162 if(card) card.classList.toggle('sizes-open'); 4163 } 4164 4165 4166 /* ============================================ 4167 BEDEN TIKLAMASI 4168 ============================================ */ 4169 window.luxAddVariant = function(ev, elem){ 4170 ev.preventDefault(); 4171 ev.stopPropagation(); 4172 4173 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 4174 4175 var productId = elem.getAttribute('data-urun-id'); 4176 var varyantDeger = elem.getAttribute('data-varyant-deger'); 4177 4178 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4179 if(!holder) return false; 4180 4181 /* Seçilen bedeni ilk select'e yaz */ 4182 var firstSelect = holder.querySelector('select[data-variant="0"]'); 4183 if(firstSelect){ 4184 firstSelect.value = varyantDeger; 4185 if(typeof jQuery !== "undefined"){ 4186 jQuery(firstSelect).val(varyantDeger).trigger('change'); 4187 } 4188 } 4189 4190 /* DiÄer select'lere ilk geçerli deÄeri koy */ 4191 var allSelects = holder.querySelectorAll('select[data-variant]'); 4192 allSelects.forEach(function(sel, idx){ 4193 if(idx === 0) return; 4194 if(sel.value) return; 4195 var options = sel.querySelectorAll('option'); 4196 for(var i = 0; i < options.length; i++){ 4197 if(options[i].value){ 4198 sel.value = options[i].value; 4199 if(typeof jQuery !== "undefined"){ 4200 jQuery(sel).val(options[i].value).trigger('change'); 4201 } 4202 break; 4203 } 4204 } 4205 }); 4206 4207 /* Görsel feedback */ 4208 elem.classList.add('adding'); 4209 var originalText = elem.textContent; 4210 elem.textContent = 'â'; 4211 4212 /* Sepete ekle */ 4213 addToCartSmart(productId, { 4214 checkVariant: true, 4215 variantCount: allSelects.length, 4216 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 4217 }); 4218 4219 setTimeout(function(){ 4220 elem.textContent = originalText; 4221 elem.classList.remove('adding'); 4222 closeAll(); 4223 }, 800); 4224 4225 return false; 4226 }; 4227 4228 4229 /* ============================================ 4230 SEPETE EKLE - Modal killer ile 4231 ============================================ */ 4232 function addToCartSmart(productId, extraOptions){ 4233 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4234 4235 var options = { 4236 quantity: 1, 4237 hideNativeModal: 'lux-card-' + productId 4238 }; 4239 4240 if(extraOptions){
4241 Object.keys(extraOptions).forEach(function(k){ 4242 options[k] = extraOptions[k]; 4243 }); 4244 } else if(holder){ 4245 var selects = holder.querySelectorAll('select[data-variant]'); 4246 if(selects.length > 0){ 4247 options.checkVariant = true; 4248 options.variantCount = selects.length; 4249 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 4250 } 4251 } 4252 4253 startModalKill(2000); 4254 4255 if(typeof addCart === "function"){ 4256 try { 4257 addCart(productId, 'card', options); 4258 flashSuccess(productId); 4259 } catch(err){ 4260 console.error('Sepete ekleme hatası:', err); 4261 } 4262 } 4263 } 4264 4265})(); 4266</script>
4266</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 4267 data-lux-product-shell="1" 4268 data-lux-page="1"><style> 4269@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 4270 4271/* ===== VEZZA LUX CARD ===== */ 4272.card-product{ 4273 font-family:'Poppins',sans-serif; 4274 background:#fff !important; 4275 position:relative; 4276} 4277.card-product-inner{ 4278 background:transparent !important; 4279 position:relative; 4280} 4281.card-product .c-p-i-link, 4282.card-product a{ 4283 background:transparent !important; 4284} 4285.card-product-inner > div{ 4286 background:transparent !important; 4287} 4288.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 4289 background:transparent !important; 4290} 4291.card-product .card-product-content, 4292.card-product .price-group, 4293.card-product .prices{ 4294 background:transparent !important; 4295} 4296[class*="skeleton"], 4297[class*="placeholder"], 4298[class*="loading"]{ 4299 background:transparent !important; 4300} 4301 4302/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 4303.image-wrapper{ 4304 position:relative; 4305 width:100%; 4306 aspect-ratio:1/1; 4307 overflow:hidden; 4308 background:#fff !important; 4309} 4310 4311.image{ 4312 position:relative; 4313 width:100%; 4314 height:100%; 4315} 4316 4317.image-wrapper img{ 4318 width:100% !important; 4319 height:100% !important; 4320 object-fit:cover !important; 4321 object-position:center center !important; 4322 display:block; 4323 transition:transform .35s ease; 4324} 4325 4326/* ===== DISCOUNT ===== */ 4327.discount{ 4328 position:absolute; 4329 top:12px; 4330 left:12px; 4331 width:28px; 4332 height:48px; 4333 background:#e10b0b; 4334 color:#fff; 4335 font-size:12px; 4336 font-weight:600; 4337 display:flex; 4338 align-items:center; 4339 justify-content:center; 4340 writing-mode:vertical-rl; 4341 transform:rotate(180deg); 4342 letter-spacing:.5px; 4343 z-index:7; 4344} 4345 4346/* ===== FAV ===== */ 4347.lux-fav{ 4348 position:absolute; 4349 top:12px; 4350 right:12px; 4351 z-index:7; 4352} 4353.lux-fav a, 4354.lux-fav button{ 4355 background:transparent !important; 4356 border:0 !important; 4357 padding:0 !important; 4358 cursor:pointer; 4359 display:inline-flex; 4360 align-items:center; 4361 justify-content:center; 4362} 4363 4364/* ===== SEPET IKON ===== */ 4365.lux-bag{ 4366 position:absolute; 4367 bottom:12px; 4368 right:12px; 4369 z-index:7; 4370 width:34px; 4371 height:34px; 4372 display:inline-flex; 4373 align-items:center; 4374 justify-content:center; 4375 background:rgba(255,255,255,.92); 4376 border:1px solid rgba(0,0,0,.10); 4377 border-radius:10px; 4378 cursor:pointer; 4379 transition:.2s ease; 4380} 4381.lux-bag:hover{ 4382 background:#fff; 4383 border-color:rgba(0,0,0,.25); 4384} 4385.lux-bag.is-loading{ 4386 opacity:.6; 4387 cursor:wait; 4388} 4389.lux-bag.is-success{ 4390 background:#2e7d32 !important; 4391 border-color:#2e7d32 !important; 4392 color:#fff !important; 4393} 4394.card-product.sizes-open .lux-bag{ 4395 opacity:0; 4396 pointer-events:none; 4397} 4398 4399/* Loading spinner */ 4400.lux-bag.is-loading i::before{ 4401 content:"â³"; 4402} 4403 4404/* ===== SIZE STRIP ===== */ 4405.size-strip{ 4406 width:100%; 4407 max-height:0; 4408 overflow:hidden; 4409 background:#fff; 4410 display:flex; 4411 flex-wrap:wrap; 4412 transition:max-height .3s ease, border-color .3s ease; 4413 border-top:1px solid transparent; 4414 border-bottom:1px solid transparent; 4415} 4416.size-strip.open{ 4417 max-height:200px; 4418 border-top-color:rgba(0,0,0,.08); 4419 border-bottom-color:rgba(0,0,0,.08); 4420} 4421.size-item{ 4422 flex:1 0 auto; 4423 min-width:38px; 4424 height:42px; 4425 display:flex; 4426 align-items:center; 4427 justify-content:center; 4428 font-size:13px; 4429 font-weight:500; 4430 color:#111 !important; 4431 cursor:pointer; 4432 user-select:none; 4433 background:transparent; 4434 transition:background .15s ease, color .15s ease; 4435 border-right:1px solid rgba(0,0,0,.08); 4436} 4437.size-item:last-child{ border-right:0; } 4438.size-item:hover:not(.disabled):not(.adding){ 4439 background:#000 !important; 4440 color:#fff !important; 4441} 4442.size-item.disabled{ 4443 color:#111 !important; 4444 text-decoration:line-through !important; 4445 opacity:.30 !important; 4446 cursor:not-allowed; 4447} 4448.size-item.adding{ 4449 background:#2e7d32 !important; 4450 color:#fff !important; 4451 cursor:wait; 4452} 4453 4454/* ===== META ===== */ 4455.lux-meta{ 4456 padding:12px 6px 6px; 4457 background:transparent !important; 4458} 4459.lux-brand{ 4460 font-size:16px; 4461 font-weight:600; 4462 color:#111; 4463 margin-bottom:2px; 4464} 4465.lux-title{ 4466 font-size:14px; 4467 font-weight:400; 4468 line-height:1.45; 4469 color:#111; 4470 margin:0; 4471} 4472.lux-price{ 4473 margin-top:10px; 4474 display:flex; 4475 gap:10px; 4476 align-items:baseline; 4477 background:transparent !important; 4478} 4479.lux-price .list-price{ 4480 font-size:14px; 4481 font-weight:400; 4482 color:#111; 4483 text-decoration:line-through; 4484} 4485.lux-price .sale-price{ 4486 font-size:16px; 4487 font-weight:600; 4488 color:#e10b0b; 4489} 4490 4491.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
4492.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 4493</style><div class="card-product" 4494 id="card-9791" 4495 data-lux-card-id="9791" 4496 data-lux-product-link="https://www.vezzalux.com/fendi-922-bej-loafer-erkek-ayakkabi" 4497 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/fendi-922-bej-loafer-erkek-ayakkabi" class="c-p-i-link" title="Fendi 922 Bej Loafer Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc5a08728-23129189-sw800sh800.webp" alt="Fendi 922 Bej Loafer Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc5a08728-23129189-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc5b7a300-10924974-sw800sh800.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 4498 onclick="userProductFavourite('add', 9791)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 4499 id="lux-bag-9791" 4500 onclick="return luxBagClick(event, 9791);" 4501 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="9791" style="display:none;"></div><div class="size-strip" id="size-strip-9791" data-loaded="0"></div><a href="https://www.vezzalux.com/fendi-922-bej-loafer-erkek-ayakkabi" class="c-p-i-link" title="Fendi 922 Bej Loafer Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Fendi</div><div class="lux-title">Fendi 922 Bej Loafer Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
4501<script> 4502(function(){ 4503 4504 /* Bir kez kur */ 4505 if(window.__luxCardInit) return; 4506 window.__luxCardInit = true; 4507 4508 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 4509 window.__luxVariantCache = window.__luxVariantCache || {}; 4510 4511 function closeAll(){ 4512 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4513 s.classList.remove('open'); 4514 }); 4515 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4516 c.classList.remove('sizes-open'); 4517 }); 4518 } 4519 4520 function flashSuccess(productId){ 4521 var bag = document.getElementById('lux-bag-' + productId); 4522 if(!bag) return; 4523 bag.classList.add('is-success'); 4524 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 4525 } 4526 4527 /* DıŠtıklama - kapat */ 4528 document.addEventListener('click', function(e){ 4529 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 4530 if(!inside) closeAll(); 4531 }); 4532 4533 document.addEventListener('keydown', function(e){ 4534 if(e.key === 'Escape') closeAll(); 4535 }); 4536 4537 4538 /* ============================================ 4539 MODAL KILLER - yedek güvence 4540 ============================================ */ 4541 var LUX_MODAL_KILL_ACTIVE = false; 4542 4543 function killVisibleModals(){ 4544 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 4545 modals.forEach(function(m){ 4546 var id = (m.id || '').toLowerCase(); 4547 var txt = (m.textContent || '').toLowerCase(); 4548 var isCartModal = id.indexOf('cart') > -1 4549 || id.indexOf('variant') > -1 4550 || id.indexOf('fast') > -1 4551 || id.indexOf('urun') > -1 4552 || txt.indexOf('lütfen seçin') > -1; 4553 4554 if(isCartModal){ 4555 if(typeof jQuery !== 'undefined'){ 4556 try { jQuery(m).modal('hide'); } catch(e){} 4557 } 4558 m.classList.remove('show','in'); 4559 m.style.display = 'none'; 4560 } 4561 }); 4562 4563 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 4564 document.body.classList.remove('modal-open'); 4565 document.body.style.overflow = ''; 4566 document.body.style.paddingRight = ''; 4567 } 4568 4569 function startModalKill(durationMs){ 4570 if(LUX_MODAL_KILL_ACTIVE) return; 4571 LUX_MODAL_KILL_ACTIVE = true; 4572 killVisibleModals(); 4573 var interval = setInterval(killVisibleModals, 50); 4574 setTimeout(function(){ 4575 clearInterval(interval); 4576 LUX_MODAL_KILL_ACTIVE = false; 4577 }, durationMs || 2000); 4578 } 4579 4580 4581 /* ============================================ 4582 AJAX: Varyantları detay sayfasından çek 4583 ============================================ 4584 Ãrün detay sayfasının tam HTML'ini indir, 4585 DOMParser ile parse et, varyantları bul 4586 ============================================ */ 4587 function fetchVariants(productId, productLink, callback){ 4588 4589 /* Cache'te varsa hemen döndür */ 4590 if(window.__luxVariantCache[productId]){ 4591 callback(window.__luxVariantCache[productId]); 4592 return; 4593 } 4594 4595 fetch(productLink, { 4596 method: 'GET', 4597 credentials: 'same-origin', 4598 headers: { 'Accept': 'text/html' } 4599 }) 4600 .then(function(r){ return r.text(); }) 4601 .then(function(html){ 4602 var parser = new DOMParser(); 4603 var doc = parser.parseFromString(html, 'text/html'); 4604 4605 /* Detay sayfasındaki .variant-box'ı bul */ 4606 var variantBox = doc.querySelector('.variant-box'); 4607 if(!variantBox){ 4608 callback({ variants: [], error: 'no_variant_box' }); 4609 return; 4610 } 4611 4612 /* Her varyant grubu için select'leri ve option'ları oku */ 4613 var variants = []; 4614 var variantLis = variantBox.querySelectorAll('.variant'); 4615 4616 variantLis.forEach(function(li, idx){ 4617 var nameEl = li.querySelector('.name'); 4618 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 4619 4620 var values = []; 4621 4622 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 4623 var optLinks = li.querySelectorAll('.options a'); 4624 4625 if(optLinks.length > 0){ 4626 optLinks.forEach(function(a){ 4627 /* Beden/renk deÄerini doÄru attribute'tan oku
4628 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 4629 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 4630 - textContent: fallback */ 4631 var deger = a.getAttribute('data-variant-value') 4632 || a.textContent.trim(); 4633 4634 /* Stok kontrolü - birden fazla yoldan kontrol et */ 4635 var isSoldOut = a.classList.contains('sold-out') 4636 || a.classList.contains('sold_out') 4637 || a.classList.contains('disabled') 4638 || a.classList.contains('stoksuz') 4639 || a.classList.contains('out-of-stock') 4640 || a.hasAttribute('disabled') 4641 || a.getAttribute('data-in-stock') === '0' 4642 || a.getAttribute('data-in-stock') === 'false' 4643 || a.getAttribute('data-stokta-var-mi') === '0' 4644 || a.getAttribute('data-stokta-var-mi') === 'false'; 4645 4646 values.push({ 4647 deger: deger, 4648 inStock: !isSoldOut 4649 }); 4650 }); 4651 } else { 4652 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 4653 var select = li.querySelector('select'); 4654 if(select){ 4655 var opts = select.querySelectorAll('option'); 4656 opts.forEach(function(o){ 4657 if(!o.value) return; 4658 values.push({ 4659 deger: o.value, 4660 inStock: !o.disabled 4661 }); 4662 }); 4663 } 4664 } 4665 4666 variants.push({ 4667 index: idx, 4668 baslik: name, 4669 values: values 4670 }); 4671 }); 4672 4673 var result = { variants: variants }; 4674 window.__luxVariantCache[productId] = result; 4675 callback(result); 4676 }) 4677 .catch(function(err){ 4678 console.error('Varyant çekme hatası:', err); 4679 callback({ variants: [], error: 'fetch_failed' }); 4680 }); 4681 } 4682 4683 4684 /* ============================================ 4685 Beden Åeridini ve gizli variant-box'ı oluÅtur 4686 ============================================ */ 4687 function buildVariantUI(productId, data){ 4688 var card = document.getElementById('card-' + productId); 4689 if(!card) return false; 4690 4691 var holder = card.querySelector('.lux-variant-box'); 4692 var strip = document.getElementById('size-strip-' + productId); 4693 if(!holder || !strip) return false; 4694 4695 if(!data.variants || data.variants.length === 0){ 4696 /* Varyant yok */ 4697 return false; 4698 } 4699 4700 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 4701 var displayVariant = null;
4702 data.variants.forEach(function(v){ 4703 if(!displayVariant && v.values.length > 1){ 4704 displayVariant = v; 4705 } 4706 }); 4707 4708 /* Gizli variant-box HTML */ 4709 var html = '<div class="variant-box"><ul>'; 4710 data.variants.forEach(function(v){ 4711 html += '<li class="variant">'; 4712 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 4713 4714 if(v.values.length > 1){ 4715 html += '<option value="">Lütfen seçin</option>'; 4716 } 4717 4718 v.values.forEach(function(val, i){ 4719 var selected = (v.values.length === 1) ? ' selected' : ''; 4720 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 4721 }); 4722 4723 html += '</select></li>'; 4724 }); 4725 html += '</ul></div>'; 4726 4727 holder.innerHTML = html; 4728 holder.style.display = ''; 4729 4730 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 4731 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 4732 if(displayVariant){ 4733 var stripHtml = ''; 4734 var inStockCount = 0; 4735 4736 /* DEBUG - console'da gör */ 4737 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 4738 4739 displayVariant.values.forEach(function(val){ 4740 /* SADECE stokta olanları ekle */ 4741 if(val.inStock === true){ 4742 stripHtml += '<div class="size-item" ' 4743 + 'data-urun-id="' + productId + '" ' 4744 + 'data-varyant-deger="' + val.deger + '" ' 4745 + 'onclick="return luxAddVariant(event, this);">' 4746 + val.deger + '</div>'; 4747 inStockCount++; 4748 } 4749 }); 4750 4751 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 4752 if(inStockCount === 0){ 4753 strip.setAttribute('data-loaded', '1'); 4754 strip.setAttribute('data-has-variants', '0'); 4755 return false; 4756 } 4757
4758 strip.innerHTML = stripHtml; 4759 strip.setAttribute('data-loaded', '1'); 4760 strip.setAttribute('data-has-variants', '1'); 4761 return true; 4762 } else { 4763 strip.setAttribute('data-loaded', '1'); 4764 strip.setAttribute('data-has-variants', '0'); 4765 return false; 4766 } 4767 } 4768 4769 4770 /* ============================================ 4771 SEPET IKONU TIKLAMASI 4772 ============================================ */ 4773 window.luxBagClick = function(ev, productId){ 4774 ev.preventDefault(); 4775 ev.stopPropagation(); 4776 4777 var card = document.getElementById('card-' + productId); 4778 var strip = document.getElementById('size-strip-' + productId); 4779 var bag = document.getElementById('lux-bag-' + productId); 4780 if(!card || !strip) return false; 4781 4782 /* Strip zaten yüklenmiÅse direkt davran */ 4783 if(strip.getAttribute('data-loaded') === '1'){ 4784 if(strip.getAttribute('data-has-variants') === '1'){ 4785 toggleStrip(productId); 4786 } else { 4787 addToCartSmart(productId); 4788 } 4789 return false; 4790 } 4791 4792 /* İlk tıklama - AJAX ile varyantları çek */ 4793 bag.classList.add('is-loading'); 4794 var productLink = card.getAttribute('data-lux-product-link'); 4795 4796 fetchVariants(productId, productLink, function(data){ 4797 bag.classList.remove('is-loading'); 4798 4799 var hasVariants = buildVariantUI(productId, data); 4800 4801 if(hasVariants){ 4802 /* Bedenler var - Åeridi aç */ 4803 toggleStrip(productId); 4804 } else { 4805 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 4806 addToCartSmart(productId); 4807 } 4808 }); 4809 4810 return false; 4811 }; 4812 4813 function toggleStrip(productId){ 4814 var strip = document.getElementById('size-strip-' + productId); 4815 var card = document.getElementById('card-' + productId); 4816 if(!strip) return; 4817 4818 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4819 if(s !== strip) s.classList.remove('open'); 4820 }); 4821 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4822 if(c !== card) c.classList.remove('sizes-open'); 4823 }); 4824 4825 strip.classList.toggle('open'); 4826 if(card) card.classList.toggle('sizes-open'); 4827 } 4828 4829 4830 /* ============================================ 4831 BEDEN TIKLAMASI 4832 ============================================ */ 4833 window.luxAddVariant = function(ev, elem){ 4834 ev.preventDefault(); 4835 ev.stopPropagation(); 4836 4837 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 4838 4839 var productId = elem.getAttribute('data-urun-id'); 4840 var varyantDeger = elem.getAttribute('data-varyant-deger'); 4841 4842 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4843 if(!holder) return false; 4844 4845 /* Seçilen bedeni ilk select'e yaz */ 4846 var firstSelect = holder.querySelector('select[data-variant="0"]'); 4847 if(firstSelect){ 4848 firstSelect.value = varyantDeger; 4849 if(typeof jQuery !== "undefined"){ 4850 jQuery(firstSelect).val(varyantDeger).trigger('change'); 4851 } 4852 } 4853 4854 /* DiÄer select'lere ilk geçerli deÄeri koy */ 4855 var allSelects = holder.querySelectorAll('select[data-variant]'); 4856 allSelects.forEach(function(sel, idx){ 4857 if(idx === 0) return; 4858 if(sel.value) return; 4859 var options = sel.querySelectorAll('option'); 4860 for(var i = 0; i < options.length; i++){ 4861 if(options[i].value){ 4862 sel.value = options[i].value; 4863 if(typeof jQuery !== "undefined"){ 4864 jQuery(sel).val(options[i].value).trigger('change'); 4865 } 4866 break; 4867 } 4868 } 4869 }); 4870 4871 /* Görsel feedback */ 4872 elem.classList.add('adding'); 4873 var originalText = elem.textContent; 4874 elem.textContent = 'â'; 4875 4876 /* Sepete ekle */ 4877 addToCartSmart(productId, { 4878 checkVariant: true, 4879 variantCount: allSelects.length, 4880 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 4881 }); 4882 4883 setTimeout(function(){ 4884 elem.textContent = originalText; 4885 elem.classList.remove('adding'); 4886 closeAll(); 4887 }, 800); 4888 4889 return false; 4890 }; 4891 4892 4893 /* ============================================ 4894 SEPETE EKLE - Modal killer ile 4895 ============================================ */ 4896 function addToCartSmart(productId, extraOptions){ 4897 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4898 4899 var options = { 4900 quantity: 1, 4901 hideNativeModal: 'lux-card-' + productId 4902 }; 4903 4904 if(extraOptions){
4905 Object.keys(extraOptions).forEach(function(k){ 4906 options[k] = extraOptions[k]; 4907 }); 4908 } else if(holder){ 4909 var selects = holder.querySelectorAll('select[data-variant]'); 4910 if(selects.length > 0){ 4911 options.checkVariant = true; 4912 options.variantCount = selects.length; 4913 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 4914 } 4915 } 4916 4917 startModalKill(2000); 4918 4919 if(typeof addCart === "function"){ 4920 try { 4921 addCart(productId, 'card', options); 4922 flashSuccess(productId); 4923 } catch(err){ 4924 console.error('Sepete ekleme hatası:', err); 4925 } 4926 } 4927 } 4928 4929})(); 4930</script>
4930</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 4931 data-lux-product-shell="1" 4932 data-lux-page="1"><style> 4933@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 4934 4935/* ===== VEZZA LUX CARD ===== */ 4936.card-product{ 4937 font-family:'Poppins',sans-serif; 4938 background:#fff !important; 4939 position:relative; 4940} 4941.card-product-inner{ 4942 background:transparent !important; 4943 position:relative; 4944} 4945.card-product .c-p-i-link, 4946.card-product a{ 4947 background:transparent !important; 4948} 4949.card-product-inner > div{ 4950 background:transparent !important; 4951} 4952.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 4953 background:transparent !important; 4954} 4955.card-product .card-product-content, 4956.card-product .price-group, 4957.card-product .prices{ 4958 background:transparent !important; 4959} 4960[class*="skeleton"], 4961[class*="placeholder"], 4962[class*="loading"]{ 4963 background:transparent !important; 4964} 4965 4966/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 4967.image-wrapper{ 4968 position:relative; 4969 width:100%; 4970 aspect-ratio:1/1; 4971 overflow:hidden; 4972 background:#fff !important; 4973} 4974 4975.image{ 4976 position:relative; 4977 width:100%; 4978 height:100%; 4979} 4980 4981.image-wrapper img{ 4982 width:100% !important; 4983 height:100% !important; 4984 object-fit:cover !important; 4985 object-position:center center !important; 4986 display:block; 4987 transition:transform .35s ease; 4988} 4989 4990/* ===== DISCOUNT ===== */ 4991.discount{ 4992 position:absolute; 4993 top:12px; 4994 left:12px; 4995 width:28px; 4996 height:48px; 4997 background:#e10b0b; 4998 color:#fff; 4999 font-size:12px; 5000 font-weight:600; 5001 display:flex; 5002 align-items:center; 5003 justify-content:center; 5004 writing-mode:vertical-rl; 5005 transform:rotate(180deg); 5006 letter-spacing:.5px; 5007 z-index:7; 5008} 5009 5010/* ===== FAV ===== */ 5011.lux-fav{ 5012 position:absolute; 5013 top:12px; 5014 right:12px; 5015 z-index:7; 5016} 5017.lux-fav a, 5018.lux-fav button{ 5019 background:transparent !important; 5020 border:0 !important; 5021 padding:0 !important; 5022 cursor:pointer; 5023 display:inline-flex; 5024 align-items:center; 5025 justify-content:center; 5026} 5027 5028/* ===== SEPET IKON ===== */ 5029.lux-bag{ 5030 position:absolute; 5031 bottom:12px; 5032 right:12px; 5033 z-index:7; 5034 width:34px; 5035 height:34px; 5036 display:inline-flex; 5037 align-items:center; 5038 justify-content:center; 5039 background:rgba(255,255,255,.92); 5040 border:1px solid rgba(0,0,0,.10); 5041 border-radius:10px; 5042 cursor:pointer; 5043 transition:.2s ease; 5044} 5045.lux-bag:hover{ 5046 background:#fff; 5047 border-color:rgba(0,0,0,.25); 5048} 5049.lux-bag.is-loading{ 5050 opacity:.6; 5051 cursor:wait; 5052} 5053.lux-bag.is-success{ 5054 background:#2e7d32 !important; 5055 border-color:#2e7d32 !important; 5056 color:#fff !important; 5057} 5058.card-product.sizes-open .lux-bag{ 5059 opacity:0; 5060 pointer-events:none; 5061} 5062 5063/* Loading spinner */ 5064.lux-bag.is-loading i::before{ 5065 content:"â³"; 5066} 5067 5068/* ===== SIZE STRIP ===== */ 5069.size-strip{ 5070 width:100%; 5071 max-height:0; 5072 overflow:hidden; 5073 background:#fff; 5074 display:flex; 5075 flex-wrap:wrap; 5076 transition:max-height .3s ease, border-color .3s ease; 5077 border-top:1px solid transparent; 5078 border-bottom:1px solid transparent; 5079} 5080.size-strip.open{ 5081 max-height:200px; 5082 border-top-color:rgba(0,0,0,.08); 5083 border-bottom-color:rgba(0,0,0,.08); 5084} 5085.size-item{ 5086 flex:1 0 auto; 5087 min-width:38px; 5088 height:42px; 5089 display:flex; 5090 align-items:center; 5091 justify-content:center; 5092 font-size:13px; 5093 font-weight:500; 5094 color:#111 !important; 5095 cursor:pointer; 5096 user-select:none; 5097 background:transparent; 5098 transition:background .15s ease, color .15s ease; 5099 border-right:1px solid rgba(0,0,0,.08); 5100} 5101.size-item:last-child{ border-right:0; } 5102.size-item:hover:not(.disabled):not(.adding){ 5103 background:#000 !important; 5104 color:#fff !important; 5105} 5106.size-item.disabled{ 5107 color:#111 !important; 5108 text-decoration:line-through !important; 5109 opacity:.30 !important; 5110 cursor:not-allowed; 5111} 5112.size-item.adding{ 5113 background:#2e7d32 !important; 5114 color:#fff !important; 5115 cursor:wait; 5116} 5117 5118/* ===== META ===== */ 5119.lux-meta{ 5120 padding:12px 6px 6px; 5121 background:transparent !important; 5122} 5123.lux-brand{ 5124 font-size:16px; 5125 font-weight:600; 5126 color:#111; 5127 margin-bottom:2px; 5128} 5129.lux-title{ 5130 font-size:14px; 5131 font-weight:400; 5132 line-height:1.45; 5133 color:#111; 5134 margin:0; 5135} 5136.lux-price{ 5137 margin-top:10px; 5138 display:flex; 5139 gap:10px; 5140 align-items:baseline; 5141 background:transparent !important; 5142} 5143.lux-price .list-price{ 5144 font-size:14px; 5145 font-weight:400; 5146 color:#111; 5147 text-decoration:line-through; 5148} 5149.lux-price .sale-price{ 5150 font-size:16px; 5151 font-weight:600; 5152 color:#e10b0b; 5153} 5154 5155.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
5156.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 5157</style><div class="card-product" 5158 id="card-10306" 5159 data-lux-card-id="10306" 5160 data-lux-product-link="https://www.vezzalux.com/mcq-983-full-beyaz-desenli-erkek-ayakkabi" 5161 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/mcq-983-full-beyaz-desenli-erkek-ayakkabi" class="c-p-i-link" title="Mcq 983 Full Beyaz Desenli Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca7bd3539-57314459-sw1200sh1200.webp" alt="Mcq 983 Full Beyaz Desenli Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca7bd3539-57314459-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca7d26587-11767484-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 5162 onclick="userProductFavourite('add', 10306)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 5163 id="lux-bag-10306" 5164 onclick="return luxBagClick(event, 10306);" 5165 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10306" style="display:none;"></div><div class="size-strip" id="size-strip-10306" data-loaded="0"></div><a href="https://www.vezzalux.com/mcq-983-full-beyaz-desenli-erkek-ayakkabi" class="c-p-i-link" title="Mcq 983 Full Beyaz Desenli Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Alexander Mcqueen</div><div class="lux-title">Mcq 983 Full Beyaz Desenli Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
5165<script> 5166(function(){ 5167 5168 /* Bir kez kur */ 5169 if(window.__luxCardInit) return; 5170 window.__luxCardInit = true; 5171 5172 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 5173 window.__luxVariantCache = window.__luxVariantCache || {}; 5174 5175 function closeAll(){ 5176 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5177 s.classList.remove('open'); 5178 }); 5179 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5180 c.classList.remove('sizes-open'); 5181 }); 5182 } 5183 5184 function flashSuccess(productId){ 5185 var bag = document.getElementById('lux-bag-' + productId); 5186 if(!bag) return; 5187 bag.classList.add('is-success'); 5188 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 5189 } 5190 5191 /* DıŠtıklama - kapat */ 5192 document.addEventListener('click', function(e){ 5193 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 5194 if(!inside) closeAll(); 5195 }); 5196 5197 document.addEventListener('keydown', function(e){ 5198 if(e.key === 'Escape') closeAll(); 5199 }); 5200 5201 5202 /* ============================================ 5203 MODAL KILLER - yedek güvence 5204 ============================================ */ 5205 var LUX_MODAL_KILL_ACTIVE = false; 5206 5207 function killVisibleModals(){ 5208 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 5209 modals.forEach(function(m){ 5210 var id = (m.id || '').toLowerCase(); 5211 var txt = (m.textContent || '').toLowerCase(); 5212 var isCartModal = id.indexOf('cart') > -1 5213 || id.indexOf('variant') > -1 5214 || id.indexOf('fast') > -1 5215 || id.indexOf('urun') > -1 5216 || txt.indexOf('lütfen seçin') > -1; 5217 5218 if(isCartModal){ 5219 if(typeof jQuery !== 'undefined'){ 5220 try { jQuery(m).modal('hide'); } catch(e){} 5221 } 5222 m.classList.remove('show','in'); 5223 m.style.display = 'none'; 5224 } 5225 }); 5226 5227 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 5228 document.body.classList.remove('modal-open'); 5229 document.body.style.overflow = ''; 5230 document.body.style.paddingRight = ''; 5231 } 5232 5233 function startModalKill(durationMs){ 5234 if(LUX_MODAL_KILL_ACTIVE) return; 5235 LUX_MODAL_KILL_ACTIVE = true; 5236 killVisibleModals(); 5237 var interval = setInterval(killVisibleModals, 50); 5238 setTimeout(function(){ 5239 clearInterval(interval); 5240 LUX_MODAL_KILL_ACTIVE = false; 5241 }, durationMs || 2000); 5242 } 5243 5244 5245 /* ============================================ 5246 AJAX: Varyantları detay sayfasından çek 5247 ============================================ 5248 Ãrün detay sayfasının tam HTML'ini indir, 5249 DOMParser ile parse et, varyantları bul 5250 ============================================ */ 5251 function fetchVariants(productId, productLink, callback){ 5252 5253 /* Cache'te varsa hemen döndür */ 5254 if(window.__luxVariantCache[productId]){ 5255 callback(window.__luxVariantCache[productId]); 5256 return; 5257 } 5258 5259 fetch(productLink, { 5260 method: 'GET', 5261 credentials: 'same-origin', 5262 headers: { 'Accept': 'text/html' } 5263 }) 5264 .then(function(r){ return r.text(); }) 5265 .then(function(html){ 5266 var parser = new DOMParser(); 5267 var doc = parser.parseFromString(html, 'text/html'); 5268 5269 /* Detay sayfasındaki .variant-box'ı bul */ 5270 var variantBox = doc.querySelector('.variant-box'); 5271 if(!variantBox){ 5272 callback({ variants: [], error: 'no_variant_box' }); 5273 return; 5274 } 5275 5276 /* Her varyant grubu için select'leri ve option'ları oku */ 5277 var variants = []; 5278 var variantLis = variantBox.querySelectorAll('.variant'); 5279 5280 variantLis.forEach(function(li, idx){ 5281 var nameEl = li.querySelector('.name'); 5282 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 5283 5284 var values = []; 5285 5286 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 5287 var optLinks = li.querySelectorAll('.options a'); 5288 5289 if(optLinks.length > 0){ 5290 optLinks.forEach(function(a){ 5291 /* Beden/renk deÄerini doÄru attribute'tan oku
5292 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 5293 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 5294 - textContent: fallback */ 5295 var deger = a.getAttribute('data-variant-value') 5296 || a.textContent.trim(); 5297 5298 /* Stok kontrolü - birden fazla yoldan kontrol et */ 5299 var isSoldOut = a.classList.contains('sold-out') 5300 || a.classList.contains('sold_out') 5301 || a.classList.contains('disabled') 5302 || a.classList.contains('stoksuz') 5303 || a.classList.contains('out-of-stock') 5304 || a.hasAttribute('disabled') 5305 || a.getAttribute('data-in-stock') === '0' 5306 || a.getAttribute('data-in-stock') === 'false' 5307 || a.getAttribute('data-stokta-var-mi') === '0' 5308 || a.getAttribute('data-stokta-var-mi') === 'false'; 5309 5310 values.push({ 5311 deger: deger, 5312 inStock: !isSoldOut 5313 }); 5314 }); 5315 } else { 5316 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 5317 var select = li.querySelector('select'); 5318 if(select){ 5319 var opts = select.querySelectorAll('option'); 5320 opts.forEach(function(o){ 5321 if(!o.value) return; 5322 values.push({ 5323 deger: o.value, 5324 inStock: !o.disabled 5325 }); 5326 }); 5327 } 5328 } 5329 5330 variants.push({ 5331 index: idx, 5332 baslik: name, 5333 values: values 5334 }); 5335 }); 5336 5337 var result = { variants: variants }; 5338 window.__luxVariantCache[productId] = result; 5339 callback(result); 5340 }) 5341 .catch(function(err){ 5342 console.error('Varyant çekme hatası:', err); 5343 callback({ variants: [], error: 'fetch_failed' }); 5344 }); 5345 } 5346 5347 5348 /* ============================================ 5349 Beden Åeridini ve gizli variant-box'ı oluÅtur 5350 ============================================ */ 5351 function buildVariantUI(productId, data){ 5352 var card = document.getElementById('card-' + productId); 5353 if(!card) return false; 5354 5355 var holder = card.querySelector('.lux-variant-box'); 5356 var strip = document.getElementById('size-strip-' + productId); 5357 if(!holder || !strip) return false; 5358 5359 if(!data.variants || data.variants.length === 0){ 5360 /* Varyant yok */ 5361 return false; 5362 } 5363 5364 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 5365 var displayVariant = null;
5366 data.variants.forEach(function(v){ 5367 if(!displayVariant && v.values.length > 1){ 5368 displayVariant = v; 5369 } 5370 }); 5371 5372 /* Gizli variant-box HTML */ 5373 var html = '<div class="variant-box"><ul>'; 5374 data.variants.forEach(function(v){ 5375 html += '<li class="variant">'; 5376 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 5377 5378 if(v.values.length > 1){ 5379 html += '<option value="">Lütfen seçin</option>'; 5380 } 5381 5382 v.values.forEach(function(val, i){ 5383 var selected = (v.values.length === 1) ? ' selected' : ''; 5384 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 5385 }); 5386 5387 html += '</select></li>'; 5388 }); 5389 html += '</ul></div>'; 5390 5391 holder.innerHTML = html; 5392 holder.style.display = ''; 5393 5394 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 5395 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 5396 if(displayVariant){ 5397 var stripHtml = ''; 5398 var inStockCount = 0; 5399 5400 /* DEBUG - console'da gör */ 5401 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 5402 5403 displayVariant.values.forEach(function(val){ 5404 /* SADECE stokta olanları ekle */ 5405 if(val.inStock === true){ 5406 stripHtml += '<div class="size-item" ' 5407 + 'data-urun-id="' + productId + '" ' 5408 + 'data-varyant-deger="' + val.deger + '" ' 5409 + 'onclick="return luxAddVariant(event, this);">' 5410 + val.deger + '</div>'; 5411 inStockCount++; 5412 } 5413 }); 5414 5415 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 5416 if(inStockCount === 0){ 5417 strip.setAttribute('data-loaded', '1'); 5418 strip.setAttribute('data-has-variants', '0'); 5419 return false; 5420 } 5421
5422 strip.innerHTML = stripHtml; 5423 strip.setAttribute('data-loaded', '1'); 5424 strip.setAttribute('data-has-variants', '1'); 5425 return true; 5426 } else { 5427 strip.setAttribute('data-loaded', '1'); 5428 strip.setAttribute('data-has-variants', '0'); 5429 return false; 5430 } 5431 } 5432 5433 5434 /* ============================================ 5435 SEPET IKONU TIKLAMASI 5436 ============================================ */ 5437 window.luxBagClick = function(ev, productId){ 5438 ev.preventDefault(); 5439 ev.stopPropagation(); 5440 5441 var card = document.getElementById('card-' + productId); 5442 var strip = document.getElementById('size-strip-' + productId); 5443 var bag = document.getElementById('lux-bag-' + productId); 5444 if(!card || !strip) return false; 5445 5446 /* Strip zaten yüklenmiÅse direkt davran */ 5447 if(strip.getAttribute('data-loaded') === '1'){ 5448 if(strip.getAttribute('data-has-variants') === '1'){ 5449 toggleStrip(productId); 5450 } else { 5451 addToCartSmart(productId); 5452 } 5453 return false; 5454 } 5455 5456 /* İlk tıklama - AJAX ile varyantları çek */ 5457 bag.classList.add('is-loading'); 5458 var productLink = card.getAttribute('data-lux-product-link'); 5459 5460 fetchVariants(productId, productLink, function(data){ 5461 bag.classList.remove('is-loading'); 5462 5463 var hasVariants = buildVariantUI(productId, data); 5464 5465 if(hasVariants){ 5466 /* Bedenler var - Åeridi aç */ 5467 toggleStrip(productId); 5468 } else { 5469 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 5470 addToCartSmart(productId); 5471 } 5472 }); 5473 5474 return false; 5475 }; 5476 5477 function toggleStrip(productId){ 5478 var strip = document.getElementById('size-strip-' + productId); 5479 var card = document.getElementById('card-' + productId); 5480 if(!strip) return; 5481 5482 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5483 if(s !== strip) s.classList.remove('open'); 5484 }); 5485 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5486 if(c !== card) c.classList.remove('sizes-open'); 5487 }); 5488 5489 strip.classList.toggle('open'); 5490 if(card) card.classList.toggle('sizes-open'); 5491 } 5492 5493 5494 /* ============================================ 5495 BEDEN TIKLAMASI 5496 ============================================ */ 5497 window.luxAddVariant = function(ev, elem){ 5498 ev.preventDefault(); 5499 ev.stopPropagation(); 5500 5501 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 5502 5503 var productId = elem.getAttribute('data-urun-id'); 5504 var varyantDeger = elem.getAttribute('data-varyant-deger'); 5505 5506 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 5507 if(!holder) return false; 5508 5509 /* Seçilen bedeni ilk select'e yaz */ 5510 var firstSelect = holder.querySelector('select[data-variant="0"]'); 5511 if(firstSelect){ 5512 firstSelect.value = varyantDeger; 5513 if(typeof jQuery !== "undefined"){ 5514 jQuery(firstSelect).val(varyantDeger).trigger('change'); 5515 } 5516 } 5517 5518 /* DiÄer select'lere ilk geçerli deÄeri koy */ 5519 var allSelects = holder.querySelectorAll('select[data-variant]'); 5520 allSelects.forEach(function(sel, idx){ 5521 if(idx === 0) return; 5522 if(sel.value) return; 5523 var options = sel.querySelectorAll('option'); 5524 for(var i = 0; i < options.length; i++){ 5525 if(options[i].value){ 5526 sel.value = options[i].value; 5527 if(typeof jQuery !== "undefined"){ 5528 jQuery(sel).val(options[i].value).trigger('change'); 5529 } 5530 break; 5531 } 5532 } 5533 }); 5534 5535 /* Görsel feedback */ 5536 elem.classList.add('adding'); 5537 var originalText = elem.textContent; 5538 elem.textContent = 'â'; 5539 5540 /* Sepete ekle */ 5541 addToCartSmart(productId, { 5542 checkVariant: true, 5543 variantCount: allSelects.length, 5544 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 5545 }); 5546 5547 setTimeout(function(){ 5548 elem.textContent = originalText; 5549 elem.classList.remove('adding'); 5550 closeAll(); 5551 }, 800); 5552 5553 return false; 5554 }; 5555 5556 5557 /* ============================================ 5558 SEPETE EKLE - Modal killer ile 5559 ============================================ */ 5560 function addToCartSmart(productId, extraOptions){ 5561 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 5562 5563 var options = { 5564 quantity: 1, 5565 hideNativeModal: 'lux-card-' + productId 5566 }; 5567 5568 if(extraOptions){
5569 Object.keys(extraOptions).forEach(function(k){ 5570 options[k] = extraOptions[k]; 5571 }); 5572 } else if(holder){ 5573 var selects = holder.querySelectorAll('select[data-variant]'); 5574 if(selects.length > 0){ 5575 options.checkVariant = true; 5576 options.variantCount = selects.length; 5577 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 5578 } 5579 } 5580 5581 startModalKill(2000); 5582 5583 if(typeof addCart === "function"){ 5584 try { 5585 addCart(productId, 'card', options); 5586 flashSuccess(productId); 5587 } catch(err){ 5588 console.error('Sepete ekleme hatası:', err); 5589 } 5590 } 5591 } 5592 5593})(); 5594</script>
5594</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 5595 data-lux-product-shell="1" 5596 data-lux-page="1"><style> 5597@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 5598 5599/* ===== VEZZA LUX CARD ===== */ 5600.card-product{ 5601 font-family:'Poppins',sans-serif; 5602 background:#fff !important; 5603 position:relative; 5604} 5605.card-product-inner{ 5606 background:transparent !important; 5607 position:relative; 5608} 5609.card-product .c-p-i-link, 5610.card-product a{ 5611 background:transparent !important; 5612} 5613.card-product-inner > div{ 5614 background:transparent !important; 5615} 5616.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 5617 background:transparent !important; 5618} 5619.card-product .card-product-content, 5620.card-product .price-group, 5621.card-product .prices{ 5622 background:transparent !important; 5623} 5624[class*="skeleton"], 5625[class*="placeholder"], 5626[class*="loading"]{ 5627 background:transparent !important; 5628} 5629 5630/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 5631.image-wrapper{ 5632 position:relative; 5633 width:100%; 5634 aspect-ratio:1/1; 5635 overflow:hidden; 5636 background:#fff !important; 5637} 5638 5639.image{ 5640 position:relative; 5641 width:100%; 5642 height:100%; 5643} 5644 5645.image-wrapper img{ 5646 width:100% !important; 5647 height:100% !important; 5648 object-fit:cover !important; 5649 object-position:center center !important; 5650 display:block; 5651 transition:transform .35s ease; 5652} 5653 5654/* ===== DISCOUNT ===== */ 5655.discount{ 5656 position:absolute; 5657 top:12px; 5658 left:12px; 5659 width:28px; 5660 height:48px; 5661 background:#e10b0b; 5662 color:#fff; 5663 font-size:12px; 5664 font-weight:600; 5665 display:flex; 5666 align-items:center; 5667 justify-content:center; 5668 writing-mode:vertical-rl; 5669 transform:rotate(180deg); 5670 letter-spacing:.5px; 5671 z-index:7; 5672} 5673 5674/* ===== FAV ===== */ 5675.lux-fav{ 5676 position:absolute; 5677 top:12px; 5678 right:12px; 5679 z-index:7; 5680} 5681.lux-fav a, 5682.lux-fav button{ 5683 background:transparent !important; 5684 border:0 !important; 5685 padding:0 !important; 5686 cursor:pointer; 5687 display:inline-flex; 5688 align-items:center; 5689 justify-content:center; 5690} 5691 5692/* ===== SEPET IKON ===== */ 5693.lux-bag{ 5694 position:absolute; 5695 bottom:12px; 5696 right:12px; 5697 z-index:7; 5698 width:34px; 5699 height:34px; 5700 display:inline-flex; 5701 align-items:center; 5702 justify-content:center; 5703 background:rgba(255,255,255,.92); 5704 border:1px solid rgba(0,0,0,.10); 5705 border-radius:10px; 5706 cursor:pointer; 5707 transition:.2s ease; 5708} 5709.lux-bag:hover{ 5710 background:#fff; 5711 border-color:rgba(0,0,0,.25); 5712} 5713.lux-bag.is-loading{ 5714 opacity:.6; 5715 cursor:wait; 5716} 5717.lux-bag.is-success{ 5718 background:#2e7d32 !important; 5719 border-color:#2e7d32 !important; 5720 color:#fff !important; 5721} 5722.card-product.sizes-open .lux-bag{ 5723 opacity:0; 5724 pointer-events:none; 5725} 5726 5727/* Loading spinner */ 5728.lux-bag.is-loading i::before{ 5729 content:"â³"; 5730} 5731 5732/* ===== SIZE STRIP ===== */ 5733.size-strip{ 5734 width:100%; 5735 max-height:0; 5736 overflow:hidden; 5737 background:#fff; 5738 display:flex; 5739 flex-wrap:wrap; 5740 transition:max-height .3s ease, border-color .3s ease; 5741 border-top:1px solid transparent; 5742 border-bottom:1px solid transparent; 5743} 5744.size-strip.open{ 5745 max-height:200px; 5746 border-top-color:rgba(0,0,0,.08); 5747 border-bottom-color:rgba(0,0,0,.08); 5748} 5749.size-item{ 5750 flex:1 0 auto; 5751 min-width:38px; 5752 height:42px; 5753 display:flex; 5754 align-items:center; 5755 justify-content:center; 5756 font-size:13px; 5757 font-weight:500; 5758 color:#111 !important; 5759 cursor:pointer; 5760 user-select:none; 5761 background:transparent; 5762 transition:background .15s ease, color .15s ease; 5763 border-right:1px solid rgba(0,0,0,.08); 5764} 5765.size-item:last-child{ border-right:0; } 5766.size-item:hover:not(.disabled):not(.adding){ 5767 background:#000 !important; 5768 color:#fff !important; 5769} 5770.size-item.disabled{ 5771 color:#111 !important; 5772 text-decoration:line-through !important; 5773 opacity:.30 !important; 5774 cursor:not-allowed; 5775} 5776.size-item.adding{ 5777 background:#2e7d32 !important; 5778 color:#fff !important; 5779 cursor:wait; 5780} 5781 5782/* ===== META ===== */ 5783.lux-meta{ 5784 padding:12px 6px 6px; 5785 background:transparent !important; 5786} 5787.lux-brand{ 5788 font-size:16px; 5789 font-weight:600; 5790 color:#111; 5791 margin-bottom:2px; 5792} 5793.lux-title{ 5794 font-size:14px; 5795 font-weight:400; 5796 line-height:1.45; 5797 color:#111; 5798 margin:0; 5799} 5800.lux-price{ 5801 margin-top:10px; 5802 display:flex; 5803 gap:10px; 5804 align-items:baseline; 5805 background:transparent !important; 5806} 5807.lux-price .list-price{ 5808 font-size:14px; 5809 font-weight:400; 5810 color:#111; 5811 text-decoration:line-through; 5812} 5813.lux-price .sale-price{ 5814 font-size:16px; 5815 font-weight:600; 5816 color:#e10b0b; 5817} 5818 5819.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
5820.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 5821</style><div class="card-product" 5822 id="card-10162" 5823 data-lux-card-id="10162" 5824 data-lux-product-link="https://www.vezzalux.com/gg-805-arkasi-kirmizi-erkek-ayakkabi" 5825 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%38</div><a href="https://www.vezzalux.com/gg-805-arkasi-kirmizi-erkek-ayakkabi" class="c-p-i-link" title="Gg 805 Arkası Kırmızı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6fe7ba1c-49812934-sw1200sh1200.webp" alt="Gg 805 Arkası Kırmızı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6fe7ba1c-49812934-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6f6a6a17-56294488-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 5826 onclick="userProductFavourite('add', 10162)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 5827 id="lux-bag-10162" 5828 onclick="return luxBagClick(event, 10162);" 5829 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10162" style="display:none;"></div><div class="size-strip" id="size-strip-10162" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-805-arkasi-kirmizi-erkek-ayakkabi" class="c-p-i-link" title="Gg 805 Arkası Kırmızı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 805 Arkası Kırmızı Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">10.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
5829<script> 5830(function(){ 5831 5832 /* Bir kez kur */ 5833 if(window.__luxCardInit) return; 5834 window.__luxCardInit = true; 5835 5836 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 5837 window.__luxVariantCache = window.__luxVariantCache || {}; 5838 5839 function closeAll(){ 5840 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5841 s.classList.remove('open'); 5842 }); 5843 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5844 c.classList.remove('sizes-open'); 5845 }); 5846 } 5847 5848 function flashSuccess(productId){ 5849 var bag = document.getElementById('lux-bag-' + productId); 5850 if(!bag) return; 5851 bag.classList.add('is-success'); 5852 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 5853 } 5854 5855 /* DıŠtıklama - kapat */ 5856 document.addEventListener('click', function(e){ 5857 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 5858 if(!inside) closeAll(); 5859 }); 5860 5861 document.addEventListener('keydown', function(e){ 5862 if(e.key === 'Escape') closeAll(); 5863 }); 5864 5865 5866 /* ============================================ 5867 MODAL KILLER - yedek güvence 5868 ============================================ */ 5869 var LUX_MODAL_KILL_ACTIVE = false; 5870 5871 function killVisibleModals(){ 5872 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 5873 modals.forEach(function(m){ 5874 var id = (m.id || '').toLowerCase(); 5875 var txt = (m.textContent || '').toLowerCase(); 5876 var isCartModal = id.indexOf('cart') > -1 5877 || id.indexOf('variant') > -1 5878 || id.indexOf('fast') > -1 5879 || id.indexOf('urun') > -1 5880 || txt.indexOf('lütfen seçin') > -1; 5881 5882 if(isCartModal){ 5883 if(typeof jQuery !== 'undefined'){ 5884 try { jQuery(m).modal('hide'); } catch(e){} 5885 } 5886 m.classList.remove('show','in'); 5887 m.style.display = 'none'; 5888 } 5889 }); 5890 5891 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 5892 document.body.classList.remove('modal-open'); 5893 document.body.style.overflow = ''; 5894 document.body.style.paddingRight = ''; 5895 } 5896 5897 function startModalKill(durationMs){ 5898 if(LUX_MODAL_KILL_ACTIVE) return; 5899 LUX_MODAL_KILL_ACTIVE = true; 5900 killVisibleModals(); 5901 var interval = setInterval(killVisibleModals, 50); 5902 setTimeout(function(){ 5903 clearInterval(interval); 5904 LUX_MODAL_KILL_ACTIVE = false; 5905 }, durationMs || 2000); 5906 } 5907 5908 5909 /* ============================================ 5910 AJAX: Varyantları detay sayfasından çek 5911 ============================================ 5912 Ãrün detay sayfasının tam HTML'ini indir, 5913 DOMParser ile parse et, varyantları bul 5914 ============================================ */ 5915 function fetchVariants(productId, productLink, callback){ 5916 5917 /* Cache'te varsa hemen döndür */ 5918 if(window.__luxVariantCache[productId]){ 5919 callback(window.__luxVariantCache[productId]); 5920 return; 5921 } 5922 5923 fetch(productLink, { 5924 method: 'GET', 5925 credentials: 'same-origin', 5926 headers: { 'Accept': 'text/html' } 5927 }) 5928 .then(function(r){ return r.text(); }) 5929 .then(function(html){ 5930 var parser = new DOMParser(); 5931 var doc = parser.parseFromString(html, 'text/html'); 5932 5933 /* Detay sayfasındaki .variant-box'ı bul */ 5934 var variantBox = doc.querySelector('.variant-box'); 5935 if(!variantBox){ 5936 callback({ variants: [], error: 'no_variant_box' }); 5937 return; 5938 } 5939 5940 /* Her varyant grubu için select'leri ve option'ları oku */ 5941 var variants = []; 5942 var variantLis = variantBox.querySelectorAll('.variant'); 5943 5944 variantLis.forEach(function(li, idx){ 5945 var nameEl = li.querySelector('.name'); 5946 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 5947 5948 var values = []; 5949 5950 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 5951 var optLinks = li.querySelectorAll('.options a'); 5952 5953 if(optLinks.length > 0){ 5954 optLinks.forEach(function(a){ 5955 /* Beden/renk deÄerini doÄru attribute'tan oku
5956 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 5957 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 5958 - textContent: fallback */ 5959 var deger = a.getAttribute('data-variant-value') 5960 || a.textContent.trim(); 5961 5962 /* Stok kontrolü - birden fazla yoldan kontrol et */ 5963 var isSoldOut = a.classList.contains('sold-out') 5964 || a.classList.contains('sold_out') 5965 || a.classList.contains('disabled') 5966 || a.classList.contains('stoksuz') 5967 || a.classList.contains('out-of-stock') 5968 || a.hasAttribute('disabled') 5969 || a.getAttribute('data-in-stock') === '0' 5970 || a.getAttribute('data-in-stock') === 'false' 5971 || a.getAttribute('data-stokta-var-mi') === '0' 5972 || a.getAttribute('data-stokta-var-mi') === 'false'; 5973 5974 values.push({ 5975 deger: deger, 5976 inStock: !isSoldOut 5977 }); 5978 }); 5979 } else { 5980 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 5981 var select = li.querySelector('select'); 5982 if(select){ 5983 var opts = select.querySelectorAll('option'); 5984 opts.forEach(function(o){ 5985 if(!o.value) return; 5986 values.push({ 5987 deger: o.value, 5988 inStock: !o.disabled 5989 }); 5990 }); 5991 } 5992 } 5993 5994 variants.push({ 5995 index: idx, 5996 baslik: name, 5997 values: values 5998 }); 5999 }); 6000 6001 var result = { variants: variants }; 6002 window.__luxVariantCache[productId] = result; 6003 callback(result); 6004 }) 6005 .catch(function(err){ 6006 console.error('Varyant çekme hatası:', err); 6007 callback({ variants: [], error: 'fetch_failed' }); 6008 }); 6009 } 6010 6011 6012 /* ============================================ 6013 Beden Åeridini ve gizli variant-box'ı oluÅtur 6014 ============================================ */ 6015 function buildVariantUI(productId, data){ 6016 var card = document.getElementById('card-' + productId); 6017 if(!card) return false; 6018 6019 var holder = card.querySelector('.lux-variant-box'); 6020 var strip = document.getElementById('size-strip-' + productId); 6021 if(!holder || !strip) return false; 6022 6023 if(!data.variants || data.variants.length === 0){ 6024 /* Varyant yok */ 6025 return false; 6026 } 6027 6028 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 6029 var displayVariant = null;
6030 data.variants.forEach(function(v){ 6031 if(!displayVariant && v.values.length > 1){ 6032 displayVariant = v; 6033 } 6034 }); 6035 6036 /* Gizli variant-box HTML */ 6037 var html = '<div class="variant-box"><ul>'; 6038 data.variants.forEach(function(v){ 6039 html += '<li class="variant">'; 6040 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 6041 6042 if(v.values.length > 1){ 6043 html += '<option value="">Lütfen seçin</option>'; 6044 } 6045 6046 v.values.forEach(function(val, i){ 6047 var selected = (v.values.length === 1) ? ' selected' : ''; 6048 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 6049 }); 6050 6051 html += '</select></li>'; 6052 }); 6053 html += '</ul></div>'; 6054 6055 holder.innerHTML = html; 6056 holder.style.display = ''; 6057 6058 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 6059 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 6060 if(displayVariant){ 6061 var stripHtml = ''; 6062 var inStockCount = 0; 6063 6064 /* DEBUG - console'da gör */ 6065 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 6066 6067 displayVariant.values.forEach(function(val){ 6068 /* SADECE stokta olanları ekle */ 6069 if(val.inStock === true){ 6070 stripHtml += '<div class="size-item" ' 6071 + 'data-urun-id="' + productId + '" ' 6072 + 'data-varyant-deger="' + val.deger + '" ' 6073 + 'onclick="return luxAddVariant(event, this);">' 6074 + val.deger + '</div>'; 6075 inStockCount++; 6076 } 6077 }); 6078 6079 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 6080 if(inStockCount === 0){ 6081 strip.setAttribute('data-loaded', '1'); 6082 strip.setAttribute('data-has-variants', '0'); 6083 return false; 6084 } 6085
6086 strip.innerHTML = stripHtml; 6087 strip.setAttribute('data-loaded', '1'); 6088 strip.setAttribute('data-has-variants', '1'); 6089 return true; 6090 } else { 6091 strip.setAttribute('data-loaded', '1'); 6092 strip.setAttribute('data-has-variants', '0'); 6093 return false; 6094 } 6095 } 6096 6097 6098 /* ============================================ 6099 SEPET IKONU TIKLAMASI 6100 ============================================ */ 6101 window.luxBagClick = function(ev, productId){ 6102 ev.preventDefault(); 6103 ev.stopPropagation(); 6104 6105 var card = document.getElementById('card-' + productId); 6106 var strip = document.getElementById('size-strip-' + productId); 6107 var bag = document.getElementById('lux-bag-' + productId); 6108 if(!card || !strip) return false; 6109 6110 /* Strip zaten yüklenmiÅse direkt davran */ 6111 if(strip.getAttribute('data-loaded') === '1'){ 6112 if(strip.getAttribute('data-has-variants') === '1'){ 6113 toggleStrip(productId); 6114 } else { 6115 addToCartSmart(productId); 6116 } 6117 return false; 6118 } 6119 6120 /* İlk tıklama - AJAX ile varyantları çek */ 6121 bag.classList.add('is-loading'); 6122 var productLink = card.getAttribute('data-lux-product-link'); 6123 6124 fetchVariants(productId, productLink, function(data){ 6125 bag.classList.remove('is-loading'); 6126 6127 var hasVariants = buildVariantUI(productId, data); 6128 6129 if(hasVariants){ 6130 /* Bedenler var - Åeridi aç */ 6131 toggleStrip(productId); 6132 } else { 6133 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 6134 addToCartSmart(productId); 6135 } 6136 }); 6137 6138 return false; 6139 }; 6140 6141 function toggleStrip(productId){ 6142 var strip = document.getElementById('size-strip-' + productId); 6143 var card = document.getElementById('card-' + productId); 6144 if(!strip) return; 6145 6146 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6147 if(s !== strip) s.classList.remove('open'); 6148 }); 6149 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6150 if(c !== card) c.classList.remove('sizes-open'); 6151 }); 6152 6153 strip.classList.toggle('open'); 6154 if(card) card.classList.toggle('sizes-open'); 6155 } 6156 6157 6158 /* ============================================ 6159 BEDEN TIKLAMASI 6160 ============================================ */ 6161 window.luxAddVariant = function(ev, elem){ 6162 ev.preventDefault(); 6163 ev.stopPropagation(); 6164 6165 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 6166 6167 var productId = elem.getAttribute('data-urun-id'); 6168 var varyantDeger = elem.getAttribute('data-varyant-deger'); 6169 6170 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6171 if(!holder) return false; 6172 6173 /* Seçilen bedeni ilk select'e yaz */ 6174 var firstSelect = holder.querySelector('select[data-variant="0"]'); 6175 if(firstSelect){ 6176 firstSelect.value = varyantDeger; 6177 if(typeof jQuery !== "undefined"){ 6178 jQuery(firstSelect).val(varyantDeger).trigger('change'); 6179 } 6180 } 6181 6182 /* DiÄer select'lere ilk geçerli deÄeri koy */ 6183 var allSelects = holder.querySelectorAll('select[data-variant]'); 6184 allSelects.forEach(function(sel, idx){ 6185 if(idx === 0) return; 6186 if(sel.value) return; 6187 var options = sel.querySelectorAll('option'); 6188 for(var i = 0; i < options.length; i++){ 6189 if(options[i].value){ 6190 sel.value = options[i].value; 6191 if(typeof jQuery !== "undefined"){ 6192 jQuery(sel).val(options[i].value).trigger('change'); 6193 } 6194 break; 6195 } 6196 } 6197 }); 6198 6199 /* Görsel feedback */ 6200 elem.classList.add('adding'); 6201 var originalText = elem.textContent; 6202 elem.textContent = 'â'; 6203 6204 /* Sepete ekle */ 6205 addToCartSmart(productId, { 6206 checkVariant: true, 6207 variantCount: allSelects.length, 6208 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 6209 }); 6210 6211 setTimeout(function(){ 6212 elem.textContent = originalText; 6213 elem.classList.remove('adding'); 6214 closeAll(); 6215 }, 800); 6216 6217 return false; 6218 }; 6219 6220 6221 /* ============================================ 6222 SEPETE EKLE - Modal killer ile 6223 ============================================ */ 6224 function addToCartSmart(productId, extraOptions){ 6225 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6226 6227 var options = { 6228 quantity: 1, 6229 hideNativeModal: 'lux-card-' + productId 6230 }; 6231 6232 if(extraOptions){
6233 Object.keys(extraOptions).forEach(function(k){ 6234 options[k] = extraOptions[k]; 6235 }); 6236 } else if(holder){ 6237 var selects = holder.querySelectorAll('select[data-variant]'); 6238 if(selects.length > 0){ 6239 options.checkVariant = true; 6240 options.variantCount = selects.length; 6241 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 6242 } 6243 } 6244 6245 startModalKill(2000); 6246 6247 if(typeof addCart === "function"){ 6248 try { 6249 addCart(productId, 'card', options); 6250 flashSuccess(productId); 6251 } catch(err){ 6252 console.error('Sepete ekleme hatası:', err); 6253 } 6254 } 6255 } 6256 6257})(); 6258</script>
6258</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 6259 data-lux-product-shell="1" 6260 data-lux-page="1"><style> 6261@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 6262 6263/* ===== VEZZA LUX CARD ===== */ 6264.card-product{ 6265 font-family:'Poppins',sans-serif; 6266 background:#fff !important; 6267 position:relative; 6268} 6269.card-product-inner{ 6270 background:transparent !important; 6271 position:relative; 6272} 6273.card-product .c-p-i-link, 6274.card-product a{ 6275 background:transparent !important; 6276} 6277.card-product-inner > div{ 6278 background:transparent !important; 6279} 6280.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 6281 background:transparent !important; 6282} 6283.card-product .card-product-content, 6284.card-product .price-group, 6285.card-product .prices{ 6286 background:transparent !important; 6287} 6288[class*="skeleton"], 6289[class*="placeholder"], 6290[class*="loading"]{ 6291 background:transparent !important; 6292} 6293 6294/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 6295.image-wrapper{ 6296 position:relative; 6297 width:100%; 6298 aspect-ratio:1/1; 6299 overflow:hidden; 6300 background:#fff !important; 6301} 6302 6303.image{ 6304 position:relative; 6305 width:100%; 6306 height:100%; 6307} 6308 6309.image-wrapper img{ 6310 width:100% !important; 6311 height:100% !important; 6312 object-fit:cover !important; 6313 object-position:center center !important; 6314 display:block; 6315 transition:transform .35s ease; 6316} 6317 6318/* ===== DISCOUNT ===== */ 6319.discount{ 6320 position:absolute; 6321 top:12px; 6322 left:12px; 6323 width:28px; 6324 height:48px; 6325 background:#e10b0b; 6326 color:#fff; 6327 font-size:12px; 6328 font-weight:600; 6329 display:flex; 6330 align-items:center; 6331 justify-content:center; 6332 writing-mode:vertical-rl; 6333 transform:rotate(180deg); 6334 letter-spacing:.5px; 6335 z-index:7; 6336} 6337 6338/* ===== FAV ===== */ 6339.lux-fav{ 6340 position:absolute; 6341 top:12px; 6342 right:12px; 6343 z-index:7; 6344} 6345.lux-fav a, 6346.lux-fav button{ 6347 background:transparent !important; 6348 border:0 !important; 6349 padding:0 !important; 6350 cursor:pointer; 6351 display:inline-flex; 6352 align-items:center; 6353 justify-content:center; 6354} 6355 6356/* ===== SEPET IKON ===== */ 6357.lux-bag{ 6358 position:absolute; 6359 bottom:12px; 6360 right:12px; 6361 z-index:7; 6362 width:34px; 6363 height:34px; 6364 display:inline-flex; 6365 align-items:center; 6366 justify-content:center; 6367 background:rgba(255,255,255,.92); 6368 border:1px solid rgba(0,0,0,.10); 6369 border-radius:10px; 6370 cursor:pointer; 6371 transition:.2s ease; 6372} 6373.lux-bag:hover{ 6374 background:#fff; 6375 border-color:rgba(0,0,0,.25); 6376} 6377.lux-bag.is-loading{ 6378 opacity:.6; 6379 cursor:wait; 6380} 6381.lux-bag.is-success{ 6382 background:#2e7d32 !important; 6383 border-color:#2e7d32 !important; 6384 color:#fff !important; 6385} 6386.card-product.sizes-open .lux-bag{ 6387 opacity:0; 6388 pointer-events:none; 6389} 6390 6391/* Loading spinner */ 6392.lux-bag.is-loading i::before{ 6393 content:"â³"; 6394} 6395 6396/* ===== SIZE STRIP ===== */ 6397.size-strip{ 6398 width:100%; 6399 max-height:0; 6400 overflow:hidden; 6401 background:#fff; 6402 display:flex; 6403 flex-wrap:wrap; 6404 transition:max-height .3s ease, border-color .3s ease; 6405 border-top:1px solid transparent; 6406 border-bottom:1px solid transparent; 6407} 6408.size-strip.open{ 6409 max-height:200px; 6410 border-top-color:rgba(0,0,0,.08); 6411 border-bottom-color:rgba(0,0,0,.08); 6412} 6413.size-item{ 6414 flex:1 0 auto; 6415 min-width:38px; 6416 height:42px; 6417 display:flex; 6418 align-items:center; 6419 justify-content:center; 6420 font-size:13px; 6421 font-weight:500; 6422 color:#111 !important; 6423 cursor:pointer; 6424 user-select:none; 6425 background:transparent; 6426 transition:background .15s ease, color .15s ease; 6427 border-right:1px solid rgba(0,0,0,.08); 6428} 6429.size-item:last-child{ border-right:0; } 6430.size-item:hover:not(.disabled):not(.adding){ 6431 background:#000 !important; 6432 color:#fff !important; 6433} 6434.size-item.disabled{ 6435 color:#111 !important; 6436 text-decoration:line-through !important; 6437 opacity:.30 !important; 6438 cursor:not-allowed; 6439} 6440.size-item.adding{ 6441 background:#2e7d32 !important; 6442 color:#fff !important; 6443 cursor:wait; 6444} 6445 6446/* ===== META ===== */ 6447.lux-meta{ 6448 padding:12px 6px 6px; 6449 background:transparent !important; 6450} 6451.lux-brand{ 6452 font-size:16px; 6453 font-weight:600; 6454 color:#111; 6455 margin-bottom:2px; 6456} 6457.lux-title{ 6458 font-size:14px; 6459 font-weight:400; 6460 line-height:1.45; 6461 color:#111; 6462 margin:0; 6463} 6464.lux-price{ 6465 margin-top:10px; 6466 display:flex; 6467 gap:10px; 6468 align-items:baseline; 6469 background:transparent !important; 6470} 6471.lux-price .list-price{ 6472 font-size:14px; 6473 font-weight:400; 6474 color:#111; 6475 text-decoration:line-through; 6476} 6477.lux-price .sale-price{ 6478 font-size:16px; 6479 font-weight:600; 6480 color:#e10b0b; 6481} 6482 6483.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
6484.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 6485</style><div class="card-product" 6486 id="card-10262" 6487 data-lux-card-id="10262" 6488 data-lux-product-link="https://www.vezzalux.com/fendi-931-siyah-sari-beyaz-erkek-ayakkabi" 6489 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/fendi-931-siyah-sari-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Fendi 931 Siyah Sarı Beyaz Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c97009810-81840931-sw1200sh1200.webp" alt="Fendi 931 Siyah Sarı Beyaz Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c97009810-81840931-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c96ba54fb-36108421-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 6490 onclick="userProductFavourite('add', 10262)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 6491 id="lux-bag-10262" 6492 onclick="return luxBagClick(event, 10262);" 6493 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10262" style="display:none;"></div><div class="size-strip" id="size-strip-10262" data-loaded="0"></div><a href="https://www.vezzalux.com/fendi-931-siyah-sari-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Fendi 931 Siyah Sarı Beyaz Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Fendi</div><div class="lux-title">Fendi 931 Siyah Sarı Beyaz Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
6493<script> 6494(function(){ 6495 6496 /* Bir kez kur */ 6497 if(window.__luxCardInit) return; 6498 window.__luxCardInit = true; 6499 6500 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 6501 window.__luxVariantCache = window.__luxVariantCache || {}; 6502 6503 function closeAll(){ 6504 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6505 s.classList.remove('open'); 6506 }); 6507 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6508 c.classList.remove('sizes-open'); 6509 }); 6510 } 6511 6512 function flashSuccess(productId){ 6513 var bag = document.getElementById('lux-bag-' + productId); 6514 if(!bag) return; 6515 bag.classList.add('is-success'); 6516 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 6517 } 6518 6519 /* DıŠtıklama - kapat */ 6520 document.addEventListener('click', function(e){ 6521 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 6522 if(!inside) closeAll(); 6523 }); 6524 6525 document.addEventListener('keydown', function(e){ 6526 if(e.key === 'Escape') closeAll(); 6527 }); 6528 6529 6530 /* ============================================ 6531 MODAL KILLER - yedek güvence 6532 ============================================ */ 6533 var LUX_MODAL_KILL_ACTIVE = false; 6534 6535 function killVisibleModals(){ 6536 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 6537 modals.forEach(function(m){ 6538 var id = (m.id || '').toLowerCase(); 6539 var txt = (m.textContent || '').toLowerCase(); 6540 var isCartModal = id.indexOf('cart') > -1 6541 || id.indexOf('variant') > -1 6542 || id.indexOf('fast') > -1 6543 || id.indexOf('urun') > -1 6544 || txt.indexOf('lütfen seçin') > -1; 6545 6546 if(isCartModal){ 6547 if(typeof jQuery !== 'undefined'){ 6548 try { jQuery(m).modal('hide'); } catch(e){} 6549 } 6550 m.classList.remove('show','in'); 6551 m.style.display = 'none'; 6552 } 6553 }); 6554 6555 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 6556 document.body.classList.remove('modal-open'); 6557 document.body.style.overflow = ''; 6558 document.body.style.paddingRight = ''; 6559 } 6560 6561 function startModalKill(durationMs){ 6562 if(LUX_MODAL_KILL_ACTIVE) return; 6563 LUX_MODAL_KILL_ACTIVE = true; 6564 killVisibleModals(); 6565 var interval = setInterval(killVisibleModals, 50); 6566 setTimeout(function(){ 6567 clearInterval(interval); 6568 LUX_MODAL_KILL_ACTIVE = false; 6569 }, durationMs || 2000); 6570 } 6571 6572 6573 /* ============================================ 6574 AJAX: Varyantları detay sayfasından çek 6575 ============================================ 6576 Ãrün detay sayfasının tam HTML'ini indir, 6577 DOMParser ile parse et, varyantları bul 6578 ============================================ */ 6579 function fetchVariants(productId, productLink, callback){ 6580 6581 /* Cache'te varsa hemen döndür */ 6582 if(window.__luxVariantCache[productId]){ 6583 callback(window.__luxVariantCache[productId]); 6584 return; 6585 } 6586 6587 fetch(productLink, { 6588 method: 'GET', 6589 credentials: 'same-origin', 6590 headers: { 'Accept': 'text/html' } 6591 }) 6592 .then(function(r){ return r.text(); }) 6593 .then(function(html){ 6594 var parser = new DOMParser(); 6595 var doc = parser.parseFromString(html, 'text/html'); 6596 6597 /* Detay sayfasındaki .variant-box'ı bul */ 6598 var variantBox = doc.querySelector('.variant-box'); 6599 if(!variantBox){ 6600 callback({ variants: [], error: 'no_variant_box' }); 6601 return; 6602 } 6603 6604 /* Her varyant grubu için select'leri ve option'ları oku */ 6605 var variants = []; 6606 var variantLis = variantBox.querySelectorAll('.variant'); 6607 6608 variantLis.forEach(function(li, idx){ 6609 var nameEl = li.querySelector('.name'); 6610 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 6611 6612 var values = []; 6613 6614 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 6615 var optLinks = li.querySelectorAll('.options a'); 6616 6617 if(optLinks.length > 0){ 6618 optLinks.forEach(function(a){ 6619 /* Beden/renk deÄerini doÄru attribute'tan oku
6620 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 6621 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 6622 - textContent: fallback */ 6623 var deger = a.getAttribute('data-variant-value') 6624 || a.textContent.trim(); 6625 6626 /* Stok kontrolü - birden fazla yoldan kontrol et */ 6627 var isSoldOut = a.classList.contains('sold-out') 6628 || a.classList.contains('sold_out') 6629 || a.classList.contains('disabled') 6630 || a.classList.contains('stoksuz') 6631 || a.classList.contains('out-of-stock') 6632 || a.hasAttribute('disabled') 6633 || a.getAttribute('data-in-stock') === '0' 6634 || a.getAttribute('data-in-stock') === 'false' 6635 || a.getAttribute('data-stokta-var-mi') === '0' 6636 || a.getAttribute('data-stokta-var-mi') === 'false'; 6637 6638 values.push({ 6639 deger: deger, 6640 inStock: !isSoldOut 6641 }); 6642 }); 6643 } else { 6644 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 6645 var select = li.querySelector('select'); 6646 if(select){ 6647 var opts = select.querySelectorAll('option'); 6648 opts.forEach(function(o){ 6649 if(!o.value) return; 6650 values.push({ 6651 deger: o.value, 6652 inStock: !o.disabled 6653 }); 6654 }); 6655 } 6656 } 6657 6658 variants.push({ 6659 index: idx, 6660 baslik: name, 6661 values: values 6662 }); 6663 }); 6664 6665 var result = { variants: variants }; 6666 window.__luxVariantCache[productId] = result; 6667 callback(result); 6668 }) 6669 .catch(function(err){ 6670 console.error('Varyant çekme hatası:', err); 6671 callback({ variants: [], error: 'fetch_failed' }); 6672 }); 6673 } 6674 6675 6676 /* ============================================ 6677 Beden Åeridini ve gizli variant-box'ı oluÅtur 6678 ============================================ */ 6679 function buildVariantUI(productId, data){ 6680 var card = document.getElementById('card-' + productId); 6681 if(!card) return false; 6682 6683 var holder = card.querySelector('.lux-variant-box'); 6684 var strip = document.getElementById('size-strip-' + productId); 6685 if(!holder || !strip) return false; 6686 6687 if(!data.variants || data.variants.length === 0){ 6688 /* Varyant yok */ 6689 return false; 6690 } 6691 6692 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 6693 var displayVariant = null;
6694 data.variants.forEach(function(v){ 6695 if(!displayVariant && v.values.length > 1){ 6696 displayVariant = v; 6697 } 6698 }); 6699 6700 /* Gizli variant-box HTML */ 6701 var html = '<div class="variant-box"><ul>'; 6702 data.variants.forEach(function(v){ 6703 html += '<li class="variant">'; 6704 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 6705 6706 if(v.values.length > 1){ 6707 html += '<option value="">Lütfen seçin</option>'; 6708 } 6709 6710 v.values.forEach(function(val, i){ 6711 var selected = (v.values.length === 1) ? ' selected' : ''; 6712 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 6713 }); 6714 6715 html += '</select></li>'; 6716 }); 6717 html += '</ul></div>'; 6718 6719 holder.innerHTML = html; 6720 holder.style.display = ''; 6721 6722 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 6723 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 6724 if(displayVariant){ 6725 var stripHtml = ''; 6726 var inStockCount = 0; 6727 6728 /* DEBUG - console'da gör */ 6729 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 6730 6731 displayVariant.values.forEach(function(val){ 6732 /* SADECE stokta olanları ekle */ 6733 if(val.inStock === true){ 6734 stripHtml += '<div class="size-item" ' 6735 + 'data-urun-id="' + productId + '" ' 6736 + 'data-varyant-deger="' + val.deger + '" ' 6737 + 'onclick="return luxAddVariant(event, this);">' 6738 + val.deger + '</div>'; 6739 inStockCount++; 6740 } 6741 }); 6742 6743 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 6744 if(inStockCount === 0){ 6745 strip.setAttribute('data-loaded', '1'); 6746 strip.setAttribute('data-has-variants', '0'); 6747 return false; 6748 } 6749
6750 strip.innerHTML = stripHtml; 6751 strip.setAttribute('data-loaded', '1'); 6752 strip.setAttribute('data-has-variants', '1'); 6753 return true; 6754 } else { 6755 strip.setAttribute('data-loaded', '1'); 6756 strip.setAttribute('data-has-variants', '0'); 6757 return false; 6758 } 6759 } 6760 6761 6762 /* ============================================ 6763 SEPET IKONU TIKLAMASI 6764 ============================================ */ 6765 window.luxBagClick = function(ev, productId){ 6766 ev.preventDefault(); 6767 ev.stopPropagation(); 6768 6769 var card = document.getElementById('card-' + productId); 6770 var strip = document.getElementById('size-strip-' + productId); 6771 var bag = document.getElementById('lux-bag-' + productId); 6772 if(!card || !strip) return false; 6773 6774 /* Strip zaten yüklenmiÅse direkt davran */ 6775 if(strip.getAttribute('data-loaded') === '1'){ 6776 if(strip.getAttribute('data-has-variants') === '1'){ 6777 toggleStrip(productId); 6778 } else { 6779 addToCartSmart(productId); 6780 } 6781 return false; 6782 } 6783 6784 /* İlk tıklama - AJAX ile varyantları çek */ 6785 bag.classList.add('is-loading'); 6786 var productLink = card.getAttribute('data-lux-product-link'); 6787 6788 fetchVariants(productId, productLink, function(data){ 6789 bag.classList.remove('is-loading'); 6790 6791 var hasVariants = buildVariantUI(productId, data); 6792 6793 if(hasVariants){ 6794 /* Bedenler var - Åeridi aç */ 6795 toggleStrip(productId); 6796 } else { 6797 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 6798 addToCartSmart(productId); 6799 } 6800 }); 6801 6802 return false; 6803 }; 6804 6805 function toggleStrip(productId){ 6806 var strip = document.getElementById('size-strip-' + productId); 6807 var card = document.getElementById('card-' + productId); 6808 if(!strip) return; 6809 6810 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6811 if(s !== strip) s.classList.remove('open'); 6812 }); 6813 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6814 if(c !== card) c.classList.remove('sizes-open'); 6815 }); 6816 6817 strip.classList.toggle('open'); 6818 if(card) card.classList.toggle('sizes-open'); 6819 } 6820 6821 6822 /* ============================================ 6823 BEDEN TIKLAMASI 6824 ============================================ */ 6825 window.luxAddVariant = function(ev, elem){ 6826 ev.preventDefault(); 6827 ev.stopPropagation(); 6828 6829 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 6830 6831 var productId = elem.getAttribute('data-urun-id'); 6832 var varyantDeger = elem.getAttribute('data-varyant-deger'); 6833 6834 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6835 if(!holder) return false; 6836 6837 /* Seçilen bedeni ilk select'e yaz */ 6838 var firstSelect = holder.querySelector('select[data-variant="0"]'); 6839 if(firstSelect){ 6840 firstSelect.value = varyantDeger; 6841 if(typeof jQuery !== "undefined"){ 6842 jQuery(firstSelect).val(varyantDeger).trigger('change'); 6843 } 6844 } 6845 6846 /* DiÄer select'lere ilk geçerli deÄeri koy */ 6847 var allSelects = holder.querySelectorAll('select[data-variant]'); 6848 allSelects.forEach(function(sel, idx){ 6849 if(idx === 0) return; 6850 if(sel.value) return; 6851 var options = sel.querySelectorAll('option'); 6852 for(var i = 0; i < options.length; i++){ 6853 if(options[i].value){ 6854 sel.value = options[i].value; 6855 if(typeof jQuery !== "undefined"){ 6856 jQuery(sel).val(options[i].value).trigger('change'); 6857 } 6858 break; 6859 } 6860 } 6861 }); 6862 6863 /* Görsel feedback */ 6864 elem.classList.add('adding'); 6865 var originalText = elem.textContent; 6866 elem.textContent = 'â'; 6867 6868 /* Sepete ekle */ 6869 addToCartSmart(productId, { 6870 checkVariant: true, 6871 variantCount: allSelects.length, 6872 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 6873 }); 6874 6875 setTimeout(function(){ 6876 elem.textContent = originalText; 6877 elem.classList.remove('adding'); 6878 closeAll(); 6879 }, 800); 6880 6881 return false; 6882 }; 6883 6884 6885 /* ============================================ 6886 SEPETE EKLE - Modal killer ile 6887 ============================================ */ 6888 function addToCartSmart(productId, extraOptions){ 6889 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6890 6891 var options = { 6892 quantity: 1, 6893 hideNativeModal: 'lux-card-' + productId 6894 }; 6895 6896 if(extraOptions){
6897 Object.keys(extraOptions).forEach(function(k){ 6898 options[k] = extraOptions[k]; 6899 }); 6900 } else if(holder){ 6901 var selects = holder.querySelectorAll('select[data-variant]'); 6902 if(selects.length > 0){ 6903 options.checkVariant = true; 6904 options.variantCount = selects.length; 6905 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 6906 } 6907 } 6908 6909 startModalKill(2000); 6910 6911 if(typeof addCart === "function"){ 6912 try { 6913 addCart(productId, 'card', options); 6914 flashSuccess(productId); 6915 } catch(err){ 6916 console.error('Sepete ekleme hatası:', err); 6917 } 6918 } 6919 } 6920 6921})(); 6922</script>
6922</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 6923 data-lux-product-shell="1" 6924 data-lux-page="1"><style> 6925@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 6926 6927/* ===== VEZZA LUX CARD ===== */ 6928.card-product{ 6929 font-family:'Poppins',sans-serif; 6930 background:#fff !important; 6931 position:relative; 6932} 6933.card-product-inner{ 6934 background:transparent !important; 6935 position:relative; 6936} 6937.card-product .c-p-i-link, 6938.card-product a{ 6939 background:transparent !important; 6940} 6941.card-product-inner > div{ 6942 background:transparent !important; 6943} 6944.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 6945 background:transparent !important; 6946} 6947.card-product .card-product-content, 6948.card-product .price-group, 6949.card-product .prices{ 6950 background:transparent !important; 6951} 6952[class*="skeleton"], 6953[class*="placeholder"], 6954[class*="loading"]{ 6955 background:transparent !important; 6956} 6957 6958/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 6959.image-wrapper{ 6960 position:relative; 6961 width:100%; 6962 aspect-ratio:1/1; 6963 overflow:hidden; 6964 background:#fff !important; 6965} 6966 6967.image{ 6968 position:relative; 6969 width:100%; 6970 height:100%; 6971} 6972 6973.image-wrapper img{ 6974 width:100% !important; 6975 height:100% !important; 6976 object-fit:cover !important; 6977 object-position:center center !important; 6978 display:block; 6979 transition:transform .35s ease; 6980} 6981 6982/* ===== DISCOUNT ===== */ 6983.discount{ 6984 position:absolute; 6985 top:12px; 6986 left:12px; 6987 width:28px; 6988 height:48px; 6989 background:#e10b0b; 6990 color:#fff; 6991 font-size:12px; 6992 font-weight:600; 6993 display:flex; 6994 align-items:center; 6995 justify-content:center; 6996 writing-mode:vertical-rl; 6997 transform:rotate(180deg); 6998 letter-spacing:.5px; 6999 z-index:7; 7000} 7001 7002/* ===== FAV ===== */ 7003.lux-fav{ 7004 position:absolute; 7005 top:12px; 7006 right:12px; 7007 z-index:7; 7008} 7009.lux-fav a, 7010.lux-fav button{ 7011 background:transparent !important; 7012 border:0 !important; 7013 padding:0 !important; 7014 cursor:pointer; 7015 display:inline-flex; 7016 align-items:center; 7017 justify-content:center; 7018} 7019 7020/* ===== SEPET IKON ===== */ 7021.lux-bag{ 7022 position:absolute; 7023 bottom:12px; 7024 right:12px; 7025 z-index:7; 7026 width:34px; 7027 height:34px; 7028 display:inline-flex; 7029 align-items:center; 7030 justify-content:center; 7031 background:rgba(255,255,255,.92); 7032 border:1px solid rgba(0,0,0,.10); 7033 border-radius:10px; 7034 cursor:pointer; 7035 transition:.2s ease; 7036} 7037.lux-bag:hover{ 7038 background:#fff; 7039 border-color:rgba(0,0,0,.25); 7040} 7041.lux-bag.is-loading{ 7042 opacity:.6; 7043 cursor:wait; 7044} 7045.lux-bag.is-success{ 7046 background:#2e7d32 !important; 7047 border-color:#2e7d32 !important; 7048 color:#fff !important; 7049} 7050.card-product.sizes-open .lux-bag{ 7051 opacity:0; 7052 pointer-events:none; 7053} 7054 7055/* Loading spinner */ 7056.lux-bag.is-loading i::before{ 7057 content:"â³"; 7058} 7059 7060/* ===== SIZE STRIP ===== */ 7061.size-strip{ 7062 width:100%; 7063 max-height:0; 7064 overflow:hidden; 7065 background:#fff; 7066 display:flex; 7067 flex-wrap:wrap; 7068 transition:max-height .3s ease, border-color .3s ease; 7069 border-top:1px solid transparent; 7070 border-bottom:1px solid transparent; 7071} 7072.size-strip.open{ 7073 max-height:200px; 7074 border-top-color:rgba(0,0,0,.08); 7075 border-bottom-color:rgba(0,0,0,.08); 7076} 7077.size-item{ 7078 flex:1 0 auto; 7079 min-width:38px; 7080 height:42px; 7081 display:flex; 7082 align-items:center; 7083 justify-content:center; 7084 font-size:13px; 7085 font-weight:500; 7086 color:#111 !important; 7087 cursor:pointer; 7088 user-select:none; 7089 background:transparent; 7090 transition:background .15s ease, color .15s ease; 7091 border-right:1px solid rgba(0,0,0,.08); 7092} 7093.size-item:last-child{ border-right:0; } 7094.size-item:hover:not(.disabled):not(.adding){ 7095 background:#000 !important; 7096 color:#fff !important; 7097} 7098.size-item.disabled{ 7099 color:#111 !important; 7100 text-decoration:line-through !important; 7101 opacity:.30 !important; 7102 cursor:not-allowed; 7103} 7104.size-item.adding{ 7105 background:#2e7d32 !important; 7106 color:#fff !important; 7107 cursor:wait; 7108} 7109 7110/* ===== META ===== */ 7111.lux-meta{ 7112 padding:12px 6px 6px; 7113 background:transparent !important; 7114} 7115.lux-brand{ 7116 font-size:16px; 7117 font-weight:600; 7118 color:#111; 7119 margin-bottom:2px; 7120} 7121.lux-title{ 7122 font-size:14px; 7123 font-weight:400; 7124 line-height:1.45; 7125 color:#111; 7126 margin:0; 7127} 7128.lux-price{ 7129 margin-top:10px; 7130 display:flex; 7131 gap:10px; 7132 align-items:baseline; 7133 background:transparent !important; 7134} 7135.lux-price .list-price{ 7136 font-size:14px; 7137 font-weight:400; 7138 color:#111; 7139 text-decoration:line-through; 7140} 7141.lux-price .sale-price{ 7142 font-size:16px; 7143 font-weight:600; 7144 color:#e10b0b; 7145} 7146 7147.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
7148.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 7149</style><div class="card-product" 7150 id="card-10733" 7151 data-lux-card-id="10733" 7152 data-lux-product-link="https://www.vezzalux.com/cl-1301-gri-loafer-erkek-ayakkabi" 7153 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/cl-1301-gri-loafer-erkek-ayakkabi" class="c-p-i-link" title="Cl 1301 Gri Loafer Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c14385e1bc-53414724-sw800sh800.webp" alt="Cl 1301 Gri Loafer Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c14385e1bc-53414724-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a3c1439a3f9f-66287884-sw800sh800.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 7154 onclick="userProductFavourite('add', 10733)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 7155 id="lux-bag-10733" 7156 onclick="return luxBagClick(event, 10733);" 7157 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10733" style="display:none;"></div><div class="size-strip" id="size-strip-10733" data-loaded="0"></div><a href="https://www.vezzalux.com/cl-1301-gri-loafer-erkek-ayakkabi" class="c-p-i-link" title="Cl 1301 Gri Loafer Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Christian Louboutin</div><div class="lux-title">Cl 1301 Gri Loafer Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
7157<script> 7158(function(){ 7159 7160 /* Bir kez kur */ 7161 if(window.__luxCardInit) return; 7162 window.__luxCardInit = true; 7163 7164 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 7165 window.__luxVariantCache = window.__luxVariantCache || {}; 7166 7167 function closeAll(){ 7168 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7169 s.classList.remove('open'); 7170 }); 7171 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7172 c.classList.remove('sizes-open'); 7173 }); 7174 } 7175 7176 function flashSuccess(productId){ 7177 var bag = document.getElementById('lux-bag-' + productId); 7178 if(!bag) return; 7179 bag.classList.add('is-success'); 7180 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 7181 } 7182 7183 /* DıŠtıklama - kapat */ 7184 document.addEventListener('click', function(e){ 7185 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 7186 if(!inside) closeAll(); 7187 }); 7188 7189 document.addEventListener('keydown', function(e){ 7190 if(e.key === 'Escape') closeAll(); 7191 }); 7192 7193 7194 /* ============================================ 7195 MODAL KILLER - yedek güvence 7196 ============================================ */ 7197 var LUX_MODAL_KILL_ACTIVE = false; 7198 7199 function killVisibleModals(){ 7200 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 7201 modals.forEach(function(m){ 7202 var id = (m.id || '').toLowerCase(); 7203 var txt = (m.textContent || '').toLowerCase(); 7204 var isCartModal = id.indexOf('cart') > -1 7205 || id.indexOf('variant') > -1 7206 || id.indexOf('fast') > -1 7207 || id.indexOf('urun') > -1 7208 || txt.indexOf('lütfen seçin') > -1; 7209 7210 if(isCartModal){ 7211 if(typeof jQuery !== 'undefined'){ 7212 try { jQuery(m).modal('hide'); } catch(e){} 7213 } 7214 m.classList.remove('show','in'); 7215 m.style.display = 'none'; 7216 } 7217 }); 7218 7219 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 7220 document.body.classList.remove('modal-open'); 7221 document.body.style.overflow = ''; 7222 document.body.style.paddingRight = ''; 7223 } 7224 7225 function startModalKill(durationMs){ 7226 if(LUX_MODAL_KILL_ACTIVE) return; 7227 LUX_MODAL_KILL_ACTIVE = true; 7228 killVisibleModals(); 7229 var interval = setInterval(killVisibleModals, 50); 7230 setTimeout(function(){ 7231 clearInterval(interval); 7232 LUX_MODAL_KILL_ACTIVE = false; 7233 }, durationMs || 2000); 7234 } 7235 7236 7237 /* ============================================ 7238 AJAX: Varyantları detay sayfasından çek 7239 ============================================ 7240 Ãrün detay sayfasının tam HTML'ini indir, 7241 DOMParser ile parse et, varyantları bul 7242 ============================================ */ 7243 function fetchVariants(productId, productLink, callback){ 7244 7245 /* Cache'te varsa hemen döndür */ 7246 if(window.__luxVariantCache[productId]){ 7247 callback(window.__luxVariantCache[productId]); 7248 return; 7249 } 7250 7251 fetch(productLink, { 7252 method: 'GET', 7253 credentials: 'same-origin', 7254 headers: { 'Accept': 'text/html' } 7255 }) 7256 .then(function(r){ return r.text(); }) 7257 .then(function(html){ 7258 var parser = new DOMParser(); 7259 var doc = parser.parseFromString(html, 'text/html'); 7260 7261 /* Detay sayfasındaki .variant-box'ı bul */ 7262 var variantBox = doc.querySelector('.variant-box'); 7263 if(!variantBox){ 7264 callback({ variants: [], error: 'no_variant_box' }); 7265 return; 7266 } 7267 7268 /* Her varyant grubu için select'leri ve option'ları oku */ 7269 var variants = []; 7270 var variantLis = variantBox.querySelectorAll('.variant'); 7271 7272 variantLis.forEach(function(li, idx){ 7273 var nameEl = li.querySelector('.name'); 7274 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 7275 7276 var values = []; 7277 7278 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 7279 var optLinks = li.querySelectorAll('.options a'); 7280 7281 if(optLinks.length > 0){ 7282 optLinks.forEach(function(a){ 7283 /* Beden/renk deÄerini doÄru attribute'tan oku
7284 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 7285 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 7286 - textContent: fallback */ 7287 var deger = a.getAttribute('data-variant-value') 7288 || a.textContent.trim(); 7289 7290 /* Stok kontrolü - birden fazla yoldan kontrol et */ 7291 var isSoldOut = a.classList.contains('sold-out') 7292 || a.classList.contains('sold_out') 7293 || a.classList.contains('disabled') 7294 || a.classList.contains('stoksuz') 7295 || a.classList.contains('out-of-stock') 7296 || a.hasAttribute('disabled') 7297 || a.getAttribute('data-in-stock') === '0' 7298 || a.getAttribute('data-in-stock') === 'false' 7299 || a.getAttribute('data-stokta-var-mi') === '0' 7300 || a.getAttribute('data-stokta-var-mi') === 'false'; 7301 7302 values.push({ 7303 deger: deger, 7304 inStock: !isSoldOut 7305 }); 7306 }); 7307 } else { 7308 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 7309 var select = li.querySelector('select'); 7310 if(select){ 7311 var opts = select.querySelectorAll('option'); 7312 opts.forEach(function(o){ 7313 if(!o.value) return; 7314 values.push({ 7315 deger: o.value, 7316 inStock: !o.disabled 7317 }); 7318 }); 7319 } 7320 } 7321 7322 variants.push({ 7323 index: idx, 7324 baslik: name, 7325 values: values 7326 }); 7327 }); 7328 7329 var result = { variants: variants }; 7330 window.__luxVariantCache[productId] = result; 7331 callback(result); 7332 }) 7333 .catch(function(err){ 7334 console.error('Varyant çekme hatası:', err); 7335 callback({ variants: [], error: 'fetch_failed' }); 7336 }); 7337 } 7338 7339 7340 /* ============================================ 7341 Beden Åeridini ve gizli variant-box'ı oluÅtur 7342 ============================================ */ 7343 function buildVariantUI(productId, data){ 7344 var card = document.getElementById('card-' + productId); 7345 if(!card) return false; 7346 7347 var holder = card.querySelector('.lux-variant-box'); 7348 var strip = document.getElementById('size-strip-' + productId); 7349 if(!holder || !strip) return false; 7350 7351 if(!data.variants || data.variants.length === 0){ 7352 /* Varyant yok */ 7353 return false; 7354 } 7355 7356 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 7357 var displayVariant = null;
7358 data.variants.forEach(function(v){ 7359 if(!displayVariant && v.values.length > 1){ 7360 displayVariant = v; 7361 } 7362 }); 7363 7364 /* Gizli variant-box HTML */ 7365 var html = '<div class="variant-box"><ul>'; 7366 data.variants.forEach(function(v){ 7367 html += '<li class="variant">'; 7368 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 7369 7370 if(v.values.length > 1){ 7371 html += '<option value="">Lütfen seçin</option>'; 7372 } 7373 7374 v.values.forEach(function(val, i){ 7375 var selected = (v.values.length === 1) ? ' selected' : ''; 7376 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 7377 }); 7378 7379 html += '</select></li>'; 7380 }); 7381 html += '</ul></div>'; 7382 7383 holder.innerHTML = html; 7384 holder.style.display = ''; 7385 7386 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 7387 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 7388 if(displayVariant){ 7389 var stripHtml = ''; 7390 var inStockCount = 0; 7391 7392 /* DEBUG - console'da gör */ 7393 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 7394 7395 displayVariant.values.forEach(function(val){ 7396 /* SADECE stokta olanları ekle */ 7397 if(val.inStock === true){ 7398 stripHtml += '<div class="size-item" ' 7399 + 'data-urun-id="' + productId + '" ' 7400 + 'data-varyant-deger="' + val.deger + '" ' 7401 + 'onclick="return luxAddVariant(event, this);">' 7402 + val.deger + '</div>'; 7403 inStockCount++; 7404 } 7405 }); 7406 7407 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 7408 if(inStockCount === 0){ 7409 strip.setAttribute('data-loaded', '1'); 7410 strip.setAttribute('data-has-variants', '0'); 7411 return false; 7412 } 7413
7414 strip.innerHTML = stripHtml; 7415 strip.setAttribute('data-loaded', '1'); 7416 strip.setAttribute('data-has-variants', '1'); 7417 return true; 7418 } else { 7419 strip.setAttribute('data-loaded', '1'); 7420 strip.setAttribute('data-has-variants', '0'); 7421 return false; 7422 } 7423 } 7424 7425 7426 /* ============================================ 7427 SEPET IKONU TIKLAMASI 7428 ============================================ */ 7429 window.luxBagClick = function(ev, productId){ 7430 ev.preventDefault(); 7431 ev.stopPropagation(); 7432 7433 var card = document.getElementById('card-' + productId); 7434 var strip = document.getElementById('size-strip-' + productId); 7435 var bag = document.getElementById('lux-bag-' + productId); 7436 if(!card || !strip) return false; 7437 7438 /* Strip zaten yüklenmiÅse direkt davran */ 7439 if(strip.getAttribute('data-loaded') === '1'){ 7440 if(strip.getAttribute('data-has-variants') === '1'){ 7441 toggleStrip(productId); 7442 } else { 7443 addToCartSmart(productId); 7444 } 7445 return false; 7446 } 7447 7448 /* İlk tıklama - AJAX ile varyantları çek */ 7449 bag.classList.add('is-loading'); 7450 var productLink = card.getAttribute('data-lux-product-link'); 7451 7452 fetchVariants(productId, productLink, function(data){ 7453 bag.classList.remove('is-loading'); 7454 7455 var hasVariants = buildVariantUI(productId, data); 7456 7457 if(hasVariants){ 7458 /* Bedenler var - Åeridi aç */ 7459 toggleStrip(productId); 7460 } else { 7461 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 7462 addToCartSmart(productId); 7463 } 7464 }); 7465 7466 return false; 7467 }; 7468 7469 function toggleStrip(productId){ 7470 var strip = document.getElementById('size-strip-' + productId); 7471 var card = document.getElementById('card-' + productId); 7472 if(!strip) return; 7473 7474 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7475 if(s !== strip) s.classList.remove('open'); 7476 }); 7477 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7478 if(c !== card) c.classList.remove('sizes-open'); 7479 }); 7480 7481 strip.classList.toggle('open'); 7482 if(card) card.classList.toggle('sizes-open'); 7483 } 7484 7485 7486 /* ============================================ 7487 BEDEN TIKLAMASI 7488 ============================================ */ 7489 window.luxAddVariant = function(ev, elem){ 7490 ev.preventDefault(); 7491 ev.stopPropagation(); 7492 7493 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 7494 7495 var productId = elem.getAttribute('data-urun-id'); 7496 var varyantDeger = elem.getAttribute('data-varyant-deger'); 7497 7498 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 7499 if(!holder) return false; 7500 7501 /* Seçilen bedeni ilk select'e yaz */ 7502 var firstSelect = holder.querySelector('select[data-variant="0"]'); 7503 if(firstSelect){ 7504 firstSelect.value = varyantDeger; 7505 if(typeof jQuery !== "undefined"){ 7506 jQuery(firstSelect).val(varyantDeger).trigger('change'); 7507 } 7508 } 7509 7510 /* DiÄer select'lere ilk geçerli deÄeri koy */ 7511 var allSelects = holder.querySelectorAll('select[data-variant]'); 7512 allSelects.forEach(function(sel, idx){ 7513 if(idx === 0) return; 7514 if(sel.value) return; 7515 var options = sel.querySelectorAll('option'); 7516 for(var i = 0; i < options.length; i++){ 7517 if(options[i].value){ 7518 sel.value = options[i].value; 7519 if(typeof jQuery !== "undefined"){ 7520 jQuery(sel).val(options[i].value).trigger('change'); 7521 } 7522 break; 7523 } 7524 } 7525 }); 7526 7527 /* Görsel feedback */ 7528 elem.classList.add('adding'); 7529 var originalText = elem.textContent; 7530 elem.textContent = 'â'; 7531 7532 /* Sepete ekle */ 7533 addToCartSmart(productId, { 7534 checkVariant: true, 7535 variantCount: allSelects.length, 7536 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 7537 }); 7538 7539 setTimeout(function(){ 7540 elem.textContent = originalText; 7541 elem.classList.remove('adding'); 7542 closeAll(); 7543 }, 800); 7544 7545 return false; 7546 }; 7547 7548 7549 /* ============================================ 7550 SEPETE EKLE - Modal killer ile 7551 ============================================ */ 7552 function addToCartSmart(productId, extraOptions){ 7553 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 7554 7555 var options = { 7556 quantity: 1, 7557 hideNativeModal: 'lux-card-' + productId 7558 }; 7559 7560 if(extraOptions){
7561 Object.keys(extraOptions).forEach(function(k){ 7562 options[k] = extraOptions[k]; 7563 }); 7564 } else if(holder){ 7565 var selects = holder.querySelectorAll('select[data-variant]'); 7566 if(selects.length > 0){ 7567 options.checkVariant = true; 7568 options.variantCount = selects.length; 7569 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 7570 } 7571 } 7572 7573 startModalKill(2000); 7574 7575 if(typeof addCart === "function"){ 7576 try { 7577 addCart(productId, 'card', options); 7578 flashSuccess(productId); 7579 } catch(err){ 7580 console.error('Sepete ekleme hatası:', err); 7581 } 7582 } 7583 } 7584 7585})(); 7586</script>
7586</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 7587 data-lux-product-shell="1" 7588 data-lux-page="1"><style> 7589@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 7590 7591/* ===== VEZZA LUX CARD ===== */ 7592.card-product{ 7593 font-family:'Poppins',sans-serif; 7594 background:#fff !important; 7595 position:relative; 7596} 7597.card-product-inner{ 7598 background:transparent !important; 7599 position:relative; 7600} 7601.card-product .c-p-i-link, 7602.card-product a{ 7603 background:transparent !important; 7604} 7605.card-product-inner > div{ 7606 background:transparent !important; 7607} 7608.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 7609 background:transparent !important; 7610} 7611.card-product .card-product-content, 7612.card-product .price-group, 7613.card-product .prices{ 7614 background:transparent !important; 7615} 7616[class*="skeleton"], 7617[class*="placeholder"], 7618[class*="loading"]{ 7619 background:transparent !important; 7620} 7621 7622/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 7623.image-wrapper{ 7624 position:relative; 7625 width:100%; 7626 aspect-ratio:1/1; 7627 overflow:hidden; 7628 background:#fff !important; 7629} 7630 7631.image{ 7632 position:relative; 7633 width:100%; 7634 height:100%; 7635} 7636 7637.image-wrapper img{ 7638 width:100% !important; 7639 height:100% !important; 7640 object-fit:cover !important; 7641 object-position:center center !important; 7642 display:block; 7643 transition:transform .35s ease; 7644} 7645 7646/* ===== DISCOUNT ===== */ 7647.discount{ 7648 position:absolute; 7649 top:12px; 7650 left:12px; 7651 width:28px; 7652 height:48px; 7653 background:#e10b0b; 7654 color:#fff; 7655 font-size:12px; 7656 font-weight:600; 7657 display:flex; 7658 align-items:center; 7659 justify-content:center; 7660 writing-mode:vertical-rl; 7661 transform:rotate(180deg); 7662 letter-spacing:.5px; 7663 z-index:7; 7664} 7665 7666/* ===== FAV ===== */ 7667.lux-fav{ 7668 position:absolute; 7669 top:12px; 7670 right:12px; 7671 z-index:7; 7672} 7673.lux-fav a, 7674.lux-fav button{ 7675 background:transparent !important; 7676 border:0 !important; 7677 padding:0 !important; 7678 cursor:pointer; 7679 display:inline-flex; 7680 align-items:center; 7681 justify-content:center; 7682} 7683 7684/* ===== SEPET IKON ===== */ 7685.lux-bag{ 7686 position:absolute; 7687 bottom:12px; 7688 right:12px; 7689 z-index:7; 7690 width:34px; 7691 height:34px; 7692 display:inline-flex; 7693 align-items:center; 7694 justify-content:center; 7695 background:rgba(255,255,255,.92); 7696 border:1px solid rgba(0,0,0,.10); 7697 border-radius:10px; 7698 cursor:pointer; 7699 transition:.2s ease; 7700} 7701.lux-bag:hover{ 7702 background:#fff; 7703 border-color:rgba(0,0,0,.25); 7704} 7705.lux-bag.is-loading{ 7706 opacity:.6; 7707 cursor:wait; 7708} 7709.lux-bag.is-success{ 7710 background:#2e7d32 !important; 7711 border-color:#2e7d32 !important; 7712 color:#fff !important; 7713} 7714.card-product.sizes-open .lux-bag{ 7715 opacity:0; 7716 pointer-events:none; 7717} 7718 7719/* Loading spinner */ 7720.lux-bag.is-loading i::before{ 7721 content:"â³"; 7722} 7723 7724/* ===== SIZE STRIP ===== */ 7725.size-strip{ 7726 width:100%; 7727 max-height:0; 7728 overflow:hidden; 7729 background:#fff; 7730 display:flex; 7731 flex-wrap:wrap; 7732 transition:max-height .3s ease, border-color .3s ease; 7733 border-top:1px solid transparent; 7734 border-bottom:1px solid transparent; 7735} 7736.size-strip.open{ 7737 max-height:200px; 7738 border-top-color:rgba(0,0,0,.08); 7739 border-bottom-color:rgba(0,0,0,.08); 7740} 7741.size-item{ 7742 flex:1 0 auto; 7743 min-width:38px; 7744 height:42px; 7745 display:flex; 7746 align-items:center; 7747 justify-content:center; 7748 font-size:13px; 7749 font-weight:500; 7750 color:#111 !important; 7751 cursor:pointer; 7752 user-select:none; 7753 background:transparent; 7754 transition:background .15s ease, color .15s ease; 7755 border-right:1px solid rgba(0,0,0,.08); 7756} 7757.size-item:last-child{ border-right:0; } 7758.size-item:hover:not(.disabled):not(.adding){ 7759 background:#000 !important; 7760 color:#fff !important; 7761} 7762.size-item.disabled{ 7763 color:#111 !important; 7764 text-decoration:line-through !important; 7765 opacity:.30 !important; 7766 cursor:not-allowed; 7767} 7768.size-item.adding{ 7769 background:#2e7d32 !important; 7770 color:#fff !important; 7771 cursor:wait; 7772} 7773 7774/* ===== META ===== */ 7775.lux-meta{ 7776 padding:12px 6px 6px; 7777 background:transparent !important; 7778} 7779.lux-brand{ 7780 font-size:16px; 7781 font-weight:600; 7782 color:#111; 7783 margin-bottom:2px; 7784} 7785.lux-title{ 7786 font-size:14px; 7787 font-weight:400; 7788 line-height:1.45; 7789 color:#111; 7790 margin:0; 7791} 7792.lux-price{ 7793 margin-top:10px; 7794 display:flex; 7795 gap:10px; 7796 align-items:baseline; 7797 background:transparent !important; 7798} 7799.lux-price .list-price{ 7800 font-size:14px; 7801 font-weight:400; 7802 color:#111; 7803 text-decoration:line-through; 7804} 7805.lux-price .sale-price{ 7806 font-size:16px; 7807 font-weight:600; 7808 color:#e10b0b; 7809} 7810 7811.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
7812.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 7813</style><div class="card-product" 7814 id="card-10452" 7815 data-lux-card-id="10452" 7816 data-lux-product-link="https://www.vezzalux.com/cl-1169-siyah-sneaker-erkek-ayakkabi" 7817 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/cl-1169-siyah-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Cl 1169 Siyah Sneaker Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3d23fd6-92281142-sw1200sh1200.webp" alt="Cl 1169 Siyah Sneaker Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3d23fd6-92281142-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3e7e18f-16888515-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 7818 onclick="userProductFavourite('add', 10452)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 7819 id="lux-bag-10452" 7820 onclick="return luxBagClick(event, 10452);" 7821 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10452" style="display:none;"></div><div class="size-strip" id="size-strip-10452" data-loaded="0"></div><a href="https://www.vezzalux.com/cl-1169-siyah-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Cl 1169 Siyah Sneaker Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Christian Louboutin</div><div class="lux-title">Cl 1169 Siyah Sneaker Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
7821<script> 7822(function(){ 7823 7824 /* Bir kez kur */ 7825 if(window.__luxCardInit) return; 7826 window.__luxCardInit = true; 7827 7828 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 7829 window.__luxVariantCache = window.__luxVariantCache || {}; 7830 7831 function closeAll(){ 7832 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7833 s.classList.remove('open'); 7834 }); 7835 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7836 c.classList.remove('sizes-open'); 7837 }); 7838 } 7839 7840 function flashSuccess(productId){ 7841 var bag = document.getElementById('lux-bag-' + productId); 7842 if(!bag) return; 7843 bag.classList.add('is-success'); 7844 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 7845 } 7846 7847 /* DıŠtıklama - kapat */ 7848 document.addEventListener('click', function(e){ 7849 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 7850 if(!inside) closeAll(); 7851 }); 7852 7853 document.addEventListener('keydown', function(e){ 7854 if(e.key === 'Escape') closeAll(); 7855 }); 7856 7857 7858 /* ============================================ 7859 MODAL KILLER - yedek güvence 7860 ============================================ */ 7861 var LUX_MODAL_KILL_ACTIVE = false; 7862 7863 function killVisibleModals(){ 7864 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 7865 modals.forEach(function(m){ 7866 var id = (m.id || '').toLowerCase(); 7867 var txt = (m.textContent || '').toLowerCase(); 7868 var isCartModal = id.indexOf('cart') > -1 7869 || id.indexOf('variant') > -1 7870 || id.indexOf('fast') > -1 7871 || id.indexOf('urun') > -1 7872 || txt.indexOf('lütfen seçin') > -1; 7873 7874 if(isCartModal){ 7875 if(typeof jQuery !== 'undefined'){ 7876 try { jQuery(m).modal('hide'); } catch(e){} 7877 } 7878 m.classList.remove('show','in'); 7879 m.style.display = 'none'; 7880 } 7881 }); 7882 7883 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 7884 document.body.classList.remove('modal-open'); 7885 document.body.style.overflow = ''; 7886 document.body.style.paddingRight = ''; 7887 } 7888 7889 function startModalKill(durationMs){ 7890 if(LUX_MODAL_KILL_ACTIVE) return; 7891 LUX_MODAL_KILL_ACTIVE = true; 7892 killVisibleModals(); 7893 var interval = setInterval(killVisibleModals, 50); 7894 setTimeout(function(){ 7895 clearInterval(interval); 7896 LUX_MODAL_KILL_ACTIVE = false; 7897 }, durationMs || 2000); 7898 } 7899 7900 7901 /* ============================================ 7902 AJAX: Varyantları detay sayfasından çek 7903 ============================================ 7904 Ãrün detay sayfasının tam HTML'ini indir, 7905 DOMParser ile parse et, varyantları bul 7906 ============================================ */ 7907 function fetchVariants(productId, productLink, callback){ 7908 7909 /* Cache'te varsa hemen döndür */ 7910 if(window.__luxVariantCache[productId]){ 7911 callback(window.__luxVariantCache[productId]); 7912 return; 7913 } 7914 7915 fetch(productLink, { 7916 method: 'GET', 7917 credentials: 'same-origin', 7918 headers: { 'Accept': 'text/html' } 7919 }) 7920 .then(function(r){ return r.text(); }) 7921 .then(function(html){ 7922 var parser = new DOMParser(); 7923 var doc = parser.parseFromString(html, 'text/html'); 7924 7925 /* Detay sayfasındaki .variant-box'ı bul */ 7926 var variantBox = doc.querySelector('.variant-box'); 7927 if(!variantBox){ 7928 callback({ variants: [], error: 'no_variant_box' }); 7929 return; 7930 } 7931 7932 /* Her varyant grubu için select'leri ve option'ları oku */ 7933 var variants = []; 7934 var variantLis = variantBox.querySelectorAll('.variant'); 7935 7936 variantLis.forEach(function(li, idx){ 7937 var nameEl = li.querySelector('.name'); 7938 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 7939 7940 var values = []; 7941 7942 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 7943 var optLinks = li.querySelectorAll('.options a'); 7944 7945 if(optLinks.length > 0){ 7946 optLinks.forEach(function(a){ 7947 /* Beden/renk deÄerini doÄru attribute'tan oku
7948 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 7949 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 7950 - textContent: fallback */ 7951 var deger = a.getAttribute('data-variant-value') 7952 || a.textContent.trim(); 7953 7954 /* Stok kontrolü - birden fazla yoldan kontrol et */ 7955 var isSoldOut = a.classList.contains('sold-out') 7956 || a.classList.contains('sold_out') 7957 || a.classList.contains('disabled') 7958 || a.classList.contains('stoksuz') 7959 || a.classList.contains('out-of-stock') 7960 || a.hasAttribute('disabled') 7961 || a.getAttribute('data-in-stock') === '0' 7962 || a.getAttribute('data-in-stock') === 'false' 7963 || a.getAttribute('data-stokta-var-mi') === '0' 7964 || a.getAttribute('data-stokta-var-mi') === 'false'; 7965 7966 values.push({ 7967 deger: deger, 7968 inStock: !isSoldOut 7969 }); 7970 }); 7971 } else { 7972 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 7973 var select = li.querySelector('select'); 7974 if(select){ 7975 var opts = select.querySelectorAll('option'); 7976 opts.forEach(function(o){ 7977 if(!o.value) return; 7978 values.push({ 7979 deger: o.value, 7980 inStock: !o.disabled 7981 }); 7982 }); 7983 } 7984 } 7985 7986 variants.push({ 7987 index: idx, 7988 baslik: name, 7989 values: values 7990 }); 7991 }); 7992 7993 var result = { variants: variants }; 7994 window.__luxVariantCache[productId] = result; 7995 callback(result); 7996 }) 7997 .catch(function(err){ 7998 console.error('Varyant çekme hatası:', err); 7999 callback({ variants: [], error: 'fetch_failed' }); 8000 }); 8001 } 8002 8003 8004 /* ============================================ 8005 Beden Åeridini ve gizli variant-box'ı oluÅtur 8006 ============================================ */ 8007 function buildVariantUI(productId, data){ 8008 var card = document.getElementById('card-' + productId); 8009 if(!card) return false; 8010 8011 var holder = card.querySelector('.lux-variant-box'); 8012 var strip = document.getElementById('size-strip-' + productId); 8013 if(!holder || !strip) return false; 8014 8015 if(!data.variants || data.variants.length === 0){ 8016 /* Varyant yok */ 8017 return false; 8018 } 8019 8020 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 8021 var displayVariant = null;
8022 data.variants.forEach(function(v){ 8023 if(!displayVariant && v.values.length > 1){ 8024 displayVariant = v; 8025 } 8026 }); 8027 8028 /* Gizli variant-box HTML */ 8029 var html = '<div class="variant-box"><ul>'; 8030 data.variants.forEach(function(v){ 8031 html += '<li class="variant">'; 8032 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 8033 8034 if(v.values.length > 1){ 8035 html += '<option value="">Lütfen seçin</option>'; 8036 } 8037 8038 v.values.forEach(function(val, i){ 8039 var selected = (v.values.length === 1) ? ' selected' : ''; 8040 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 8041 }); 8042 8043 html += '</select></li>'; 8044 }); 8045 html += '</ul></div>'; 8046 8047 holder.innerHTML = html; 8048 holder.style.display = ''; 8049 8050 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 8051 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 8052 if(displayVariant){ 8053 var stripHtml = ''; 8054 var inStockCount = 0; 8055 8056 /* DEBUG - console'da gör */ 8057 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 8058 8059 displayVariant.values.forEach(function(val){ 8060 /* SADECE stokta olanları ekle */ 8061 if(val.inStock === true){ 8062 stripHtml += '<div class="size-item" ' 8063 + 'data-urun-id="' + productId + '" ' 8064 + 'data-varyant-deger="' + val.deger + '" ' 8065 + 'onclick="return luxAddVariant(event, this);">' 8066 + val.deger + '</div>'; 8067 inStockCount++; 8068 } 8069 }); 8070 8071 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 8072 if(inStockCount === 0){ 8073 strip.setAttribute('data-loaded', '1'); 8074 strip.setAttribute('data-has-variants', '0'); 8075 return false; 8076 } 8077
8078 strip.innerHTML = stripHtml; 8079 strip.setAttribute('data-loaded', '1'); 8080 strip.setAttribute('data-has-variants', '1'); 8081 return true; 8082 } else { 8083 strip.setAttribute('data-loaded', '1'); 8084 strip.setAttribute('data-has-variants', '0'); 8085 return false; 8086 } 8087 } 8088 8089 8090 /* ============================================ 8091 SEPET IKONU TIKLAMASI 8092 ============================================ */ 8093 window.luxBagClick = function(ev, productId){ 8094 ev.preventDefault(); 8095 ev.stopPropagation(); 8096 8097 var card = document.getElementById('card-' + productId); 8098 var strip = document.getElementById('size-strip-' + productId); 8099 var bag = document.getElementById('lux-bag-' + productId); 8100 if(!card || !strip) return false; 8101 8102 /* Strip zaten yüklenmiÅse direkt davran */ 8103 if(strip.getAttribute('data-loaded') === '1'){ 8104 if(strip.getAttribute('data-has-variants') === '1'){ 8105 toggleStrip(productId); 8106 } else { 8107 addToCartSmart(productId); 8108 } 8109 return false; 8110 } 8111 8112 /* İlk tıklama - AJAX ile varyantları çek */ 8113 bag.classList.add('is-loading'); 8114 var productLink = card.getAttribute('data-lux-product-link'); 8115 8116 fetchVariants(productId, productLink, function(data){ 8117 bag.classList.remove('is-loading'); 8118 8119 var hasVariants = buildVariantUI(productId, data); 8120 8121 if(hasVariants){ 8122 /* Bedenler var - Åeridi aç */ 8123 toggleStrip(productId); 8124 } else { 8125 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 8126 addToCartSmart(productId); 8127 } 8128 }); 8129 8130 return false; 8131 }; 8132 8133 function toggleStrip(productId){ 8134 var strip = document.getElementById('size-strip-' + productId); 8135 var card = document.getElementById('card-' + productId); 8136 if(!strip) return; 8137 8138 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8139 if(s !== strip) s.classList.remove('open'); 8140 }); 8141 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8142 if(c !== card) c.classList.remove('sizes-open'); 8143 }); 8144 8145 strip.classList.toggle('open'); 8146 if(card) card.classList.toggle('sizes-open'); 8147 } 8148 8149 8150 /* ============================================ 8151 BEDEN TIKLAMASI 8152 ============================================ */ 8153 window.luxAddVariant = function(ev, elem){ 8154 ev.preventDefault(); 8155 ev.stopPropagation(); 8156 8157 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 8158 8159 var productId = elem.getAttribute('data-urun-id'); 8160 var varyantDeger = elem.getAttribute('data-varyant-deger'); 8161 8162 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8163 if(!holder) return false; 8164 8165 /* Seçilen bedeni ilk select'e yaz */ 8166 var firstSelect = holder.querySelector('select[data-variant="0"]'); 8167 if(firstSelect){ 8168 firstSelect.value = varyantDeger; 8169 if(typeof jQuery !== "undefined"){ 8170 jQuery(firstSelect).val(varyantDeger).trigger('change'); 8171 } 8172 } 8173 8174 /* DiÄer select'lere ilk geçerli deÄeri koy */ 8175 var allSelects = holder.querySelectorAll('select[data-variant]'); 8176 allSelects.forEach(function(sel, idx){ 8177 if(idx === 0) return; 8178 if(sel.value) return; 8179 var options = sel.querySelectorAll('option'); 8180 for(var i = 0; i < options.length; i++){ 8181 if(options[i].value){ 8182 sel.value = options[i].value; 8183 if(typeof jQuery !== "undefined"){ 8184 jQuery(sel).val(options[i].value).trigger('change'); 8185 } 8186 break; 8187 } 8188 } 8189 }); 8190 8191 /* Görsel feedback */ 8192 elem.classList.add('adding'); 8193 var originalText = elem.textContent; 8194 elem.textContent = 'â'; 8195 8196 /* Sepete ekle */ 8197 addToCartSmart(productId, { 8198 checkVariant: true, 8199 variantCount: allSelects.length, 8200 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 8201 }); 8202 8203 setTimeout(function(){ 8204 elem.textContent = originalText; 8205 elem.classList.remove('adding'); 8206 closeAll(); 8207 }, 800); 8208 8209 return false; 8210 }; 8211 8212 8213 /* ============================================ 8214 SEPETE EKLE - Modal killer ile 8215 ============================================ */ 8216 function addToCartSmart(productId, extraOptions){ 8217 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8218 8219 var options = { 8220 quantity: 1, 8221 hideNativeModal: 'lux-card-' + productId 8222 }; 8223 8224 if(extraOptions){
8225 Object.keys(extraOptions).forEach(function(k){ 8226 options[k] = extraOptions[k]; 8227 }); 8228 } else if(holder){ 8229 var selects = holder.querySelectorAll('select[data-variant]'); 8230 if(selects.length > 0){ 8231 options.checkVariant = true; 8232 options.variantCount = selects.length; 8233 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 8234 } 8235 } 8236 8237 startModalKill(2000); 8238 8239 if(typeof addCart === "function"){ 8240 try { 8241 addCart(productId, 'card', options); 8242 flashSuccess(productId); 8243 } catch(err){ 8244 console.error('Sepete ekleme hatası:', err); 8245 } 8246 } 8247 } 8248 8249})(); 8250</script>
8250</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 8251 data-lux-product-shell="1" 8252 data-lux-page="1"><style> 8253@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 8254 8255/* ===== VEZZA LUX CARD ===== */ 8256.card-product{ 8257 font-family:'Poppins',sans-serif; 8258 background:#fff !important; 8259 position:relative; 8260} 8261.card-product-inner{ 8262 background:transparent !important; 8263 position:relative; 8264} 8265.card-product .c-p-i-link, 8266.card-product a{ 8267 background:transparent !important; 8268} 8269.card-product-inner > div{ 8270 background:transparent !important; 8271} 8272.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 8273 background:transparent !important; 8274} 8275.card-product .card-product-content, 8276.card-product .price-group, 8277.card-product .prices{ 8278 background:transparent !important; 8279} 8280[class*="skeleton"], 8281[class*="placeholder"], 8282[class*="loading"]{ 8283 background:transparent !important; 8284} 8285 8286/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 8287.image-wrapper{ 8288 position:relative; 8289 width:100%; 8290 aspect-ratio:1/1; 8291 overflow:hidden; 8292 background:#fff !important; 8293} 8294 8295.image{ 8296 position:relative; 8297 width:100%; 8298 height:100%; 8299} 8300 8301.image-wrapper img{ 8302 width:100% !important; 8303 height:100% !important; 8304 object-fit:cover !important; 8305 object-position:center center !important; 8306 display:block; 8307 transition:transform .35s ease; 8308} 8309 8310/* ===== DISCOUNT ===== */ 8311.discount{ 8312 position:absolute; 8313 top:12px; 8314 left:12px; 8315 width:28px; 8316 height:48px; 8317 background:#e10b0b; 8318 color:#fff; 8319 font-size:12px; 8320 font-weight:600; 8321 display:flex; 8322 align-items:center; 8323 justify-content:center; 8324 writing-mode:vertical-rl; 8325 transform:rotate(180deg); 8326 letter-spacing:.5px; 8327 z-index:7; 8328} 8329 8330/* ===== FAV ===== */ 8331.lux-fav{ 8332 position:absolute; 8333 top:12px; 8334 right:12px; 8335 z-index:7; 8336} 8337.lux-fav a, 8338.lux-fav button{ 8339 background:transparent !important; 8340 border:0 !important; 8341 padding:0 !important; 8342 cursor:pointer; 8343 display:inline-flex; 8344 align-items:center; 8345 justify-content:center; 8346} 8347 8348/* ===== SEPET IKON ===== */ 8349.lux-bag{ 8350 position:absolute; 8351 bottom:12px; 8352 right:12px; 8353 z-index:7; 8354 width:34px; 8355 height:34px; 8356 display:inline-flex; 8357 align-items:center; 8358 justify-content:center; 8359 background:rgba(255,255,255,.92); 8360 border:1px solid rgba(0,0,0,.10); 8361 border-radius:10px; 8362 cursor:pointer; 8363 transition:.2s ease; 8364} 8365.lux-bag:hover{ 8366 background:#fff; 8367 border-color:rgba(0,0,0,.25); 8368} 8369.lux-bag.is-loading{ 8370 opacity:.6; 8371 cursor:wait; 8372} 8373.lux-bag.is-success{ 8374 background:#2e7d32 !important; 8375 border-color:#2e7d32 !important; 8376 color:#fff !important; 8377} 8378.card-product.sizes-open .lux-bag{ 8379 opacity:0; 8380 pointer-events:none; 8381} 8382 8383/* Loading spinner */ 8384.lux-bag.is-loading i::before{ 8385 content:"â³"; 8386} 8387 8388/* ===== SIZE STRIP ===== */ 8389.size-strip{ 8390 width:100%; 8391 max-height:0; 8392 overflow:hidden; 8393 background:#fff; 8394 display:flex; 8395 flex-wrap:wrap; 8396 transition:max-height .3s ease, border-color .3s ease; 8397 border-top:1px solid transparent; 8398 border-bottom:1px solid transparent; 8399} 8400.size-strip.open{ 8401 max-height:200px; 8402 border-top-color:rgba(0,0,0,.08); 8403 border-bottom-color:rgba(0,0,0,.08); 8404} 8405.size-item{ 8406 flex:1 0 auto; 8407 min-width:38px; 8408 height:42px; 8409 display:flex; 8410 align-items:center; 8411 justify-content:center; 8412 font-size:13px; 8413 font-weight:500; 8414 color:#111 !important; 8415 cursor:pointer; 8416 user-select:none; 8417 background:transparent; 8418 transition:background .15s ease, color .15s ease; 8419 border-right:1px solid rgba(0,0,0,.08); 8420} 8421.size-item:last-child{ border-right:0; } 8422.size-item:hover:not(.disabled):not(.adding){ 8423 background:#000 !important; 8424 color:#fff !important; 8425} 8426.size-item.disabled{ 8427 color:#111 !important; 8428 text-decoration:line-through !important; 8429 opacity:.30 !important; 8430 cursor:not-allowed; 8431} 8432.size-item.adding{ 8433 background:#2e7d32 !important; 8434 color:#fff !important; 8435 cursor:wait; 8436} 8437 8438/* ===== META ===== */ 8439.lux-meta{ 8440 padding:12px 6px 6px; 8441 background:transparent !important; 8442} 8443.lux-brand{ 8444 font-size:16px; 8445 font-weight:600; 8446 color:#111; 8447 margin-bottom:2px; 8448} 8449.lux-title{ 8450 font-size:14px; 8451 font-weight:400; 8452 line-height:1.45; 8453 color:#111; 8454 margin:0; 8455} 8456.lux-price{ 8457 margin-top:10px; 8458 display:flex; 8459 gap:10px; 8460 align-items:baseline; 8461 background:transparent !important; 8462} 8463.lux-price .list-price{ 8464 font-size:14px; 8465 font-weight:400; 8466 color:#111; 8467 text-decoration:line-through; 8468} 8469.lux-price .sale-price{ 8470 font-size:16px; 8471 font-weight:600; 8472 color:#e10b0b; 8473} 8474 8475.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
8476.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 8477</style><div class="card-product" 8478 id="card-10201" 8479 data-lux-card-id="10201" 8480 data-lux-product-link="https://www.vezzalux.com/gg-856-arkasi-gold-erkek-ayakkabi" 8481 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%38</div><a href="https://www.vezzalux.com/gg-856-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Gg 856 Arkası Gold Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e648254-60323027-sw1200sh1200.webp" alt="Gg 856 Arkası Gold Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e648254-60323027-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e7e34ce-69020570-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 8482 onclick="userProductFavourite('add', 10201)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 8483 id="lux-bag-10201" 8484 onclick="return luxBagClick(event, 10201);" 8485 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10201" style="display:none;"></div><div class="size-strip" id="size-strip-10201" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-856-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Gg 856 Arkası Gold Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 856 Arkası Gold Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">10.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
8485<script> 8486(function(){ 8487 8488 /* Bir kez kur */ 8489 if(window.__luxCardInit) return; 8490 window.__luxCardInit = true; 8491 8492 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 8493 window.__luxVariantCache = window.__luxVariantCache || {}; 8494 8495 function closeAll(){ 8496 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8497 s.classList.remove('open'); 8498 }); 8499 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8500 c.classList.remove('sizes-open'); 8501 }); 8502 } 8503 8504 function flashSuccess(productId){ 8505 var bag = document.getElementById('lux-bag-' + productId); 8506 if(!bag) return; 8507 bag.classList.add('is-success'); 8508 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 8509 } 8510 8511 /* DıŠtıklama - kapat */ 8512 document.addEventListener('click', function(e){ 8513 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 8514 if(!inside) closeAll(); 8515 }); 8516 8517 document.addEventListener('keydown', function(e){ 8518 if(e.key === 'Escape') closeAll(); 8519 }); 8520 8521 8522 /* ============================================ 8523 MODAL KILLER - yedek güvence 8524 ============================================ */ 8525 var LUX_MODAL_KILL_ACTIVE = false; 8526 8527 function killVisibleModals(){ 8528 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 8529 modals.forEach(function(m){ 8530 var id = (m.id || '').toLowerCase(); 8531 var txt = (m.textContent || '').toLowerCase(); 8532 var isCartModal = id.indexOf('cart') > -1 8533 || id.indexOf('variant') > -1 8534 || id.indexOf('fast') > -1 8535 || id.indexOf('urun') > -1 8536 || txt.indexOf('lütfen seçin') > -1; 8537 8538 if(isCartModal){ 8539 if(typeof jQuery !== 'undefined'){ 8540 try { jQuery(m).modal('hide'); } catch(e){} 8541 } 8542 m.classList.remove('show','in'); 8543 m.style.display = 'none'; 8544 } 8545 }); 8546 8547 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 8548 document.body.classList.remove('modal-open'); 8549 document.body.style.overflow = ''; 8550 document.body.style.paddingRight = ''; 8551 } 8552 8553 function startModalKill(durationMs){ 8554 if(LUX_MODAL_KILL_ACTIVE) return; 8555 LUX_MODAL_KILL_ACTIVE = true; 8556 killVisibleModals(); 8557 var interval = setInterval(killVisibleModals, 50); 8558 setTimeout(function(){ 8559 clearInterval(interval); 8560 LUX_MODAL_KILL_ACTIVE = false; 8561 }, durationMs || 2000); 8562 } 8563 8564 8565 /* ============================================ 8566 AJAX: Varyantları detay sayfasından çek 8567 ============================================ 8568 Ãrün detay sayfasının tam HTML'ini indir, 8569 DOMParser ile parse et, varyantları bul 8570 ============================================ */ 8571 function fetchVariants(productId, productLink, callback){ 8572 8573 /* Cache'te varsa hemen döndür */ 8574 if(window.__luxVariantCache[productId]){ 8575 callback(window.__luxVariantCache[productId]); 8576 return; 8577 } 8578 8579 fetch(productLink, { 8580 method: 'GET', 8581 credentials: 'same-origin', 8582 headers: { 'Accept': 'text/html' } 8583 }) 8584 .then(function(r){ return r.text(); }) 8585 .then(function(html){ 8586 var parser = new DOMParser(); 8587 var doc = parser.parseFromString(html, 'text/html'); 8588 8589 /* Detay sayfasındaki .variant-box'ı bul */ 8590 var variantBox = doc.querySelector('.variant-box'); 8591 if(!variantBox){ 8592 callback({ variants: [], error: 'no_variant_box' }); 8593 return; 8594 } 8595 8596 /* Her varyant grubu için select'leri ve option'ları oku */ 8597 var variants = []; 8598 var variantLis = variantBox.querySelectorAll('.variant'); 8599 8600 variantLis.forEach(function(li, idx){ 8601 var nameEl = li.querySelector('.name'); 8602 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 8603 8604 var values = []; 8605 8606 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 8607 var optLinks = li.querySelectorAll('.options a'); 8608 8609 if(optLinks.length > 0){ 8610 optLinks.forEach(function(a){ 8611 /* Beden/renk deÄerini doÄru attribute'tan oku
8612 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 8613 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 8614 - textContent: fallback */ 8615 var deger = a.getAttribute('data-variant-value') 8616 || a.textContent.trim(); 8617 8618 /* Stok kontrolü - birden fazla yoldan kontrol et */ 8619 var isSoldOut = a.classList.contains('sold-out') 8620 || a.classList.contains('sold_out') 8621 || a.classList.contains('disabled') 8622 || a.classList.contains('stoksuz') 8623 || a.classList.contains('out-of-stock') 8624 || a.hasAttribute('disabled') 8625 || a.getAttribute('data-in-stock') === '0' 8626 || a.getAttribute('data-in-stock') === 'false' 8627 || a.getAttribute('data-stokta-var-mi') === '0' 8628 || a.getAttribute('data-stokta-var-mi') === 'false'; 8629 8630 values.push({ 8631 deger: deger, 8632 inStock: !isSoldOut 8633 }); 8634 }); 8635 } else { 8636 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 8637 var select = li.querySelector('select'); 8638 if(select){ 8639 var opts = select.querySelectorAll('option'); 8640 opts.forEach(function(o){ 8641 if(!o.value) return; 8642 values.push({ 8643 deger: o.value, 8644 inStock: !o.disabled 8645 }); 8646 }); 8647 } 8648 } 8649 8650 variants.push({ 8651 index: idx, 8652 baslik: name, 8653 values: values 8654 }); 8655 }); 8656 8657 var result = { variants: variants }; 8658 window.__luxVariantCache[productId] = result; 8659 callback(result); 8660 }) 8661 .catch(function(err){ 8662 console.error('Varyant çekme hatası:', err); 8663 callback({ variants: [], error: 'fetch_failed' }); 8664 }); 8665 } 8666 8667 8668 /* ============================================ 8669 Beden Åeridini ve gizli variant-box'ı oluÅtur 8670 ============================================ */ 8671 function buildVariantUI(productId, data){ 8672 var card = document.getElementById('card-' + productId); 8673 if(!card) return false; 8674 8675 var holder = card.querySelector('.lux-variant-box'); 8676 var strip = document.getElementById('size-strip-' + productId); 8677 if(!holder || !strip) return false; 8678 8679 if(!data.variants || data.variants.length === 0){ 8680 /* Varyant yok */ 8681 return false; 8682 } 8683 8684 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 8685 var displayVariant = null;
8686 data.variants.forEach(function(v){ 8687 if(!displayVariant && v.values.length > 1){ 8688 displayVariant = v; 8689 } 8690 }); 8691 8692 /* Gizli variant-box HTML */ 8693 var html = '<div class="variant-box"><ul>'; 8694 data.variants.forEach(function(v){ 8695 html += '<li class="variant">'; 8696 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 8697 8698 if(v.values.length > 1){ 8699 html += '<option value="">Lütfen seçin</option>'; 8700 } 8701 8702 v.values.forEach(function(val, i){ 8703 var selected = (v.values.length === 1) ? ' selected' : ''; 8704 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 8705 }); 8706 8707 html += '</select></li>'; 8708 }); 8709 html += '</ul></div>'; 8710 8711 holder.innerHTML = html; 8712 holder.style.display = ''; 8713 8714 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 8715 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 8716 if(displayVariant){ 8717 var stripHtml = ''; 8718 var inStockCount = 0; 8719 8720 /* DEBUG - console'da gör */ 8721 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 8722 8723 displayVariant.values.forEach(function(val){ 8724 /* SADECE stokta olanları ekle */ 8725 if(val.inStock === true){ 8726 stripHtml += '<div class="size-item" ' 8727 + 'data-urun-id="' + productId + '" ' 8728 + 'data-varyant-deger="' + val.deger + '" ' 8729 + 'onclick="return luxAddVariant(event, this);">' 8730 + val.deger + '</div>'; 8731 inStockCount++; 8732 } 8733 }); 8734 8735 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 8736 if(inStockCount === 0){ 8737 strip.setAttribute('data-loaded', '1'); 8738 strip.setAttribute('data-has-variants', '0'); 8739 return false; 8740 } 8741
8742 strip.innerHTML = stripHtml; 8743 strip.setAttribute('data-loaded', '1'); 8744 strip.setAttribute('data-has-variants', '1'); 8745 return true; 8746 } else { 8747 strip.setAttribute('data-loaded', '1'); 8748 strip.setAttribute('data-has-variants', '0'); 8749 return false; 8750 } 8751 } 8752 8753 8754 /* ============================================ 8755 SEPET IKONU TIKLAMASI 8756 ============================================ */ 8757 window.luxBagClick = function(ev, productId){ 8758 ev.preventDefault(); 8759 ev.stopPropagation(); 8760 8761 var card = document.getElementById('card-' + productId); 8762 var strip = document.getElementById('size-strip-' + productId); 8763 var bag = document.getElementById('lux-bag-' + productId); 8764 if(!card || !strip) return false; 8765 8766 /* Strip zaten yüklenmiÅse direkt davran */ 8767 if(strip.getAttribute('data-loaded') === '1'){ 8768 if(strip.getAttribute('data-has-variants') === '1'){ 8769 toggleStrip(productId); 8770 } else { 8771 addToCartSmart(productId); 8772 } 8773 return false; 8774 } 8775 8776 /* İlk tıklama - AJAX ile varyantları çek */ 8777 bag.classList.add('is-loading'); 8778 var productLink = card.getAttribute('data-lux-product-link'); 8779 8780 fetchVariants(productId, productLink, function(data){ 8781 bag.classList.remove('is-loading'); 8782 8783 var hasVariants = buildVariantUI(productId, data); 8784 8785 if(hasVariants){ 8786 /* Bedenler var - Åeridi aç */ 8787 toggleStrip(productId); 8788 } else { 8789 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 8790 addToCartSmart(productId); 8791 } 8792 }); 8793 8794 return false; 8795 }; 8796 8797 function toggleStrip(productId){ 8798 var strip = document.getElementById('size-strip-' + productId); 8799 var card = document.getElementById('card-' + productId); 8800 if(!strip) return; 8801 8802 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8803 if(s !== strip) s.classList.remove('open'); 8804 }); 8805 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8806 if(c !== card) c.classList.remove('sizes-open'); 8807 }); 8808 8809 strip.classList.toggle('open'); 8810 if(card) card.classList.toggle('sizes-open'); 8811 } 8812 8813 8814 /* ============================================ 8815 BEDEN TIKLAMASI 8816 ============================================ */ 8817 window.luxAddVariant = function(ev, elem){ 8818 ev.preventDefault(); 8819 ev.stopPropagation(); 8820 8821 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 8822 8823 var productId = elem.getAttribute('data-urun-id'); 8824 var varyantDeger = elem.getAttribute('data-varyant-deger'); 8825 8826 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8827 if(!holder) return false; 8828 8829 /* Seçilen bedeni ilk select'e yaz */ 8830 var firstSelect = holder.querySelector('select[data-variant="0"]'); 8831 if(firstSelect){ 8832 firstSelect.value = varyantDeger; 8833 if(typeof jQuery !== "undefined"){ 8834 jQuery(firstSelect).val(varyantDeger).trigger('change'); 8835 } 8836 } 8837 8838 /* DiÄer select'lere ilk geçerli deÄeri koy */ 8839 var allSelects = holder.querySelectorAll('select[data-variant]'); 8840 allSelects.forEach(function(sel, idx){ 8841 if(idx === 0) return; 8842 if(sel.value) return; 8843 var options = sel.querySelectorAll('option'); 8844 for(var i = 0; i < options.length; i++){ 8845 if(options[i].value){ 8846 sel.value = options[i].value; 8847 if(typeof jQuery !== "undefined"){ 8848 jQuery(sel).val(options[i].value).trigger('change'); 8849 } 8850 break; 8851 } 8852 } 8853 }); 8854 8855 /* Görsel feedback */ 8856 elem.classList.add('adding'); 8857 var originalText = elem.textContent; 8858 elem.textContent = 'â'; 8859 8860 /* Sepete ekle */ 8861 addToCartSmart(productId, { 8862 checkVariant: true, 8863 variantCount: allSelects.length, 8864 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 8865 }); 8866 8867 setTimeout(function(){ 8868 elem.textContent = originalText; 8869 elem.classList.remove('adding'); 8870 closeAll(); 8871 }, 800); 8872 8873 return false; 8874 }; 8875 8876 8877 /* ============================================ 8878 SEPETE EKLE - Modal killer ile 8879 ============================================ */ 8880 function addToCartSmart(productId, extraOptions){ 8881 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8882 8883 var options = { 8884 quantity: 1, 8885 hideNativeModal: 'lux-card-' + productId 8886 }; 8887 8888 if(extraOptions){
8889 Object.keys(extraOptions).forEach(function(k){ 8890 options[k] = extraOptions[k]; 8891 }); 8892 } else if(holder){ 8893 var selects = holder.querySelectorAll('select[data-variant]'); 8894 if(selects.length > 0){ 8895 options.checkVariant = true; 8896 options.variantCount = selects.length; 8897 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 8898 } 8899 } 8900 8901 startModalKill(2000); 8902 8903 if(typeof addCart === "function"){ 8904 try { 8905 addCart(productId, 'card', options); 8906 flashSuccess(productId); 8907 } catch(err){ 8908 console.error('Sepete ekleme hatası:', err); 8909 } 8910 } 8911 } 8912 8913})(); 8914</script>
8914</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 8915 data-lux-product-shell="1" 8916 data-lux-page="1"><style> 8917@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 8918 8919/* ===== VEZZA LUX CARD ===== */ 8920.card-product{ 8921 font-family:'Poppins',sans-serif; 8922 background:#fff !important; 8923 position:relative; 8924} 8925.card-product-inner{ 8926 background:transparent !important; 8927 position:relative; 8928} 8929.card-product .c-p-i-link, 8930.card-product a{ 8931 background:transparent !important; 8932} 8933.card-product-inner > div{ 8934 background:transparent !important; 8935} 8936.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 8937 background:transparent !important; 8938} 8939.card-product .card-product-content, 8940.card-product .price-group, 8941.card-product .prices{ 8942 background:transparent !important; 8943} 8944[class*="skeleton"], 8945[class*="placeholder"], 8946[class*="loading"]{ 8947 background:transparent !important; 8948} 8949 8950/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 8951.image-wrapper{ 8952 position:relative; 8953 width:100%; 8954 aspect-ratio:1/1; 8955 overflow:hidden; 8956 background:#fff !important; 8957} 8958 8959.image{ 8960 position:relative; 8961 width:100%; 8962 height:100%; 8963} 8964 8965.image-wrapper img{ 8966 width:100% !important; 8967 height:100% !important; 8968 object-fit:cover !important; 8969 object-position:center center !important; 8970 display:block; 8971 transition:transform .35s ease; 8972} 8973 8974/* ===== DISCOUNT ===== */ 8975.discount{ 8976 position:absolute; 8977 top:12px; 8978 left:12px; 8979 width:28px; 8980 height:48px; 8981 background:#e10b0b; 8982 color:#fff; 8983 font-size:12px; 8984 font-weight:600; 8985 display:flex; 8986 align-items:center; 8987 justify-content:center; 8988 writing-mode:vertical-rl; 8989 transform:rotate(180deg); 8990 letter-spacing:.5px; 8991 z-index:7; 8992} 8993 8994/* ===== FAV ===== */ 8995.lux-fav{ 8996 position:absolute; 8997 top:12px; 8998 right:12px; 8999 z-index:7; 9000} 9001.lux-fav a, 9002.lux-fav button{ 9003 background:transparent !important; 9004 border:0 !important; 9005 padding:0 !important; 9006 cursor:pointer; 9007 display:inline-flex; 9008 align-items:center; 9009 justify-content:center; 9010} 9011 9012/* ===== SEPET IKON ===== */ 9013.lux-bag{ 9014 position:absolute; 9015 bottom:12px; 9016 right:12px; 9017 z-index:7; 9018 width:34px; 9019 height:34px; 9020 display:inline-flex; 9021 align-items:center; 9022 justify-content:center; 9023 background:rgba(255,255,255,.92); 9024 border:1px solid rgba(0,0,0,.10); 9025 border-radius:10px; 9026 cursor:pointer; 9027 transition:.2s ease; 9028} 9029.lux-bag:hover{ 9030 background:#fff; 9031 border-color:rgba(0,0,0,.25); 9032} 9033.lux-bag.is-loading{ 9034 opacity:.6; 9035 cursor:wait; 9036} 9037.lux-bag.is-success{ 9038 background:#2e7d32 !important; 9039 border-color:#2e7d32 !important; 9040 color:#fff !important; 9041} 9042.card-product.sizes-open .lux-bag{ 9043 opacity:0; 9044 pointer-events:none; 9045} 9046 9047/* Loading spinner */ 9048.lux-bag.is-loading i::before{ 9049 content:"â³"; 9050} 9051 9052/* ===== SIZE STRIP ===== */ 9053.size-strip{ 9054 width:100%; 9055 max-height:0; 9056 overflow:hidden; 9057 background:#fff; 9058 display:flex; 9059 flex-wrap:wrap; 9060 transition:max-height .3s ease, border-color .3s ease; 9061 border-top:1px solid transparent; 9062 border-bottom:1px solid transparent; 9063} 9064.size-strip.open{ 9065 max-height:200px; 9066 border-top-color:rgba(0,0,0,.08); 9067 border-bottom-color:rgba(0,0,0,.08); 9068} 9069.size-item{ 9070 flex:1 0 auto; 9071 min-width:38px; 9072 height:42px; 9073 display:flex; 9074 align-items:center; 9075 justify-content:center; 9076 font-size:13px; 9077 font-weight:500; 9078 color:#111 !important; 9079 cursor:pointer; 9080 user-select:none; 9081 background:transparent; 9082 transition:background .15s ease, color .15s ease; 9083 border-right:1px solid rgba(0,0,0,.08); 9084} 9085.size-item:last-child{ border-right:0; } 9086.size-item:hover:not(.disabled):not(.adding){ 9087 background:#000 !important; 9088 color:#fff !important; 9089} 9090.size-item.disabled{ 9091 color:#111 !important; 9092 text-decoration:line-through !important; 9093 opacity:.30 !important; 9094 cursor:not-allowed; 9095} 9096.size-item.adding{ 9097 background:#2e7d32 !important; 9098 color:#fff !important; 9099 cursor:wait; 9100} 9101 9102/* ===== META ===== */ 9103.lux-meta{ 9104 padding:12px 6px 6px; 9105 background:transparent !important; 9106} 9107.lux-brand{ 9108 font-size:16px; 9109 font-weight:600; 9110 color:#111; 9111 margin-bottom:2px; 9112} 9113.lux-title{ 9114 font-size:14px; 9115 font-weight:400; 9116 line-height:1.45; 9117 color:#111; 9118 margin:0; 9119} 9120.lux-price{ 9121 margin-top:10px; 9122 display:flex; 9123 gap:10px; 9124 align-items:baseline; 9125 background:transparent !important; 9126} 9127.lux-price .list-price{ 9128 font-size:14px; 9129 font-weight:400; 9130 color:#111; 9131 text-decoration:line-through; 9132} 9133.lux-price .sale-price{ 9134 font-size:16px; 9135 font-weight:600; 9136 color:#e10b0b; 9137} 9138 9139.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
9140.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 9141</style><div class="card-product" 9142 id="card-10289" 9143 data-lux-card-id="10289" 9144 data-lux-product-link="https://www.vezzalux.com/prada-962-deri-siyah-tirnakli-erkek-ayakkabi" 9145 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/prada-962-deri-siyah-tirnakli-erkek-ayakkabi" class="c-p-i-link" title="Prada 962 Deri Siyah Tırnaklı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca0ae9abe-76139591-sw1200sh1200.webp" alt="Prada 962 Deri Siyah Tırnaklı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca0ae9abe-76139591-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca0794db4-39526875-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 9146 onclick="userProductFavourite('add', 10289)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 9147 id="lux-bag-10289" 9148 onclick="return luxBagClick(event, 10289);" 9149 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10289" style="display:none;"></div><div class="size-strip" id="size-strip-10289" data-loaded="0"></div><a href="https://www.vezzalux.com/prada-962-deri-siyah-tirnakli-erkek-ayakkabi" class="c-p-i-link" title="Prada 962 Deri Siyah Tırnaklı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Prada</div><div class="lux-title">Prada 962 Deri Siyah Tırnaklı Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
9149<script> 9150(function(){ 9151 9152 /* Bir kez kur */ 9153 if(window.__luxCardInit) return; 9154 window.__luxCardInit = true; 9155 9156 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 9157 window.__luxVariantCache = window.__luxVariantCache || {}; 9158 9159 function closeAll(){ 9160 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9161 s.classList.remove('open'); 9162 }); 9163 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9164 c.classList.remove('sizes-open'); 9165 }); 9166 } 9167 9168 function flashSuccess(productId){ 9169 var bag = document.getElementById('lux-bag-' + productId); 9170 if(!bag) return; 9171 bag.classList.add('is-success'); 9172 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 9173 } 9174 9175 /* DıŠtıklama - kapat */ 9176 document.addEventListener('click', function(e){ 9177 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 9178 if(!inside) closeAll(); 9179 }); 9180 9181 document.addEventListener('keydown', function(e){ 9182 if(e.key === 'Escape') closeAll(); 9183 }); 9184 9185 9186 /* ============================================ 9187 MODAL KILLER - yedek güvence 9188 ============================================ */ 9189 var LUX_MODAL_KILL_ACTIVE = false; 9190 9191 function killVisibleModals(){ 9192 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 9193 modals.forEach(function(m){ 9194 var id = (m.id || '').toLowerCase(); 9195 var txt = (m.textContent || '').toLowerCase(); 9196 var isCartModal = id.indexOf('cart') > -1 9197 || id.indexOf('variant') > -1 9198 || id.indexOf('fast') > -1 9199 || id.indexOf('urun') > -1 9200 || txt.indexOf('lütfen seçin') > -1; 9201 9202 if(isCartModal){ 9203 if(typeof jQuery !== 'undefined'){ 9204 try { jQuery(m).modal('hide'); } catch(e){} 9205 } 9206 m.classList.remove('show','in'); 9207 m.style.display = 'none'; 9208 } 9209 }); 9210 9211 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 9212 document.body.classList.remove('modal-open'); 9213 document.body.style.overflow = ''; 9214 document.body.style.paddingRight = ''; 9215 } 9216 9217 function startModalKill(durationMs){ 9218 if(LUX_MODAL_KILL_ACTIVE) return; 9219 LUX_MODAL_KILL_ACTIVE = true; 9220 killVisibleModals(); 9221 var interval = setInterval(killVisibleModals, 50); 9222 setTimeout(function(){ 9223 clearInterval(interval); 9224 LUX_MODAL_KILL_ACTIVE = false; 9225 }, durationMs || 2000); 9226 } 9227 9228 9229 /* ============================================ 9230 AJAX: Varyantları detay sayfasından çek 9231 ============================================ 9232 Ãrün detay sayfasının tam HTML'ini indir, 9233 DOMParser ile parse et, varyantları bul 9234 ============================================ */ 9235 function fetchVariants(productId, productLink, callback){ 9236 9237 /* Cache'te varsa hemen döndür */ 9238 if(window.__luxVariantCache[productId]){ 9239 callback(window.__luxVariantCache[productId]); 9240 return; 9241 } 9242 9243 fetch(productLink, { 9244 method: 'GET', 9245 credentials: 'same-origin', 9246 headers: { 'Accept': 'text/html' } 9247 }) 9248 .then(function(r){ return r.text(); }) 9249 .then(function(html){ 9250 var parser = new DOMParser(); 9251 var doc = parser.parseFromString(html, 'text/html'); 9252 9253 /* Detay sayfasındaki .variant-box'ı bul */ 9254 var variantBox = doc.querySelector('.variant-box'); 9255 if(!variantBox){ 9256 callback({ variants: [], error: 'no_variant_box' }); 9257 return; 9258 } 9259 9260 /* Her varyant grubu için select'leri ve option'ları oku */ 9261 var variants = []; 9262 var variantLis = variantBox.querySelectorAll('.variant'); 9263 9264 variantLis.forEach(function(li, idx){ 9265 var nameEl = li.querySelector('.name'); 9266 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 9267 9268 var values = []; 9269 9270 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 9271 var optLinks = li.querySelectorAll('.options a'); 9272 9273 if(optLinks.length > 0){ 9274 optLinks.forEach(function(a){ 9275 /* Beden/renk deÄerini doÄru attribute'tan oku
9276 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 9277 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 9278 - textContent: fallback */ 9279 var deger = a.getAttribute('data-variant-value') 9280 || a.textContent.trim(); 9281 9282 /* Stok kontrolü - birden fazla yoldan kontrol et */ 9283 var isSoldOut = a.classList.contains('sold-out') 9284 || a.classList.contains('sold_out') 9285 || a.classList.contains('disabled') 9286 || a.classList.contains('stoksuz') 9287 || a.classList.contains('out-of-stock') 9288 || a.hasAttribute('disabled') 9289 || a.getAttribute('data-in-stock') === '0' 9290 || a.getAttribute('data-in-stock') === 'false' 9291 || a.getAttribute('data-stokta-var-mi') === '0' 9292 || a.getAttribute('data-stokta-var-mi') === 'false'; 9293 9294 values.push({ 9295 deger: deger, 9296 inStock: !isSoldOut 9297 }); 9298 }); 9299 } else { 9300 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 9301 var select = li.querySelector('select'); 9302 if(select){ 9303 var opts = select.querySelectorAll('option'); 9304 opts.forEach(function(o){ 9305 if(!o.value) return; 9306 values.push({ 9307 deger: o.value, 9308 inStock: !o.disabled 9309 }); 9310 }); 9311 } 9312 } 9313 9314 variants.push({ 9315 index: idx, 9316 baslik: name, 9317 values: values 9318 }); 9319 }); 9320 9321 var result = { variants: variants }; 9322 window.__luxVariantCache[productId] = result; 9323 callback(result); 9324 }) 9325 .catch(function(err){ 9326 console.error('Varyant çekme hatası:', err); 9327 callback({ variants: [], error: 'fetch_failed' }); 9328 }); 9329 } 9330 9331 9332 /* ============================================ 9333 Beden Åeridini ve gizli variant-box'ı oluÅtur 9334 ============================================ */ 9335 function buildVariantUI(productId, data){ 9336 var card = document.getElementById('card-' + productId); 9337 if(!card) return false; 9338 9339 var holder = card.querySelector('.lux-variant-box'); 9340 var strip = document.getElementById('size-strip-' + productId); 9341 if(!holder || !strip) return false; 9342 9343 if(!data.variants || data.variants.length === 0){ 9344 /* Varyant yok */ 9345 return false; 9346 } 9347 9348 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 9349 var displayVariant = null;
9350 data.variants.forEach(function(v){ 9351 if(!displayVariant && v.values.length > 1){ 9352 displayVariant = v; 9353 } 9354 }); 9355 9356 /* Gizli variant-box HTML */ 9357 var html = '<div class="variant-box"><ul>'; 9358 data.variants.forEach(function(v){ 9359 html += '<li class="variant">'; 9360 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 9361 9362 if(v.values.length > 1){ 9363 html += '<option value="">Lütfen seçin</option>'; 9364 } 9365 9366 v.values.forEach(function(val, i){ 9367 var selected = (v.values.length === 1) ? ' selected' : ''; 9368 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 9369 }); 9370 9371 html += '</select></li>'; 9372 }); 9373 html += '</ul></div>'; 9374 9375 holder.innerHTML = html; 9376 holder.style.display = ''; 9377 9378 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 9379 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 9380 if(displayVariant){ 9381 var stripHtml = ''; 9382 var inStockCount = 0; 9383 9384 /* DEBUG - console'da gör */ 9385 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 9386 9387 displayVariant.values.forEach(function(val){ 9388 /* SADECE stokta olanları ekle */ 9389 if(val.inStock === true){ 9390 stripHtml += '<div class="size-item" ' 9391 + 'data-urun-id="' + productId + '" ' 9392 + 'data-varyant-deger="' + val.deger + '" ' 9393 + 'onclick="return luxAddVariant(event, this);">' 9394 + val.deger + '</div>'; 9395 inStockCount++; 9396 } 9397 }); 9398 9399 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 9400 if(inStockCount === 0){ 9401 strip.setAttribute('data-loaded', '1'); 9402 strip.setAttribute('data-has-variants', '0'); 9403 return false; 9404 } 9405
9406 strip.innerHTML = stripHtml; 9407 strip.setAttribute('data-loaded', '1'); 9408 strip.setAttribute('data-has-variants', '1'); 9409 return true; 9410 } else { 9411 strip.setAttribute('data-loaded', '1'); 9412 strip.setAttribute('data-has-variants', '0'); 9413 return false; 9414 } 9415 } 9416 9417 9418 /* ============================================ 9419 SEPET IKONU TIKLAMASI 9420 ============================================ */ 9421 window.luxBagClick = function(ev, productId){ 9422 ev.preventDefault(); 9423 ev.stopPropagation(); 9424 9425 var card = document.getElementById('card-' + productId); 9426 var strip = document.getElementById('size-strip-' + productId); 9427 var bag = document.getElementById('lux-bag-' + productId); 9428 if(!card || !strip) return false; 9429 9430 /* Strip zaten yüklenmiÅse direkt davran */ 9431 if(strip.getAttribute('data-loaded') === '1'){ 9432 if(strip.getAttribute('data-has-variants') === '1'){ 9433 toggleStrip(productId); 9434 } else { 9435 addToCartSmart(productId); 9436 } 9437 return false; 9438 } 9439 9440 /* İlk tıklama - AJAX ile varyantları çek */ 9441 bag.classList.add('is-loading'); 9442 var productLink = card.getAttribute('data-lux-product-link'); 9443 9444 fetchVariants(productId, productLink, function(data){ 9445 bag.classList.remove('is-loading'); 9446 9447 var hasVariants = buildVariantUI(productId, data); 9448 9449 if(hasVariants){ 9450 /* Bedenler var - Åeridi aç */ 9451 toggleStrip(productId); 9452 } else { 9453 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 9454 addToCartSmart(productId); 9455 } 9456 }); 9457 9458 return false; 9459 }; 9460 9461 function toggleStrip(productId){ 9462 var strip = document.getElementById('size-strip-' + productId); 9463 var card = document.getElementById('card-' + productId); 9464 if(!strip) return; 9465 9466 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9467 if(s !== strip) s.classList.remove('open'); 9468 }); 9469 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9470 if(c !== card) c.classList.remove('sizes-open'); 9471 }); 9472 9473 strip.classList.toggle('open'); 9474 if(card) card.classList.toggle('sizes-open'); 9475 } 9476 9477 9478 /* ============================================ 9479 BEDEN TIKLAMASI 9480 ============================================ */ 9481 window.luxAddVariant = function(ev, elem){ 9482 ev.preventDefault(); 9483 ev.stopPropagation(); 9484 9485 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 9486 9487 var productId = elem.getAttribute('data-urun-id'); 9488 var varyantDeger = elem.getAttribute('data-varyant-deger'); 9489 9490 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 9491 if(!holder) return false; 9492 9493 /* Seçilen bedeni ilk select'e yaz */ 9494 var firstSelect = holder.querySelector('select[data-variant="0"]'); 9495 if(firstSelect){ 9496 firstSelect.value = varyantDeger; 9497 if(typeof jQuery !== "undefined"){ 9498 jQuery(firstSelect).val(varyantDeger).trigger('change'); 9499 } 9500 } 9501 9502 /* DiÄer select'lere ilk geçerli deÄeri koy */ 9503 var allSelects = holder.querySelectorAll('select[data-variant]'); 9504 allSelects.forEach(function(sel, idx){ 9505 if(idx === 0) return; 9506 if(sel.value) return; 9507 var options = sel.querySelectorAll('option'); 9508 for(var i = 0; i < options.length; i++){ 9509 if(options[i].value){ 9510 sel.value = options[i].value; 9511 if(typeof jQuery !== "undefined"){ 9512 jQuery(sel).val(options[i].value).trigger('change'); 9513 } 9514 break; 9515 } 9516 } 9517 }); 9518 9519 /* Görsel feedback */ 9520 elem.classList.add('adding'); 9521 var originalText = elem.textContent; 9522 elem.textContent = 'â'; 9523 9524 /* Sepete ekle */ 9525 addToCartSmart(productId, { 9526 checkVariant: true, 9527 variantCount: allSelects.length, 9528 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 9529 }); 9530 9531 setTimeout(function(){ 9532 elem.textContent = originalText; 9533 elem.classList.remove('adding'); 9534 closeAll(); 9535 }, 800); 9536 9537 return false; 9538 }; 9539 9540 9541 /* ============================================ 9542 SEPETE EKLE - Modal killer ile 9543 ============================================ */ 9544 function addToCartSmart(productId, extraOptions){ 9545 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 9546 9547 var options = { 9548 quantity: 1, 9549 hideNativeModal: 'lux-card-' + productId 9550 }; 9551 9552 if(extraOptions){
9553 Object.keys(extraOptions).forEach(function(k){ 9554 options[k] = extraOptions[k]; 9555 }); 9556 } else if(holder){ 9557 var selects = holder.querySelectorAll('select[data-variant]'); 9558 if(selects.length > 0){ 9559 options.checkVariant = true; 9560 options.variantCount = selects.length; 9561 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 9562 } 9563 } 9564 9565 startModalKill(2000); 9566 9567 if(typeof addCart === "function"){ 9568 try { 9569 addCart(productId, 'card', options); 9570 flashSuccess(productId); 9571 } catch(err){ 9572 console.error('Sepete ekleme hatası:', err); 9573 } 9574 } 9575 } 9576 9577})(); 9578</script>
9578</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 9579 data-lux-product-shell="1" 9580 data-lux-page="1"><style> 9581@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 9582 9583/* ===== VEZZA LUX CARD ===== */ 9584.card-product{ 9585 font-family:'Poppins',sans-serif; 9586 background:#fff !important; 9587 position:relative; 9588} 9589.card-product-inner{ 9590 background:transparent !important; 9591 position:relative; 9592} 9593.card-product .c-p-i-link, 9594.card-product a{ 9595 background:transparent !important; 9596} 9597.card-product-inner > div{ 9598 background:transparent !important; 9599} 9600.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 9601 background:transparent !important; 9602} 9603.card-product .card-product-content, 9604.card-product .price-group, 9605.card-product .prices{ 9606 background:transparent !important; 9607} 9608[class*="skeleton"], 9609[class*="placeholder"], 9610[class*="loading"]{ 9611 background:transparent !important; 9612} 9613 9614/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 9615.image-wrapper{ 9616 position:relative; 9617 width:100%; 9618 aspect-ratio:1/1; 9619 overflow:hidden; 9620 background:#fff !important; 9621} 9622 9623.image{ 9624 position:relative; 9625 width:100%; 9626 height:100%; 9627} 9628 9629.image-wrapper img{ 9630 width:100% !important; 9631 height:100% !important; 9632 object-fit:cover !important; 9633 object-position:center center !important; 9634 display:block; 9635 transition:transform .35s ease; 9636} 9637 9638/* ===== DISCOUNT ===== */ 9639.discount{ 9640 position:absolute; 9641 top:12px; 9642 left:12px; 9643 width:28px; 9644 height:48px; 9645 background:#e10b0b; 9646 color:#fff; 9647 font-size:12px; 9648 font-weight:600; 9649 display:flex; 9650 align-items:center; 9651 justify-content:center; 9652 writing-mode:vertical-rl; 9653 transform:rotate(180deg); 9654 letter-spacing:.5px; 9655 z-index:7; 9656} 9657 9658/* ===== FAV ===== */ 9659.lux-fav{ 9660 position:absolute; 9661 top:12px; 9662 right:12px; 9663 z-index:7; 9664} 9665.lux-fav a, 9666.lux-fav button{ 9667 background:transparent !important; 9668 border:0 !important; 9669 padding:0 !important; 9670 cursor:pointer; 9671 display:inline-flex; 9672 align-items:center; 9673 justify-content:center; 9674} 9675 9676/* ===== SEPET IKON ===== */ 9677.lux-bag{ 9678 position:absolute; 9679 bottom:12px; 9680 right:12px; 9681 z-index:7; 9682 width:34px; 9683 height:34px; 9684 display:inline-flex; 9685 align-items:center; 9686 justify-content:center; 9687 background:rgba(255,255,255,.92); 9688 border:1px solid rgba(0,0,0,.10); 9689 border-radius:10px; 9690 cursor:pointer; 9691 transition:.2s ease; 9692} 9693.lux-bag:hover{ 9694 background:#fff; 9695 border-color:rgba(0,0,0,.25); 9696} 9697.lux-bag.is-loading{ 9698 opacity:.6; 9699 cursor:wait; 9700} 9701.lux-bag.is-success{ 9702 background:#2e7d32 !important; 9703 border-color:#2e7d32 !important; 9704 color:#fff !important; 9705} 9706.card-product.sizes-open .lux-bag{ 9707 opacity:0; 9708 pointer-events:none; 9709} 9710 9711/* Loading spinner */ 9712.lux-bag.is-loading i::before{ 9713 content:"â³"; 9714} 9715 9716/* ===== SIZE STRIP ===== */ 9717.size-strip{ 9718 width:100%; 9719 max-height:0; 9720 overflow:hidden; 9721 background:#fff; 9722 display:flex; 9723 flex-wrap:wrap; 9724 transition:max-height .3s ease, border-color .3s ease; 9725 border-top:1px solid transparent; 9726 border-bottom:1px solid transparent; 9727} 9728.size-strip.open{ 9729 max-height:200px; 9730 border-top-color:rgba(0,0,0,.08); 9731 border-bottom-color:rgba(0,0,0,.08); 9732} 9733.size-item{ 9734 flex:1 0 auto; 9735 min-width:38px; 9736 height:42px; 9737 display:flex; 9738 align-items:center; 9739 justify-content:center; 9740 font-size:13px; 9741 font-weight:500; 9742 color:#111 !important; 9743 cursor:pointer; 9744 user-select:none; 9745 background:transparent; 9746 transition:background .15s ease, color .15s ease; 9747 border-right:1px solid rgba(0,0,0,.08); 9748} 9749.size-item:last-child{ border-right:0; } 9750.size-item:hover:not(.disabled):not(.adding){ 9751 background:#000 !important; 9752 color:#fff !important; 9753} 9754.size-item.disabled{ 9755 color:#111 !important; 9756 text-decoration:line-through !important; 9757 opacity:.30 !important; 9758 cursor:not-allowed; 9759} 9760.size-item.adding{ 9761 background:#2e7d32 !important; 9762 color:#fff !important; 9763 cursor:wait; 9764} 9765 9766/* ===== META ===== */ 9767.lux-meta{ 9768 padding:12px 6px 6px; 9769 background:transparent !important; 9770} 9771.lux-brand{ 9772 font-size:16px; 9773 font-weight:600; 9774 color:#111; 9775 margin-bottom:2px; 9776} 9777.lux-title{ 9778 font-size:14px; 9779 font-weight:400; 9780 line-height:1.45; 9781 color:#111; 9782 margin:0; 9783} 9784.lux-price{ 9785 margin-top:10px; 9786 display:flex; 9787 gap:10px; 9788 align-items:baseline; 9789 background:transparent !important; 9790} 9791.lux-price .list-price{ 9792 font-size:14px; 9793 font-weight:400; 9794 color:#111; 9795 text-decoration:line-through; 9796} 9797.lux-price .sale-price{ 9798 font-size:16px; 9799 font-weight:600; 9800 color:#e10b0b; 9801} 9802 9803.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
9804.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 9805</style><div class="card-product" 9806 id="card-10250" 9807 data-lux-card-id="10250" 9808 data-lux-product-link="https://www.vezzalux.com/lora-914-krem-bogazli-erkek-ayakkabi" 9809 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%43</div><a href="https://www.vezzalux.com/lora-914-krem-bogazli-erkek-ayakkabi" class="c-p-i-link" title="Lora 914 Krem BoÄazlı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c925a87d8-8933619-sw1200sh1200.webp" alt="Lora 914 Krem BoÄazlı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c925a87d8-8933619-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9274bca2-34849557-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 9810 onclick="userProductFavourite('add', 10250)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 9811 id="lux-bag-10250" 9812 onclick="return luxBagClick(event, 10250);" 9813 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10250" style="display:none;"></div><div class="size-strip" id="size-strip-10250" data-loaded="0"></div><a href="https://www.vezzalux.com/lora-914-krem-bogazli-erkek-ayakkabi" class="c-p-i-link" title="Lora 914 Krem BoÄazlı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Lora piana</div><div class="lux-title">Lora 914 Krem BoÄazlı Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">11.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
9813<script> 9814(function(){ 9815 9816 /* Bir kez kur */ 9817 if(window.__luxCardInit) return; 9818 window.__luxCardInit = true; 9819 9820 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 9821 window.__luxVariantCache = window.__luxVariantCache || {}; 9822 9823 function closeAll(){ 9824 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9825 s.classList.remove('open'); 9826 }); 9827 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9828 c.classList.remove('sizes-open'); 9829 }); 9830 } 9831 9832 function flashSuccess(productId){ 9833 var bag = document.getElementById('lux-bag-' + productId); 9834 if(!bag) return; 9835 bag.classList.add('is-success'); 9836 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 9837 } 9838 9839 /* DıŠtıklama - kapat */ 9840 document.addEventListener('click', function(e){ 9841 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 9842 if(!inside) closeAll(); 9843 }); 9844 9845 document.addEventListener('keydown', function(e){ 9846 if(e.key === 'Escape') closeAll(); 9847 }); 9848 9849 9850 /* ============================================ 9851 MODAL KILLER - yedek güvence 9852 ============================================ */ 9853 var LUX_MODAL_KILL_ACTIVE = false; 9854 9855 function killVisibleModals(){ 9856 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 9857 modals.forEach(function(m){ 9858 var id = (m.id || '').toLowerCase(); 9859 var txt = (m.textContent || '').toLowerCase(); 9860 var isCartModal = id.indexOf('cart') > -1 9861 || id.indexOf('variant') > -1 9862 || id.indexOf('fast') > -1 9863 || id.indexOf('urun') > -1 9864 || txt.indexOf('lütfen seçin') > -1; 9865 9866 if(isCartModal){ 9867 if(typeof jQuery !== 'undefined'){ 9868 try { jQuery(m).modal('hide'); } catch(e){} 9869 } 9870 m.classList.remove('show','in'); 9871 m.style.display = 'none'; 9872 } 9873 }); 9874 9875 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 9876 document.body.classList.remove('modal-open'); 9877 document.body.style.overflow = ''; 9878 document.body.style.paddingRight = ''; 9879 } 9880 9881 function startModalKill(durationMs){ 9882 if(LUX_MODAL_KILL_ACTIVE) return; 9883 LUX_MODAL_KILL_ACTIVE = true; 9884 killVisibleModals(); 9885 var interval = setInterval(killVisibleModals, 50); 9886 setTimeout(function(){ 9887 clearInterval(interval); 9888 LUX_MODAL_KILL_ACTIVE = false; 9889 }, durationMs || 2000); 9890 } 9891 9892 9893 /* ============================================ 9894 AJAX: Varyantları detay sayfasından çek 9895 ============================================ 9896 Ãrün detay sayfasının tam HTML'ini indir, 9897 DOMParser ile parse et, varyantları bul 9898 ============================================ */ 9899 function fetchVariants(productId, productLink, callback){ 9900 9901 /* Cache'te varsa hemen döndür */ 9902 if(window.__luxVariantCache[productId]){ 9903 callback(window.__luxVariantCache[productId]); 9904 return; 9905 } 9906 9907 fetch(productLink, { 9908 method: 'GET', 9909 credentials: 'same-origin', 9910 headers: { 'Accept': 'text/html' } 9911 }) 9912 .then(function(r){ return r.text(); }) 9913 .then(function(html){ 9914 var parser = new DOMParser(); 9915 var doc = parser.parseFromString(html, 'text/html'); 9916 9917 /* Detay sayfasındaki .variant-box'ı bul */ 9918 var variantBox = doc.querySelector('.variant-box'); 9919 if(!variantBox){ 9920 callback({ variants: [], error: 'no_variant_box' }); 9921 return; 9922 } 9923 9924 /* Her varyant grubu için select'leri ve option'ları oku */ 9925 var variants = []; 9926 var variantLis = variantBox.querySelectorAll('.variant'); 9927 9928 variantLis.forEach(function(li, idx){ 9929 var nameEl = li.querySelector('.name'); 9930 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 9931 9932 var values = []; 9933 9934 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 9935 var optLinks = li.querySelectorAll('.options a'); 9936 9937 if(optLinks.length > 0){ 9938 optLinks.forEach(function(a){ 9939 /* Beden/renk deÄerini doÄru attribute'tan oku
9940 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 9941 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 9942 - textContent: fallback */ 9943 var deger = a.getAttribute('data-variant-value') 9944 || a.textContent.trim(); 9945 9946 /* Stok kontrolü - birden fazla yoldan kontrol et */ 9947 var isSoldOut = a.classList.contains('sold-out') 9948 || a.classList.contains('sold_out') 9949 || a.classList.contains('disabled') 9950 || a.classList.contains('stoksuz') 9951 || a.classList.contains('out-of-stock') 9952 || a.hasAttribute('disabled') 9953 || a.getAttribute('data-in-stock') === '0' 9954 || a.getAttribute('data-in-stock') === 'false' 9955 || a.getAttribute('data-stokta-var-mi') === '0' 9956 || a.getAttribute('data-stokta-var-mi') === 'false'; 9957 9958 values.push({ 9959 deger: deger, 9960 inStock: !isSoldOut 9961 }); 9962 }); 9963 } else { 9964 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 9965 var select = li.querySelector('select'); 9966 if(select){ 9967 var opts = select.querySelectorAll('option'); 9968 opts.forEach(function(o){ 9969 if(!o.value) return; 9970 values.push({ 9971 deger: o.value, 9972 inStock: !o.disabled 9973 }); 9974 }); 9975 } 9976 } 9977 9978 variants.push({ 9979 index: idx, 9980 baslik: name, 9981 values: values 9982 }); 9983 }); 9984 9985 var result = { variants: variants }; 9986 window.__luxVariantCache[productId] = result; 9987 callback(result); 9988 }) 9989 .catch(function(err){ 9990 console.error('Varyant çekme hatası:', err); 9991 callback({ variants: [], error: 'fetch_failed' }); 9992 }); 9993 } 9994 9995 9996 /* ============================================ 9997 Beden Åeridini ve gizli variant-box'ı oluÅtur 9998 ============================================ */ 9999 function buildVariantUI(productId, data){ 10000 var card = document.getElementById('card-' + productId); 10001 if(!card) return false; 10002 10003 var holder = card.querySelector('.lux-variant-box'); 10004 var strip = document.getElementById('size-strip-' + productId); 10005 if(!holder || !strip) return false; 10006 10007 if(!data.variants || data.variants.length === 0){ 10008 /* Varyant yok */ 10009 return false; 10010 } 10011 10012 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 10013 var displayVariant = null;
10014 data.variants.forEach(function(v){ 10015 if(!displayVariant && v.values.length > 1){ 10016 displayVariant = v; 10017 } 10018 }); 10019 10020 /* Gizli variant-box HTML */ 10021 var html = '<div class="variant-box"><ul>'; 10022 data.variants.forEach(function(v){ 10023 html += '<li class="variant">'; 10024 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 10025 10026 if(v.values.length > 1){ 10027 html += '<option value="">Lütfen seçin</option>'; 10028 } 10029 10030 v.values.forEach(function(val, i){ 10031 var selected = (v.values.length === 1) ? ' selected' : ''; 10032 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 10033 }); 10034 10035 html += '</select></li>'; 10036 }); 10037 html += '</ul></div>'; 10038 10039 holder.innerHTML = html; 10040 holder.style.display = ''; 10041 10042 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 10043 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 10044 if(displayVariant){ 10045 var stripHtml = ''; 10046 var inStockCount = 0; 10047 10048 /* DEBUG - console'da gör */ 10049 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 10050 10051 displayVariant.values.forEach(function(val){ 10052 /* SADECE stokta olanları ekle */ 10053 if(val.inStock === true){ 10054 stripHtml += '<div class="size-item" ' 10055 + 'data-urun-id="' + productId + '" ' 10056 + 'data-varyant-deger="' + val.deger + '" ' 10057 + 'onclick="return luxAddVariant(event, this);">' 10058 + val.deger + '</div>'; 10059 inStockCount++; 10060 } 10061 }); 10062 10063 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 10064 if(inStockCount === 0){ 10065 strip.setAttribute('data-loaded', '1'); 10066 strip.setAttribute('data-has-variants', '0'); 10067 return false; 10068 } 10069
10070 strip.innerHTML = stripHtml; 10071 strip.setAttribute('data-loaded', '1'); 10072 strip.setAttribute('data-has-variants', '1'); 10073 return true; 10074 } else { 10075 strip.setAttribute('data-loaded', '1'); 10076 strip.setAttribute('data-has-variants', '0'); 10077 return false; 10078 } 10079 } 10080 10081 10082 /* ============================================ 10083 SEPET IKONU TIKLAMASI 10084 ============================================ */ 10085 window.luxBagClick = function(ev, productId){ 10086 ev.preventDefault(); 10087 ev.stopPropagation(); 10088 10089 var card = document.getElementById('card-' + productId); 10090 var strip = document.getElementById('size-strip-' + productId); 10091 var bag = document.getElementById('lux-bag-' + productId); 10092 if(!card || !strip) return false; 10093 10094 /* Strip zaten yüklenmiÅse direkt davran */ 10095 if(strip.getAttribute('data-loaded') === '1'){ 10096 if(strip.getAttribute('data-has-variants') === '1'){ 10097 toggleStrip(productId); 10098 } else { 10099 addToCartSmart(productId); 10100 } 10101 return false; 10102 } 10103 10104 /* İlk tıklama - AJAX ile varyantları çek */ 10105 bag.classList.add('is-loading'); 10106 var productLink = card.getAttribute('data-lux-product-link'); 10107 10108 fetchVariants(productId, productLink, function(data){ 10109 bag.classList.remove('is-loading'); 10110 10111 var hasVariants = buildVariantUI(productId, data); 10112 10113 if(hasVariants){ 10114 /* Bedenler var - Åeridi aç */ 10115 toggleStrip(productId); 10116 } else { 10117 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 10118 addToCartSmart(productId); 10119 } 10120 }); 10121 10122 return false; 10123 }; 10124 10125 function toggleStrip(productId){ 10126 var strip = document.getElementById('size-strip-' + productId); 10127 var card = document.getElementById('card-' + productId); 10128 if(!strip) return; 10129 10130 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10131 if(s !== strip) s.classList.remove('open'); 10132 }); 10133 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10134 if(c !== card) c.classList.remove('sizes-open'); 10135 }); 10136 10137 strip.classList.toggle('open'); 10138 if(card) card.classList.toggle('sizes-open'); 10139 } 10140 10141 10142 /* ============================================ 10143 BEDEN TIKLAMASI 10144 ============================================ */ 10145 window.luxAddVariant = function(ev, elem){ 10146 ev.preventDefault(); 10147 ev.stopPropagation(); 10148 10149 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 10150 10151 var productId = elem.getAttribute('data-urun-id'); 10152 var varyantDeger = elem.getAttribute('data-varyant-deger'); 10153 10154 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10155 if(!holder) return false; 10156 10157 /* Seçilen bedeni ilk select'e yaz */ 10158 var firstSelect = holder.querySelector('select[data-variant="0"]'); 10159 if(firstSelect){ 10160 firstSelect.value = varyantDeger; 10161 if(typeof jQuery !== "undefined"){ 10162 jQuery(firstSelect).val(varyantDeger).trigger('change'); 10163 } 10164 } 10165 10166 /* DiÄer select'lere ilk geçerli deÄeri koy */ 10167 var allSelects = holder.querySelectorAll('select[data-variant]'); 10168 allSelects.forEach(function(sel, idx){ 10169 if(idx === 0) return; 10170 if(sel.value) return; 10171 var options = sel.querySelectorAll('option'); 10172 for(var i = 0; i < options.length; i++){ 10173 if(options[i].value){ 10174 sel.value = options[i].value; 10175 if(typeof jQuery !== "undefined"){ 10176 jQuery(sel).val(options[i].value).trigger('change'); 10177 } 10178 break; 10179 } 10180 } 10181 }); 10182 10183 /* Görsel feedback */ 10184 elem.classList.add('adding'); 10185 var originalText = elem.textContent; 10186 elem.textContent = 'â'; 10187 10188 /* Sepete ekle */ 10189 addToCartSmart(productId, { 10190 checkVariant: true, 10191 variantCount: allSelects.length, 10192 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 10193 }); 10194 10195 setTimeout(function(){ 10196 elem.textContent = originalText; 10197 elem.classList.remove('adding'); 10198 closeAll(); 10199 }, 800); 10200 10201 return false; 10202 }; 10203 10204 10205 /* ============================================ 10206 SEPETE EKLE - Modal killer ile 10207 ============================================ */ 10208 function addToCartSmart(productId, extraOptions){ 10209 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10210 10211 var options = { 10212 quantity: 1, 10213 hideNativeModal: 'lux-card-' + productId 10214 }; 10215 10216 if(extraOptions){
10217 Object.keys(extraOptions).forEach(function(k){ 10218 options[k] = extraOptions[k]; 10219 }); 10220 } else if(holder){ 10221 var selects = holder.querySelectorAll('select[data-variant]'); 10222 if(selects.length > 0){ 10223 options.checkVariant = true; 10224 options.variantCount = selects.length; 10225 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 10226 } 10227 } 10228 10229 startModalKill(2000); 10230 10231 if(typeof addCart === "function"){ 10232 try { 10233 addCart(productId, 'card', options); 10234 flashSuccess(productId); 10235 } catch(err){ 10236 console.error('Sepete ekleme hatası:', err); 10237 } 10238 } 10239 } 10240 10241})(); 10242</script>
10242</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 10243 data-lux-product-shell="1" 10244 data-lux-page="1"><style> 10245@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 10246 10247/* ===== VEZZA LUX CARD ===== */ 10248.card-product{ 10249 font-family:'Poppins',sans-serif; 10250 background:#fff !important; 10251 position:relative; 10252} 10253.card-product-inner{ 10254 background:transparent !important; 10255 position:relative; 10256} 10257.card-product .c-p-i-link, 10258.card-product a{ 10259 background:transparent !important; 10260} 10261.card-product-inner > div{ 10262 background:transparent !important; 10263} 10264.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 10265 background:transparent !important; 10266} 10267.card-product .card-product-content, 10268.card-product .price-group, 10269.card-product .prices{ 10270 background:transparent !important; 10271} 10272[class*="skeleton"], 10273[class*="placeholder"], 10274[class*="loading"]{ 10275 background:transparent !important; 10276} 10277 10278/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 10279.image-wrapper{ 10280 position:relative; 10281 width:100%; 10282 aspect-ratio:1/1; 10283 overflow:hidden; 10284 background:#fff !important; 10285} 10286 10287.image{ 10288 position:relative; 10289 width:100%; 10290 height:100%; 10291} 10292 10293.image-wrapper img{ 10294 width:100% !important; 10295 height:100% !important; 10296 object-fit:cover !important; 10297 object-position:center center !important; 10298 display:block; 10299 transition:transform .35s ease; 10300} 10301 10302/* ===== DISCOUNT ===== */ 10303.discount{ 10304 position:absolute; 10305 top:12px; 10306 left:12px; 10307 width:28px; 10308 height:48px; 10309 background:#e10b0b; 10310 color:#fff; 10311 font-size:12px; 10312 font-weight:600; 10313 display:flex; 10314 align-items:center; 10315 justify-content:center; 10316 writing-mode:vertical-rl; 10317 transform:rotate(180deg); 10318 letter-spacing:.5px; 10319 z-index:7; 10320} 10321 10322/* ===== FAV ===== */ 10323.lux-fav{ 10324 position:absolute; 10325 top:12px; 10326 right:12px; 10327 z-index:7; 10328} 10329.lux-fav a, 10330.lux-fav button{ 10331 background:transparent !important; 10332 border:0 !important; 10333 padding:0 !important; 10334 cursor:pointer; 10335 display:inline-flex; 10336 align-items:center; 10337 justify-content:center; 10338} 10339 10340/* ===== SEPET IKON ===== */ 10341.lux-bag{ 10342 position:absolute; 10343 bottom:12px; 10344 right:12px; 10345 z-index:7; 10346 width:34px; 10347 height:34px; 10348 display:inline-flex; 10349 align-items:center; 10350 justify-content:center; 10351 background:rgba(255,255,255,.92); 10352 border:1px solid rgba(0,0,0,.10); 10353 border-radius:10px; 10354 cursor:pointer; 10355 transition:.2s ease; 10356} 10357.lux-bag:hover{ 10358 background:#fff; 10359 border-color:rgba(0,0,0,.25); 10360} 10361.lux-bag.is-loading{ 10362 opacity:.6; 10363 cursor:wait; 10364} 10365.lux-bag.is-success{ 10366 background:#2e7d32 !important; 10367 border-color:#2e7d32 !important; 10368 color:#fff !important; 10369} 10370.card-product.sizes-open .lux-bag{ 10371 opacity:0; 10372 pointer-events:none; 10373} 10374 10375/* Loading spinner */ 10376.lux-bag.is-loading i::before{ 10377 content:"â³"; 10378} 10379 10380/* ===== SIZE STRIP ===== */ 10381.size-strip{ 10382 width:100%; 10383 max-height:0; 10384 overflow:hidden; 10385 background:#fff; 10386 display:flex; 10387 flex-wrap:wrap; 10388 transition:max-height .3s ease, border-color .3s ease; 10389 border-top:1px solid transparent; 10390 border-bottom:1px solid transparent; 10391} 10392.size-strip.open{ 10393 max-height:200px; 10394 border-top-color:rgba(0,0,0,.08); 10395 border-bottom-color:rgba(0,0,0,.08); 10396} 10397.size-item{ 10398 flex:1 0 auto; 10399 min-width:38px; 10400 height:42px; 10401 display:flex; 10402 align-items:center; 10403 justify-content:center; 10404 font-size:13px; 10405 font-weight:500; 10406 color:#111 !important; 10407 cursor:pointer; 10408 user-select:none; 10409 background:transparent; 10410 transition:background .15s ease, color .15s ease; 10411 border-right:1px solid rgba(0,0,0,.08); 10412} 10413.size-item:last-child{ border-right:0; } 10414.size-item:hover:not(.disabled):not(.adding){ 10415 background:#000 !important; 10416 color:#fff !important; 10417} 10418.size-item.disabled{ 10419 color:#111 !important; 10420 text-decoration:line-through !important; 10421 opacity:.30 !important; 10422 cursor:not-allowed; 10423} 10424.size-item.adding{ 10425 background:#2e7d32 !important; 10426 color:#fff !important; 10427 cursor:wait; 10428} 10429 10430/* ===== META ===== */ 10431.lux-meta{ 10432 padding:12px 6px 6px; 10433 background:transparent !important; 10434} 10435.lux-brand{ 10436 font-size:16px; 10437 font-weight:600; 10438 color:#111; 10439 margin-bottom:2px; 10440} 10441.lux-title{ 10442 font-size:14px; 10443 font-weight:400; 10444 line-height:1.45; 10445 color:#111; 10446 margin:0; 10447} 10448.lux-price{ 10449 margin-top:10px; 10450 display:flex; 10451 gap:10px; 10452 align-items:baseline; 10453 background:transparent !important; 10454} 10455.lux-price .list-price{ 10456 font-size:14px; 10457 font-weight:400; 10458 color:#111; 10459 text-decoration:line-through; 10460} 10461.lux-price .sale-price{ 10462 font-size:16px; 10463 font-weight:600; 10464 color:#e10b0b; 10465} 10466 10467.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
10468.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 10469</style><div class="card-product" 10470 id="card-10236" 10471 data-lux-card-id="10236" 10472 data-lux-product-link="https://www.vezzalux.com/dg-894-siyah-gri-erkek-ayakkabi" 10473 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/dg-894-siyah-gri-erkek-ayakkabi" class="c-p-i-link" title="Dg 894 Siyah Gri Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8cb3531d-6888892-sw1200sh1200.webp" alt="Dg 894 Siyah Gri Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8cb3531d-6888892-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8c97c95e-55930898-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 10474 onclick="userProductFavourite('add', 10236)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 10475 id="lux-bag-10236" 10476 onclick="return luxBagClick(event, 10236);" 10477 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10236" style="display:none;"></div><div class="size-strip" id="size-strip-10236" data-loaded="0"></div><a href="https://www.vezzalux.com/dg-894-siyah-gri-erkek-ayakkabi" class="c-p-i-link" title="Dg 894 Siyah Gri Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dolce Gabbana</div><div class="lux-title">Dg 894 Siyah Gri Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
10477<script> 10478(function(){ 10479 10480 /* Bir kez kur */ 10481 if(window.__luxCardInit) return; 10482 window.__luxCardInit = true; 10483 10484 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 10485 window.__luxVariantCache = window.__luxVariantCache || {}; 10486 10487 function closeAll(){ 10488 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10489 s.classList.remove('open'); 10490 }); 10491 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10492 c.classList.remove('sizes-open'); 10493 }); 10494 } 10495 10496 function flashSuccess(productId){ 10497 var bag = document.getElementById('lux-bag-' + productId); 10498 if(!bag) return; 10499 bag.classList.add('is-success'); 10500 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 10501 } 10502 10503 /* DıŠtıklama - kapat */ 10504 document.addEventListener('click', function(e){ 10505 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 10506 if(!inside) closeAll(); 10507 }); 10508 10509 document.addEventListener('keydown', function(e){ 10510 if(e.key === 'Escape') closeAll(); 10511 }); 10512 10513 10514 /* ============================================ 10515 MODAL KILLER - yedek güvence 10516 ============================================ */ 10517 var LUX_MODAL_KILL_ACTIVE = false; 10518 10519 function killVisibleModals(){ 10520 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 10521 modals.forEach(function(m){ 10522 var id = (m.id || '').toLowerCase(); 10523 var txt = (m.textContent || '').toLowerCase(); 10524 var isCartModal = id.indexOf('cart') > -1 10525 || id.indexOf('variant') > -1 10526 || id.indexOf('fast') > -1 10527 || id.indexOf('urun') > -1 10528 || txt.indexOf('lütfen seçin') > -1; 10529 10530 if(isCartModal){ 10531 if(typeof jQuery !== 'undefined'){ 10532 try { jQuery(m).modal('hide'); } catch(e){} 10533 } 10534 m.classList.remove('show','in'); 10535 m.style.display = 'none'; 10536 } 10537 }); 10538 10539 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 10540 document.body.classList.remove('modal-open'); 10541 document.body.style.overflow = ''; 10542 document.body.style.paddingRight = ''; 10543 } 10544 10545 function startModalKill(durationMs){ 10546 if(LUX_MODAL_KILL_ACTIVE) return; 10547 LUX_MODAL_KILL_ACTIVE = true; 10548 killVisibleModals(); 10549 var interval = setInterval(killVisibleModals, 50); 10550 setTimeout(function(){ 10551 clearInterval(interval); 10552 LUX_MODAL_KILL_ACTIVE = false; 10553 }, durationMs || 2000); 10554 } 10555 10556 10557 /* ============================================ 10558 AJAX: Varyantları detay sayfasından çek 10559 ============================================ 10560 Ãrün detay sayfasının tam HTML'ini indir, 10561 DOMParser ile parse et, varyantları bul 10562 ============================================ */ 10563 function fetchVariants(productId, productLink, callback){ 10564 10565 /* Cache'te varsa hemen döndür */ 10566 if(window.__luxVariantCache[productId]){ 10567 callback(window.__luxVariantCache[productId]); 10568 return; 10569 } 10570 10571 fetch(productLink, { 10572 method: 'GET', 10573 credentials: 'same-origin', 10574 headers: { 'Accept': 'text/html' } 10575 }) 10576 .then(function(r){ return r.text(); }) 10577 .then(function(html){ 10578 var parser = new DOMParser(); 10579 var doc = parser.parseFromString(html, 'text/html'); 10580 10581 /* Detay sayfasındaki .variant-box'ı bul */ 10582 var variantBox = doc.querySelector('.variant-box'); 10583 if(!variantBox){ 10584 callback({ variants: [], error: 'no_variant_box' }); 10585 return; 10586 } 10587 10588 /* Her varyant grubu için select'leri ve option'ları oku */ 10589 var variants = []; 10590 var variantLis = variantBox.querySelectorAll('.variant'); 10591 10592 variantLis.forEach(function(li, idx){ 10593 var nameEl = li.querySelector('.name'); 10594 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 10595 10596 var values = []; 10597 10598 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 10599 var optLinks = li.querySelectorAll('.options a'); 10600 10601 if(optLinks.length > 0){ 10602 optLinks.forEach(function(a){ 10603 /* Beden/renk deÄerini doÄru attribute'tan oku
10604 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 10605 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 10606 - textContent: fallback */ 10607 var deger = a.getAttribute('data-variant-value') 10608 || a.textContent.trim(); 10609 10610 /* Stok kontrolü - birden fazla yoldan kontrol et */ 10611 var isSoldOut = a.classList.contains('sold-out') 10612 || a.classList.contains('sold_out') 10613 || a.classList.contains('disabled') 10614 || a.classList.contains('stoksuz') 10615 || a.classList.contains('out-of-stock') 10616 || a.hasAttribute('disabled') 10617 || a.getAttribute('data-in-stock') === '0' 10618 || a.getAttribute('data-in-stock') === 'false' 10619 || a.getAttribute('data-stokta-var-mi') === '0' 10620 || a.getAttribute('data-stokta-var-mi') === 'false'; 10621 10622 values.push({ 10623 deger: deger, 10624 inStock: !isSoldOut 10625 }); 10626 }); 10627 } else { 10628 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 10629 var select = li.querySelector('select'); 10630 if(select){ 10631 var opts = select.querySelectorAll('option'); 10632 opts.forEach(function(o){ 10633 if(!o.value) return; 10634 values.push({ 10635 deger: o.value, 10636 inStock: !o.disabled 10637 }); 10638 }); 10639 } 10640 } 10641 10642 variants.push({ 10643 index: idx, 10644 baslik: name, 10645 values: values 10646 }); 10647 }); 10648 10649 var result = { variants: variants }; 10650 window.__luxVariantCache[productId] = result; 10651 callback(result); 10652 }) 10653 .catch(function(err){ 10654 console.error('Varyant çekme hatası:', err); 10655 callback({ variants: [], error: 'fetch_failed' }); 10656 }); 10657 } 10658 10659 10660 /* ============================================ 10661 Beden Åeridini ve gizli variant-box'ı oluÅtur 10662 ============================================ */ 10663 function buildVariantUI(productId, data){ 10664 var card = document.getElementById('card-' + productId); 10665 if(!card) return false; 10666 10667 var holder = card.querySelector('.lux-variant-box'); 10668 var strip = document.getElementById('size-strip-' + productId); 10669 if(!holder || !strip) return false; 10670 10671 if(!data.variants || data.variants.length === 0){ 10672 /* Varyant yok */ 10673 return false; 10674 } 10675 10676 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 10677 var displayVariant = null;
10678 data.variants.forEach(function(v){ 10679 if(!displayVariant && v.values.length > 1){ 10680 displayVariant = v; 10681 } 10682 }); 10683 10684 /* Gizli variant-box HTML */ 10685 var html = '<div class="variant-box"><ul>'; 10686 data.variants.forEach(function(v){ 10687 html += '<li class="variant">'; 10688 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 10689 10690 if(v.values.length > 1){ 10691 html += '<option value="">Lütfen seçin</option>'; 10692 } 10693 10694 v.values.forEach(function(val, i){ 10695 var selected = (v.values.length === 1) ? ' selected' : ''; 10696 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 10697 }); 10698 10699 html += '</select></li>'; 10700 }); 10701 html += '</ul></div>'; 10702 10703 holder.innerHTML = html; 10704 holder.style.display = ''; 10705 10706 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 10707 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 10708 if(displayVariant){ 10709 var stripHtml = ''; 10710 var inStockCount = 0; 10711 10712 /* DEBUG - console'da gör */ 10713 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 10714 10715 displayVariant.values.forEach(function(val){ 10716 /* SADECE stokta olanları ekle */ 10717 if(val.inStock === true){ 10718 stripHtml += '<div class="size-item" ' 10719 + 'data-urun-id="' + productId + '" ' 10720 + 'data-varyant-deger="' + val.deger + '" ' 10721 + 'onclick="return luxAddVariant(event, this);">' 10722 + val.deger + '</div>'; 10723 inStockCount++; 10724 } 10725 }); 10726 10727 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 10728 if(inStockCount === 0){ 10729 strip.setAttribute('data-loaded', '1'); 10730 strip.setAttribute('data-has-variants', '0'); 10731 return false; 10732 } 10733
10734 strip.innerHTML = stripHtml; 10735 strip.setAttribute('data-loaded', '1'); 10736 strip.setAttribute('data-has-variants', '1'); 10737 return true; 10738 } else { 10739 strip.setAttribute('data-loaded', '1'); 10740 strip.setAttribute('data-has-variants', '0'); 10741 return false; 10742 } 10743 } 10744 10745 10746 /* ============================================ 10747 SEPET IKONU TIKLAMASI 10748 ============================================ */ 10749 window.luxBagClick = function(ev, productId){ 10750 ev.preventDefault(); 10751 ev.stopPropagation(); 10752 10753 var card = document.getElementById('card-' + productId); 10754 var strip = document.getElementById('size-strip-' + productId); 10755 var bag = document.getElementById('lux-bag-' + productId); 10756 if(!card || !strip) return false; 10757 10758 /* Strip zaten yüklenmiÅse direkt davran */ 10759 if(strip.getAttribute('data-loaded') === '1'){ 10760 if(strip.getAttribute('data-has-variants') === '1'){ 10761 toggleStrip(productId); 10762 } else { 10763 addToCartSmart(productId); 10764 } 10765 return false; 10766 } 10767 10768 /* İlk tıklama - AJAX ile varyantları çek */ 10769 bag.classList.add('is-loading'); 10770 var productLink = card.getAttribute('data-lux-product-link'); 10771 10772 fetchVariants(productId, productLink, function(data){ 10773 bag.classList.remove('is-loading'); 10774 10775 var hasVariants = buildVariantUI(productId, data); 10776 10777 if(hasVariants){ 10778 /* Bedenler var - Åeridi aç */ 10779 toggleStrip(productId); 10780 } else { 10781 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 10782 addToCartSmart(productId); 10783 } 10784 }); 10785 10786 return false; 10787 }; 10788 10789 function toggleStrip(productId){ 10790 var strip = document.getElementById('size-strip-' + productId); 10791 var card = document.getElementById('card-' + productId); 10792 if(!strip) return; 10793 10794 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10795 if(s !== strip) s.classList.remove('open'); 10796 }); 10797 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10798 if(c !== card) c.classList.remove('sizes-open'); 10799 }); 10800 10801 strip.classList.toggle('open'); 10802 if(card) card.classList.toggle('sizes-open'); 10803 } 10804 10805 10806 /* ============================================ 10807 BEDEN TIKLAMASI 10808 ============================================ */ 10809 window.luxAddVariant = function(ev, elem){ 10810 ev.preventDefault(); 10811 ev.stopPropagation(); 10812 10813 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 10814 10815 var productId = elem.getAttribute('data-urun-id'); 10816 var varyantDeger = elem.getAttribute('data-varyant-deger'); 10817 10818 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10819 if(!holder) return false; 10820 10821 /* Seçilen bedeni ilk select'e yaz */ 10822 var firstSelect = holder.querySelector('select[data-variant="0"]'); 10823 if(firstSelect){ 10824 firstSelect.value = varyantDeger; 10825 if(typeof jQuery !== "undefined"){ 10826 jQuery(firstSelect).val(varyantDeger).trigger('change'); 10827 } 10828 } 10829 10830 /* DiÄer select'lere ilk geçerli deÄeri koy */ 10831 var allSelects = holder.querySelectorAll('select[data-variant]'); 10832 allSelects.forEach(function(sel, idx){ 10833 if(idx === 0) return; 10834 if(sel.value) return; 10835 var options = sel.querySelectorAll('option'); 10836 for(var i = 0; i < options.length; i++){ 10837 if(options[i].value){ 10838 sel.value = options[i].value; 10839 if(typeof jQuery !== "undefined"){ 10840 jQuery(sel).val(options[i].value).trigger('change'); 10841 } 10842 break; 10843 } 10844 } 10845 }); 10846 10847 /* Görsel feedback */ 10848 elem.classList.add('adding'); 10849 var originalText = elem.textContent; 10850 elem.textContent = 'â'; 10851 10852 /* Sepete ekle */ 10853 addToCartSmart(productId, { 10854 checkVariant: true, 10855 variantCount: allSelects.length, 10856 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 10857 }); 10858 10859 setTimeout(function(){ 10860 elem.textContent = originalText; 10861 elem.classList.remove('adding'); 10862 closeAll(); 10863 }, 800); 10864 10865 return false; 10866 }; 10867 10868 10869 /* ============================================ 10870 SEPETE EKLE - Modal killer ile 10871 ============================================ */ 10872 function addToCartSmart(productId, extraOptions){ 10873 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10874 10875 var options = { 10876 quantity: 1, 10877 hideNativeModal: 'lux-card-' + productId 10878 }; 10879 10880 if(extraOptions){
10881 Object.keys(extraOptions).forEach(function(k){ 10882 options[k] = extraOptions[k]; 10883 }); 10884 } else if(holder){ 10885 var selects = holder.querySelectorAll('select[data-variant]'); 10886 if(selects.length > 0){ 10887 options.checkVariant = true; 10888 options.variantCount = selects.length; 10889 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 10890 } 10891 } 10892 10893 startModalKill(2000); 10894 10895 if(typeof addCart === "function"){ 10896 try { 10897 addCart(productId, 'card', options); 10898 flashSuccess(productId); 10899 } catch(err){ 10900 console.error('Sepete ekleme hatası:', err); 10901 } 10902 } 10903 } 10904 10905})(); 10906</script>
10906</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 10907 data-lux-product-shell="1" 10908 data-lux-page="1"><style> 10909@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 10910 10911/* ===== VEZZA LUX CARD ===== */ 10912.card-product{ 10913 font-family:'Poppins',sans-serif; 10914 background:#fff !important; 10915 position:relative; 10916} 10917.card-product-inner{ 10918 background:transparent !important; 10919 position:relative; 10920} 10921.card-product .c-p-i-link, 10922.card-product a{ 10923 background:transparent !important; 10924} 10925.card-product-inner > div{ 10926 background:transparent !important; 10927} 10928.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 10929 background:transparent !important; 10930} 10931.card-product .card-product-content, 10932.card-product .price-group, 10933.card-product .prices{ 10934 background:transparent !important; 10935} 10936[class*="skeleton"], 10937[class*="placeholder"], 10938[class*="loading"]{ 10939 background:transparent !important; 10940} 10941 10942/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 10943.image-wrapper{ 10944 position:relative; 10945 width:100%; 10946 aspect-ratio:1/1; 10947 overflow:hidden; 10948 background:#fff !important; 10949} 10950 10951.image{ 10952 position:relative; 10953 width:100%; 10954 height:100%; 10955} 10956 10957.image-wrapper img{ 10958 width:100% !important; 10959 height:100% !important; 10960 object-fit:cover !important; 10961 object-position:center center !important; 10962 display:block; 10963 transition:transform .35s ease; 10964} 10965 10966/* ===== DISCOUNT ===== */ 10967.discount{ 10968 position:absolute; 10969 top:12px; 10970 left:12px; 10971 width:28px; 10972 height:48px; 10973 background:#e10b0b; 10974 color:#fff; 10975 font-size:12px; 10976 font-weight:600; 10977 display:flex; 10978 align-items:center; 10979 justify-content:center; 10980 writing-mode:vertical-rl; 10981 transform:rotate(180deg); 10982 letter-spacing:.5px; 10983 z-index:7; 10984} 10985 10986/* ===== FAV ===== */ 10987.lux-fav{ 10988 position:absolute; 10989 top:12px; 10990 right:12px; 10991 z-index:7; 10992} 10993.lux-fav a, 10994.lux-fav button{ 10995 background:transparent !important; 10996 border:0 !important; 10997 padding:0 !important; 10998 cursor:pointer; 10999 display:inline-flex; 11000 align-items:center; 11001 justify-content:center; 11002} 11003 11004/* ===== SEPET IKON ===== */ 11005.lux-bag{ 11006 position:absolute; 11007 bottom:12px; 11008 right:12px; 11009 z-index:7; 11010 width:34px; 11011 height:34px; 11012 display:inline-flex; 11013 align-items:center; 11014 justify-content:center; 11015 background:rgba(255,255,255,.92); 11016 border:1px solid rgba(0,0,0,.10); 11017 border-radius:10px; 11018 cursor:pointer; 11019 transition:.2s ease; 11020} 11021.lux-bag:hover{ 11022 background:#fff; 11023 border-color:rgba(0,0,0,.25); 11024} 11025.lux-bag.is-loading{ 11026 opacity:.6; 11027 cursor:wait; 11028} 11029.lux-bag.is-success{ 11030 background:#2e7d32 !important; 11031 border-color:#2e7d32 !important; 11032 color:#fff !important; 11033} 11034.card-product.sizes-open .lux-bag{ 11035 opacity:0; 11036 pointer-events:none; 11037} 11038 11039/* Loading spinner */ 11040.lux-bag.is-loading i::before{ 11041 content:"â³"; 11042} 11043 11044/* ===== SIZE STRIP ===== */ 11045.size-strip{ 11046 width:100%; 11047 max-height:0; 11048 overflow:hidden; 11049 background:#fff; 11050 display:flex; 11051 flex-wrap:wrap; 11052 transition:max-height .3s ease, border-color .3s ease; 11053 border-top:1px solid transparent; 11054 border-bottom:1px solid transparent; 11055} 11056.size-strip.open{ 11057 max-height:200px; 11058 border-top-color:rgba(0,0,0,.08); 11059 border-bottom-color:rgba(0,0,0,.08); 11060} 11061.size-item{ 11062 flex:1 0 auto; 11063 min-width:38px; 11064 height:42px; 11065 display:flex; 11066 align-items:center; 11067 justify-content:center; 11068 font-size:13px; 11069 font-weight:500; 11070 color:#111 !important; 11071 cursor:pointer; 11072 user-select:none; 11073 background:transparent; 11074 transition:background .15s ease, color .15s ease; 11075 border-right:1px solid rgba(0,0,0,.08); 11076} 11077.size-item:last-child{ border-right:0; } 11078.size-item:hover:not(.disabled):not(.adding){ 11079 background:#000 !important; 11080 color:#fff !important; 11081} 11082.size-item.disabled{ 11083 color:#111 !important; 11084 text-decoration:line-through !important; 11085 opacity:.30 !important; 11086 cursor:not-allowed; 11087} 11088.size-item.adding{ 11089 background:#2e7d32 !important; 11090 color:#fff !important; 11091 cursor:wait; 11092} 11093 11094/* ===== META ===== */ 11095.lux-meta{ 11096 padding:12px 6px 6px; 11097 background:transparent !important; 11098} 11099.lux-brand{ 11100 font-size:16px; 11101 font-weight:600; 11102 color:#111; 11103 margin-bottom:2px; 11104} 11105.lux-title{ 11106 font-size:14px; 11107 font-weight:400; 11108 line-height:1.45; 11109 color:#111; 11110 margin:0; 11111} 11112.lux-price{ 11113 margin-top:10px; 11114 display:flex; 11115 gap:10px; 11116 align-items:baseline; 11117 background:transparent !important; 11118} 11119.lux-price .list-price{ 11120 font-size:14px; 11121 font-weight:400; 11122 color:#111; 11123 text-decoration:line-through; 11124} 11125.lux-price .sale-price{ 11126 font-size:16px; 11127 font-weight:600; 11128 color:#e10b0b; 11129} 11130 11131.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
11132.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 11133</style><div class="card-product" 11134 id="card-10454" 11135 data-lux-card-id="10454" 11136 data-lux-product-link="https://www.vezzalux.com/prada-1171-krem-loafer-suet-erkek-ayakkabi" 11137 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/prada-1171-krem-loafer-suet-erkek-ayakkabi" class="c-p-i-link" title="Prada 1171 Krem Loafer Süet Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd46650ab-56663319-sw1200sh1200.webp" alt="Prada 1171 Krem Loafer Süet Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd46650ab-56663319-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd47a4668-93634913-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 11138 onclick="userProductFavourite('add', 10454)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 11139 id="lux-bag-10454" 11140 onclick="return luxBagClick(event, 10454);" 11141 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10454" style="display:none;"></div><div class="size-strip" id="size-strip-10454" data-loaded="0"></div><a href="https://www.vezzalux.com/prada-1171-krem-loafer-suet-erkek-ayakkabi" class="c-p-i-link" title="Prada 1171 Krem Loafer Süet Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Prada</div><div class="lux-title">Prada 1171 Krem Loafer Süet Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
11141<script> 11142(function(){ 11143 11144 /* Bir kez kur */ 11145 if(window.__luxCardInit) return; 11146 window.__luxCardInit = true; 11147 11148 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 11149 window.__luxVariantCache = window.__luxVariantCache || {}; 11150 11151 function closeAll(){ 11152 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11153 s.classList.remove('open'); 11154 }); 11155 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11156 c.classList.remove('sizes-open'); 11157 }); 11158 } 11159 11160 function flashSuccess(productId){ 11161 var bag = document.getElementById('lux-bag-' + productId); 11162 if(!bag) return; 11163 bag.classList.add('is-success'); 11164 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 11165 } 11166 11167 /* DıŠtıklama - kapat */ 11168 document.addEventListener('click', function(e){ 11169 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 11170 if(!inside) closeAll(); 11171 }); 11172 11173 document.addEventListener('keydown', function(e){ 11174 if(e.key === 'Escape') closeAll(); 11175 }); 11176 11177 11178 /* ============================================ 11179 MODAL KILLER - yedek güvence 11180 ============================================ */ 11181 var LUX_MODAL_KILL_ACTIVE = false; 11182 11183 function killVisibleModals(){ 11184 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 11185 modals.forEach(function(m){ 11186 var id = (m.id || '').toLowerCase(); 11187 var txt = (m.textContent || '').toLowerCase(); 11188 var isCartModal = id.indexOf('cart') > -1 11189 || id.indexOf('variant') > -1 11190 || id.indexOf('fast') > -1 11191 || id.indexOf('urun') > -1 11192 || txt.indexOf('lütfen seçin') > -1; 11193 11194 if(isCartModal){ 11195 if(typeof jQuery !== 'undefined'){ 11196 try { jQuery(m).modal('hide'); } catch(e){} 11197 } 11198 m.classList.remove('show','in'); 11199 m.style.display = 'none'; 11200 } 11201 }); 11202 11203 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 11204 document.body.classList.remove('modal-open'); 11205 document.body.style.overflow = ''; 11206 document.body.style.paddingRight = ''; 11207 } 11208 11209 function startModalKill(durationMs){ 11210 if(LUX_MODAL_KILL_ACTIVE) return; 11211 LUX_MODAL_KILL_ACTIVE = true; 11212 killVisibleModals(); 11213 var interval = setInterval(killVisibleModals, 50); 11214 setTimeout(function(){ 11215 clearInterval(interval); 11216 LUX_MODAL_KILL_ACTIVE = false; 11217 }, durationMs || 2000); 11218 } 11219 11220 11221 /* ============================================ 11222 AJAX: Varyantları detay sayfasından çek 11223 ============================================ 11224 Ãrün detay sayfasının tam HTML'ini indir, 11225 DOMParser ile parse et, varyantları bul 11226 ============================================ */ 11227 function fetchVariants(productId, productLink, callback){ 11228 11229 /* Cache'te varsa hemen döndür */ 11230 if(window.__luxVariantCache[productId]){ 11231 callback(window.__luxVariantCache[productId]); 11232 return; 11233 } 11234 11235 fetch(productLink, { 11236 method: 'GET', 11237 credentials: 'same-origin', 11238 headers: { 'Accept': 'text/html' } 11239 }) 11240 .then(function(r){ return r.text(); }) 11241 .then(function(html){ 11242 var parser = new DOMParser(); 11243 var doc = parser.parseFromString(html, 'text/html'); 11244 11245 /* Detay sayfasındaki .variant-box'ı bul */ 11246 var variantBox = doc.querySelector('.variant-box'); 11247 if(!variantBox){ 11248 callback({ variants: [], error: 'no_variant_box' }); 11249 return; 11250 } 11251 11252 /* Her varyant grubu için select'leri ve option'ları oku */ 11253 var variants = []; 11254 var variantLis = variantBox.querySelectorAll('.variant'); 11255 11256 variantLis.forEach(function(li, idx){ 11257 var nameEl = li.querySelector('.name'); 11258 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 11259 11260 var values = []; 11261 11262 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 11263 var optLinks = li.querySelectorAll('.options a'); 11264 11265 if(optLinks.length > 0){ 11266 optLinks.forEach(function(a){ 11267 /* Beden/renk deÄerini doÄru attribute'tan oku
11268 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 11269 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 11270 - textContent: fallback */ 11271 var deger = a.getAttribute('data-variant-value') 11272 || a.textContent.trim(); 11273 11274 /* Stok kontrolü - birden fazla yoldan kontrol et */ 11275 var isSoldOut = a.classList.contains('sold-out') 11276 || a.classList.contains('sold_out') 11277 || a.classList.contains('disabled') 11278 || a.classList.contains('stoksuz') 11279 || a.classList.contains('out-of-stock') 11280 || a.hasAttribute('disabled') 11281 || a.getAttribute('data-in-stock') === '0' 11282 || a.getAttribute('data-in-stock') === 'false' 11283 || a.getAttribute('data-stokta-var-mi') === '0' 11284 || a.getAttribute('data-stokta-var-mi') === 'false'; 11285 11286 values.push({ 11287 deger: deger, 11288 inStock: !isSoldOut 11289 }); 11290 }); 11291 } else { 11292 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 11293 var select = li.querySelector('select'); 11294 if(select){ 11295 var opts = select.querySelectorAll('option'); 11296 opts.forEach(function(o){ 11297 if(!o.value) return; 11298 values.push({ 11299 deger: o.value, 11300 inStock: !o.disabled 11301 }); 11302 }); 11303 } 11304 } 11305 11306 variants.push({ 11307 index: idx, 11308 baslik: name, 11309 values: values 11310 }); 11311 }); 11312 11313 var result = { variants: variants }; 11314 window.__luxVariantCache[productId] = result; 11315 callback(result); 11316 }) 11317 .catch(function(err){ 11318 console.error('Varyant çekme hatası:', err); 11319 callback({ variants: [], error: 'fetch_failed' }); 11320 }); 11321 } 11322 11323 11324 /* ============================================ 11325 Beden Åeridini ve gizli variant-box'ı oluÅtur 11326 ============================================ */ 11327 function buildVariantUI(productId, data){ 11328 var card = document.getElementById('card-' + productId); 11329 if(!card) return false; 11330 11331 var holder = card.querySelector('.lux-variant-box'); 11332 var strip = document.getElementById('size-strip-' + productId); 11333 if(!holder || !strip) return false; 11334 11335 if(!data.variants || data.variants.length === 0){ 11336 /* Varyant yok */ 11337 return false; 11338 } 11339 11340 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 11341 var displayVariant = null;
11342 data.variants.forEach(function(v){ 11343 if(!displayVariant && v.values.length > 1){ 11344 displayVariant = v; 11345 } 11346 }); 11347 11348 /* Gizli variant-box HTML */ 11349 var html = '<div class="variant-box"><ul>'; 11350 data.variants.forEach(function(v){ 11351 html += '<li class="variant">'; 11352 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 11353 11354 if(v.values.length > 1){ 11355 html += '<option value="">Lütfen seçin</option>'; 11356 } 11357 11358 v.values.forEach(function(val, i){ 11359 var selected = (v.values.length === 1) ? ' selected' : ''; 11360 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 11361 }); 11362 11363 html += '</select></li>'; 11364 }); 11365 html += '</ul></div>'; 11366 11367 holder.innerHTML = html; 11368 holder.style.display = ''; 11369 11370 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 11371 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 11372 if(displayVariant){ 11373 var stripHtml = ''; 11374 var inStockCount = 0; 11375 11376 /* DEBUG - console'da gör */ 11377 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 11378 11379 displayVariant.values.forEach(function(val){ 11380 /* SADECE stokta olanları ekle */ 11381 if(val.inStock === true){ 11382 stripHtml += '<div class="size-item" ' 11383 + 'data-urun-id="' + productId + '" ' 11384 + 'data-varyant-deger="' + val.deger + '" ' 11385 + 'onclick="return luxAddVariant(event, this);">' 11386 + val.deger + '</div>'; 11387 inStockCount++; 11388 } 11389 }); 11390 11391 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 11392 if(inStockCount === 0){ 11393 strip.setAttribute('data-loaded', '1'); 11394 strip.setAttribute('data-has-variants', '0'); 11395 return false; 11396 } 11397
11398 strip.innerHTML = stripHtml; 11399 strip.setAttribute('data-loaded', '1'); 11400 strip.setAttribute('data-has-variants', '1'); 11401 return true; 11402 } else { 11403 strip.setAttribute('data-loaded', '1'); 11404 strip.setAttribute('data-has-variants', '0'); 11405 return false; 11406 } 11407 } 11408 11409 11410 /* ============================================ 11411 SEPET IKONU TIKLAMASI 11412 ============================================ */ 11413 window.luxBagClick = function(ev, productId){ 11414 ev.preventDefault(); 11415 ev.stopPropagation(); 11416 11417 var card = document.getElementById('card-' + productId); 11418 var strip = document.getElementById('size-strip-' + productId); 11419 var bag = document.getElementById('lux-bag-' + productId); 11420 if(!card || !strip) return false; 11421 11422 /* Strip zaten yüklenmiÅse direkt davran */ 11423 if(strip.getAttribute('data-loaded') === '1'){ 11424 if(strip.getAttribute('data-has-variants') === '1'){ 11425 toggleStrip(productId); 11426 } else { 11427 addToCartSmart(productId); 11428 } 11429 return false; 11430 } 11431 11432 /* İlk tıklama - AJAX ile varyantları çek */ 11433 bag.classList.add('is-loading'); 11434 var productLink = card.getAttribute('data-lux-product-link'); 11435 11436 fetchVariants(productId, productLink, function(data){ 11437 bag.classList.remove('is-loading'); 11438 11439 var hasVariants = buildVariantUI(productId, data); 11440 11441 if(hasVariants){ 11442 /* Bedenler var - Åeridi aç */ 11443 toggleStrip(productId); 11444 } else { 11445 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 11446 addToCartSmart(productId); 11447 } 11448 }); 11449 11450 return false; 11451 }; 11452 11453 function toggleStrip(productId){ 11454 var strip = document.getElementById('size-strip-' + productId); 11455 var card = document.getElementById('card-' + productId); 11456 if(!strip) return; 11457 11458 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11459 if(s !== strip) s.classList.remove('open'); 11460 }); 11461 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11462 if(c !== card) c.classList.remove('sizes-open'); 11463 }); 11464 11465 strip.classList.toggle('open'); 11466 if(card) card.classList.toggle('sizes-open'); 11467 } 11468 11469 11470 /* ============================================ 11471 BEDEN TIKLAMASI 11472 ============================================ */ 11473 window.luxAddVariant = function(ev, elem){ 11474 ev.preventDefault(); 11475 ev.stopPropagation(); 11476 11477 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 11478 11479 var productId = elem.getAttribute('data-urun-id'); 11480 var varyantDeger = elem.getAttribute('data-varyant-deger'); 11481 11482 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 11483 if(!holder) return false; 11484 11485 /* Seçilen bedeni ilk select'e yaz */ 11486 var firstSelect = holder.querySelector('select[data-variant="0"]'); 11487 if(firstSelect){ 11488 firstSelect.value = varyantDeger; 11489 if(typeof jQuery !== "undefined"){ 11490 jQuery(firstSelect).val(varyantDeger).trigger('change'); 11491 } 11492 } 11493 11494 /* DiÄer select'lere ilk geçerli deÄeri koy */ 11495 var allSelects = holder.querySelectorAll('select[data-variant]'); 11496 allSelects.forEach(function(sel, idx){ 11497 if(idx === 0) return; 11498 if(sel.value) return; 11499 var options = sel.querySelectorAll('option'); 11500 for(var i = 0; i < options.length; i++){ 11501 if(options[i].value){ 11502 sel.value = options[i].value; 11503 if(typeof jQuery !== "undefined"){ 11504 jQuery(sel).val(options[i].value).trigger('change'); 11505 } 11506 break; 11507 } 11508 } 11509 }); 11510 11511 /* Görsel feedback */ 11512 elem.classList.add('adding'); 11513 var originalText = elem.textContent; 11514 elem.textContent = 'â'; 11515 11516 /* Sepete ekle */ 11517 addToCartSmart(productId, { 11518 checkVariant: true, 11519 variantCount: allSelects.length, 11520 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 11521 }); 11522 11523 setTimeout(function(){ 11524 elem.textContent = originalText; 11525 elem.classList.remove('adding'); 11526 closeAll(); 11527 }, 800); 11528 11529 return false; 11530 }; 11531 11532 11533 /* ============================================ 11534 SEPETE EKLE - Modal killer ile 11535 ============================================ */ 11536 function addToCartSmart(productId, extraOptions){ 11537 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 11538 11539 var options = { 11540 quantity: 1, 11541 hideNativeModal: 'lux-card-' + productId 11542 }; 11543 11544 if(extraOptions){
11545 Object.keys(extraOptions).forEach(function(k){ 11546 options[k] = extraOptions[k]; 11547 }); 11548 } else if(holder){ 11549 var selects = holder.querySelectorAll('select[data-variant]'); 11550 if(selects.length > 0){ 11551 options.checkVariant = true; 11552 options.variantCount = selects.length; 11553 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 11554 } 11555 } 11556 11557 startModalKill(2000); 11558 11559 if(typeof addCart === "function"){ 11560 try { 11561 addCart(productId, 'card', options); 11562 flashSuccess(productId); 11563 } catch(err){ 11564 console.error('Sepete ekleme hatası:', err); 11565 } 11566 } 11567 } 11568 11569})(); 11570</script>
11570</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 11571 data-lux-product-shell="1" 11572 data-lux-page="1"><style> 11573@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 11574 11575/* ===== VEZZA LUX CARD ===== */ 11576.card-product{ 11577 font-family:'Poppins',sans-serif; 11578 background:#fff !important; 11579 position:relative; 11580} 11581.card-product-inner{ 11582 background:transparent !important; 11583 position:relative; 11584} 11585.card-product .c-p-i-link, 11586.card-product a{ 11587 background:transparent !important; 11588} 11589.card-product-inner > div{ 11590 background:transparent !important; 11591} 11592.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 11593 background:transparent !important; 11594} 11595.card-product .card-product-content, 11596.card-product .price-group, 11597.card-product .prices{ 11598 background:transparent !important; 11599} 11600[class*="skeleton"], 11601[class*="placeholder"], 11602[class*="loading"]{ 11603 background:transparent !important; 11604} 11605 11606/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 11607.image-wrapper{ 11608 position:relative; 11609 width:100%; 11610 aspect-ratio:1/1; 11611 overflow:hidden; 11612 background:#fff !important; 11613} 11614 11615.image{ 11616 position:relative; 11617 width:100%; 11618 height:100%; 11619} 11620 11621.image-wrapper img{ 11622 width:100% !important; 11623 height:100% !important; 11624 object-fit:cover !important; 11625 object-position:center center !important; 11626 display:block; 11627 transition:transform .35s ease; 11628} 11629 11630/* ===== DISCOUNT ===== */ 11631.discount{ 11632 position:absolute; 11633 top:12px; 11634 left:12px; 11635 width:28px; 11636 height:48px; 11637 background:#e10b0b; 11638 color:#fff; 11639 font-size:12px; 11640 font-weight:600; 11641 display:flex; 11642 align-items:center; 11643 justify-content:center; 11644 writing-mode:vertical-rl; 11645 transform:rotate(180deg); 11646 letter-spacing:.5px; 11647 z-index:7; 11648} 11649 11650/* ===== FAV ===== */ 11651.lux-fav{ 11652 position:absolute; 11653 top:12px; 11654 right:12px; 11655 z-index:7; 11656} 11657.lux-fav a, 11658.lux-fav button{ 11659 background:transparent !important; 11660 border:0 !important; 11661 padding:0 !important; 11662 cursor:pointer; 11663 display:inline-flex; 11664 align-items:center; 11665 justify-content:center; 11666} 11667 11668/* ===== SEPET IKON ===== */ 11669.lux-bag{ 11670 position:absolute; 11671 bottom:12px; 11672 right:12px; 11673 z-index:7; 11674 width:34px; 11675 height:34px; 11676 display:inline-flex; 11677 align-items:center; 11678 justify-content:center; 11679 background:rgba(255,255,255,.92); 11680 border:1px solid rgba(0,0,0,.10); 11681 border-radius:10px; 11682 cursor:pointer; 11683 transition:.2s ease; 11684} 11685.lux-bag:hover{ 11686 background:#fff; 11687 border-color:rgba(0,0,0,.25); 11688} 11689.lux-bag.is-loading{ 11690 opacity:.6; 11691 cursor:wait; 11692} 11693.lux-bag.is-success{ 11694 background:#2e7d32 !important; 11695 border-color:#2e7d32 !important; 11696 color:#fff !important; 11697} 11698.card-product.sizes-open .lux-bag{ 11699 opacity:0; 11700 pointer-events:none; 11701} 11702 11703/* Loading spinner */ 11704.lux-bag.is-loading i::before{ 11705 content:"â³"; 11706} 11707 11708/* ===== SIZE STRIP ===== */ 11709.size-strip{ 11710 width:100%; 11711 max-height:0; 11712 overflow:hidden; 11713 background:#fff; 11714 display:flex; 11715 flex-wrap:wrap; 11716 transition:max-height .3s ease, border-color .3s ease; 11717 border-top:1px solid transparent; 11718 border-bottom:1px solid transparent; 11719} 11720.size-strip.open{ 11721 max-height:200px; 11722 border-top-color:rgba(0,0,0,.08); 11723 border-bottom-color:rgba(0,0,0,.08); 11724} 11725.size-item{ 11726 flex:1 0 auto; 11727 min-width:38px; 11728 height:42px; 11729 display:flex; 11730 align-items:center; 11731 justify-content:center; 11732 font-size:13px; 11733 font-weight:500; 11734 color:#111 !important; 11735 cursor:pointer; 11736 user-select:none; 11737 background:transparent; 11738 transition:background .15s ease, color .15s ease; 11739 border-right:1px solid rgba(0,0,0,.08); 11740} 11741.size-item:last-child{ border-right:0; } 11742.size-item:hover:not(.disabled):not(.adding){ 11743 background:#000 !important; 11744 color:#fff !important; 11745} 11746.size-item.disabled{ 11747 color:#111 !important; 11748 text-decoration:line-through !important; 11749 opacity:.30 !important; 11750 cursor:not-allowed; 11751} 11752.size-item.adding{ 11753 background:#2e7d32 !important; 11754 color:#fff !important; 11755 cursor:wait; 11756} 11757 11758/* ===== META ===== */ 11759.lux-meta{ 11760 padding:12px 6px 6px; 11761 background:transparent !important; 11762} 11763.lux-brand{ 11764 font-size:16px; 11765 font-weight:600; 11766 color:#111; 11767 margin-bottom:2px; 11768} 11769.lux-title{ 11770 font-size:14px; 11771 font-weight:400; 11772 line-height:1.45; 11773 color:#111; 11774 margin:0; 11775} 11776.lux-price{ 11777 margin-top:10px; 11778 display:flex; 11779 gap:10px; 11780 align-items:baseline; 11781 background:transparent !important; 11782} 11783.lux-price .list-price{ 11784 font-size:14px; 11785 font-weight:400; 11786 color:#111; 11787 text-decoration:line-through; 11788} 11789.lux-price .sale-price{ 11790 font-size:16px; 11791 font-weight:600; 11792 color:#e10b0b; 11793} 11794 11795.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
11796.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 11797</style><div class="card-product" 11798 id="card-10334" 11799 data-lux-card-id="10334" 11800 data-lux-product-link="https://www.vezzalux.com/dior-1015-full-gri-beyaz-taban-erkek-ayakkabi" 11801 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/dior-1015-full-gri-beyaz-taban-erkek-ayakkabi" class="c-p-i-link" title="Dior 1015 Full Gri Beyaz Taban Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb3f0d46f-70986911-sw1200sh1200.webp" alt="Dior 1015 Full Gri Beyaz Taban Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb3f0d46f-70986911-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb40a3623-76175129-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 11802 onclick="userProductFavourite('add', 10334)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 11803 id="lux-bag-10334" 11804 onclick="return luxBagClick(event, 10334);" 11805 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10334" style="display:none;"></div><div class="size-strip" id="size-strip-10334" data-loaded="0"></div><a href="https://www.vezzalux.com/dior-1015-full-gri-beyaz-taban-erkek-ayakkabi" class="c-p-i-link" title="Dior 1015 Full Gri Beyaz Taban Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dior</div><div class="lux-title">Dior 1015 Full Gri Beyaz Taban Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
11805<script> 11806(function(){ 11807 11808 /* Bir kez kur */ 11809 if(window.__luxCardInit) return; 11810 window.__luxCardInit = true; 11811 11812 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 11813 window.__luxVariantCache = window.__luxVariantCache || {}; 11814 11815 function closeAll(){ 11816 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11817 s.classList.remove('open'); 11818 }); 11819 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11820 c.classList.remove('sizes-open'); 11821 }); 11822 } 11823 11824 function flashSuccess(productId){ 11825 var bag = document.getElementById('lux-bag-' + productId); 11826 if(!bag) return; 11827 bag.classList.add('is-success'); 11828 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 11829 } 11830 11831 /* DıŠtıklama - kapat */ 11832 document.addEventListener('click', function(e){ 11833 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 11834 if(!inside) closeAll(); 11835 }); 11836 11837 document.addEventListener('keydown', function(e){ 11838 if(e.key === 'Escape') closeAll(); 11839 }); 11840 11841 11842 /* ============================================ 11843 MODAL KILLER - yedek güvence 11844 ============================================ */ 11845 var LUX_MODAL_KILL_ACTIVE = false; 11846 11847 function killVisibleModals(){ 11848 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 11849 modals.forEach(function(m){ 11850 var id = (m.id || '').toLowerCase(); 11851 var txt = (m.textContent || '').toLowerCase(); 11852 var isCartModal = id.indexOf('cart') > -1 11853 || id.indexOf('variant') > -1 11854 || id.indexOf('fast') > -1 11855 || id.indexOf('urun') > -1 11856 || txt.indexOf('lütfen seçin') > -1; 11857 11858 if(isCartModal){ 11859 if(typeof jQuery !== 'undefined'){ 11860 try { jQuery(m).modal('hide'); } catch(e){} 11861 } 11862 m.classList.remove('show','in'); 11863 m.style.display = 'none'; 11864 } 11865 }); 11866 11867 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 11868 document.body.classList.remove('modal-open'); 11869 document.body.style.overflow = ''; 11870 document.body.style.paddingRight = ''; 11871 } 11872 11873 function startModalKill(durationMs){ 11874 if(LUX_MODAL_KILL_ACTIVE) return; 11875 LUX_MODAL_KILL_ACTIVE = true; 11876 killVisibleModals(); 11877 var interval = setInterval(killVisibleModals, 50); 11878 setTimeout(function(){ 11879 clearInterval(interval); 11880 LUX_MODAL_KILL_ACTIVE = false; 11881 }, durationMs || 2000); 11882 } 11883 11884 11885 /* ============================================ 11886 AJAX: Varyantları detay sayfasından çek 11887 ============================================ 11888 Ãrün detay sayfasının tam HTML'ini indir, 11889 DOMParser ile parse et, varyantları bul 11890 ============================================ */ 11891 function fetchVariants(productId, productLink, callback){ 11892 11893 /* Cache'te varsa hemen döndür */ 11894 if(window.__luxVariantCache[productId]){ 11895 callback(window.__luxVariantCache[productId]); 11896 return; 11897 } 11898 11899 fetch(productLink, { 11900 method: 'GET', 11901 credentials: 'same-origin', 11902 headers: { 'Accept': 'text/html' } 11903 }) 11904 .then(function(r){ return r.text(); }) 11905 .then(function(html){ 11906 var parser = new DOMParser(); 11907 var doc = parser.parseFromString(html, 'text/html'); 11908 11909 /* Detay sayfasındaki .variant-box'ı bul */ 11910 var variantBox = doc.querySelector('.variant-box'); 11911 if(!variantBox){ 11912 callback({ variants: [], error: 'no_variant_box' }); 11913 return; 11914 } 11915 11916 /* Her varyant grubu için select'leri ve option'ları oku */ 11917 var variants = []; 11918 var variantLis = variantBox.querySelectorAll('.variant'); 11919 11920 variantLis.forEach(function(li, idx){ 11921 var nameEl = li.querySelector('.name'); 11922 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 11923 11924 var values = []; 11925 11926 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 11927 var optLinks = li.querySelectorAll('.options a'); 11928 11929 if(optLinks.length > 0){ 11930 optLinks.forEach(function(a){ 11931 /* Beden/renk deÄerini doÄru attribute'tan oku
11932 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 11933 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 11934 - textContent: fallback */ 11935 var deger = a.getAttribute('data-variant-value') 11936 || a.textContent.trim(); 11937 11938 /* Stok kontrolü - birden fazla yoldan kontrol et */ 11939 var isSoldOut = a.classList.contains('sold-out') 11940 || a.classList.contains('sold_out') 11941 || a.classList.contains('disabled') 11942 || a.classList.contains('stoksuz') 11943 || a.classList.contains('out-of-stock') 11944 || a.hasAttribute('disabled') 11945 || a.getAttribute('data-in-stock') === '0' 11946 || a.getAttribute('data-in-stock') === 'false' 11947 || a.getAttribute('data-stokta-var-mi') === '0' 11948 || a.getAttribute('data-stokta-var-mi') === 'false'; 11949 11950 values.push({ 11951 deger: deger, 11952 inStock: !isSoldOut 11953 }); 11954 }); 11955 } else { 11956 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 11957 var select = li.querySelector('select'); 11958 if(select){ 11959 var opts = select.querySelectorAll('option'); 11960 opts.forEach(function(o){ 11961 if(!o.value) return; 11962 values.push({ 11963 deger: o.value, 11964 inStock: !o.disabled 11965 }); 11966 }); 11967 } 11968 } 11969 11970 variants.push({ 11971 index: idx, 11972 baslik: name, 11973 values: values 11974 }); 11975 }); 11976 11977 var result = { variants: variants }; 11978 window.__luxVariantCache[productId] = result; 11979 callback(result); 11980 }) 11981 .catch(function(err){ 11982 console.error('Varyant çekme hatası:', err); 11983 callback({ variants: [], error: 'fetch_failed' }); 11984 }); 11985 } 11986 11987 11988 /* ============================================ 11989 Beden Åeridini ve gizli variant-box'ı oluÅtur 11990 ============================================ */ 11991 function buildVariantUI(productId, data){ 11992 var card = document.getElementById('card-' + productId); 11993 if(!card) return false; 11994 11995 var holder = card.querySelector('.lux-variant-box'); 11996 var strip = document.getElementById('size-strip-' + productId); 11997 if(!holder || !strip) return false; 11998 11999 if(!data.variants || data.variants.length === 0){ 12000 /* Varyant yok */ 12001 return false; 12002 } 12003 12004 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 12005 var displayVariant = null;
12006 data.variants.forEach(function(v){ 12007 if(!displayVariant && v.values.length > 1){ 12008 displayVariant = v; 12009 } 12010 }); 12011 12012 /* Gizli variant-box HTML */ 12013 var html = '<div class="variant-box"><ul>'; 12014 data.variants.forEach(function(v){ 12015 html += '<li class="variant">'; 12016 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 12017 12018 if(v.values.length > 1){ 12019 html += '<option value="">Lütfen seçin</option>'; 12020 } 12021 12022 v.values.forEach(function(val, i){ 12023 var selected = (v.values.length === 1) ? ' selected' : ''; 12024 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 12025 }); 12026 12027 html += '</select></li>'; 12028 }); 12029 html += '</ul></div>'; 12030 12031 holder.innerHTML = html; 12032 holder.style.display = ''; 12033 12034 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 12035 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 12036 if(displayVariant){ 12037 var stripHtml = ''; 12038 var inStockCount = 0; 12039 12040 /* DEBUG - console'da gör */ 12041 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 12042 12043 displayVariant.values.forEach(function(val){ 12044 /* SADECE stokta olanları ekle */ 12045 if(val.inStock === true){ 12046 stripHtml += '<div class="size-item" ' 12047 + 'data-urun-id="' + productId + '" ' 12048 + 'data-varyant-deger="' + val.deger + '" ' 12049 + 'onclick="return luxAddVariant(event, this);">' 12050 + val.deger + '</div>'; 12051 inStockCount++; 12052 } 12053 }); 12054 12055 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 12056 if(inStockCount === 0){ 12057 strip.setAttribute('data-loaded', '1'); 12058 strip.setAttribute('data-has-variants', '0'); 12059 return false; 12060 } 12061
12062 strip.innerHTML = stripHtml; 12063 strip.setAttribute('data-loaded', '1'); 12064 strip.setAttribute('data-has-variants', '1'); 12065 return true; 12066 } else { 12067 strip.setAttribute('data-loaded', '1'); 12068 strip.setAttribute('data-has-variants', '0'); 12069 return false; 12070 } 12071 } 12072 12073 12074 /* ============================================ 12075 SEPET IKONU TIKLAMASI 12076 ============================================ */ 12077 window.luxBagClick = function(ev, productId){ 12078 ev.preventDefault(); 12079 ev.stopPropagation(); 12080 12081 var card = document.getElementById('card-' + productId); 12082 var strip = document.getElementById('size-strip-' + productId); 12083 var bag = document.getElementById('lux-bag-' + productId); 12084 if(!card || !strip) return false; 12085 12086 /* Strip zaten yüklenmiÅse direkt davran */ 12087 if(strip.getAttribute('data-loaded') === '1'){ 12088 if(strip.getAttribute('data-has-variants') === '1'){ 12089 toggleStrip(productId); 12090 } else { 12091 addToCartSmart(productId); 12092 } 12093 return false; 12094 } 12095 12096 /* İlk tıklama - AJAX ile varyantları çek */ 12097 bag.classList.add('is-loading'); 12098 var productLink = card.getAttribute('data-lux-product-link'); 12099 12100 fetchVariants(productId, productLink, function(data){ 12101 bag.classList.remove('is-loading'); 12102 12103 var hasVariants = buildVariantUI(productId, data); 12104 12105 if(hasVariants){ 12106 /* Bedenler var - Åeridi aç */ 12107 toggleStrip(productId); 12108 } else { 12109 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 12110 addToCartSmart(productId); 12111 } 12112 }); 12113 12114 return false; 12115 }; 12116 12117 function toggleStrip(productId){ 12118 var strip = document.getElementById('size-strip-' + productId); 12119 var card = document.getElementById('card-' + productId); 12120 if(!strip) return; 12121 12122 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12123 if(s !== strip) s.classList.remove('open'); 12124 }); 12125 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12126 if(c !== card) c.classList.remove('sizes-open'); 12127 }); 12128 12129 strip.classList.toggle('open'); 12130 if(card) card.classList.toggle('sizes-open'); 12131 } 12132 12133 12134 /* ============================================ 12135 BEDEN TIKLAMASI 12136 ============================================ */ 12137 window.luxAddVariant = function(ev, elem){ 12138 ev.preventDefault(); 12139 ev.stopPropagation(); 12140 12141 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 12142 12143 var productId = elem.getAttribute('data-urun-id'); 12144 var varyantDeger = elem.getAttribute('data-varyant-deger'); 12145 12146 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12147 if(!holder) return false; 12148 12149 /* Seçilen bedeni ilk select'e yaz */ 12150 var firstSelect = holder.querySelector('select[data-variant="0"]'); 12151 if(firstSelect){ 12152 firstSelect.value = varyantDeger; 12153 if(typeof jQuery !== "undefined"){ 12154 jQuery(firstSelect).val(varyantDeger).trigger('change'); 12155 } 12156 } 12157 12158 /* DiÄer select'lere ilk geçerli deÄeri koy */ 12159 var allSelects = holder.querySelectorAll('select[data-variant]'); 12160 allSelects.forEach(function(sel, idx){ 12161 if(idx === 0) return; 12162 if(sel.value) return; 12163 var options = sel.querySelectorAll('option'); 12164 for(var i = 0; i < options.length; i++){ 12165 if(options[i].value){ 12166 sel.value = options[i].value; 12167 if(typeof jQuery !== "undefined"){ 12168 jQuery(sel).val(options[i].value).trigger('change'); 12169 } 12170 break; 12171 } 12172 } 12173 }); 12174 12175 /* Görsel feedback */ 12176 elem.classList.add('adding'); 12177 var originalText = elem.textContent; 12178 elem.textContent = 'â'; 12179 12180 /* Sepete ekle */ 12181 addToCartSmart(productId, { 12182 checkVariant: true, 12183 variantCount: allSelects.length, 12184 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 12185 }); 12186 12187 setTimeout(function(){ 12188 elem.textContent = originalText; 12189 elem.classList.remove('adding'); 12190 closeAll(); 12191 }, 800); 12192 12193 return false; 12194 }; 12195 12196 12197 /* ============================================ 12198 SEPETE EKLE - Modal killer ile 12199 ============================================ */ 12200 function addToCartSmart(productId, extraOptions){ 12201 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12202 12203 var options = { 12204 quantity: 1, 12205 hideNativeModal: 'lux-card-' + productId 12206 }; 12207 12208 if(extraOptions){
12209 Object.keys(extraOptions).forEach(function(k){ 12210 options[k] = extraOptions[k]; 12211 }); 12212 } else if(holder){ 12213 var selects = holder.querySelectorAll('select[data-variant]'); 12214 if(selects.length > 0){ 12215 options.checkVariant = true; 12216 options.variantCount = selects.length; 12217 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 12218 } 12219 } 12220 12221 startModalKill(2000); 12222 12223 if(typeof addCart === "function"){ 12224 try { 12225 addCart(productId, 'card', options); 12226 flashSuccess(productId); 12227 } catch(err){ 12228 console.error('Sepete ekleme hatası:', err); 12229 } 12230 } 12231 } 12232 12233})(); 12234</script>
12234</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 12235 data-lux-product-shell="1" 12236 data-lux-page="1"><style> 12237@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 12238 12239/* ===== VEZZA LUX CARD ===== */ 12240.card-product{ 12241 font-family:'Poppins',sans-serif; 12242 background:#fff !important; 12243 position:relative; 12244} 12245.card-product-inner{ 12246 background:transparent !important; 12247 position:relative; 12248} 12249.card-product .c-p-i-link, 12250.card-product a{ 12251 background:transparent !important; 12252} 12253.card-product-inner > div{ 12254 background:transparent !important; 12255} 12256.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 12257 background:transparent !important; 12258} 12259.card-product .card-product-content, 12260.card-product .price-group, 12261.card-product .prices{ 12262 background:transparent !important; 12263} 12264[class*="skeleton"], 12265[class*="placeholder"], 12266[class*="loading"]{ 12267 background:transparent !important; 12268} 12269 12270/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 12271.image-wrapper{ 12272 position:relative; 12273 width:100%; 12274 aspect-ratio:1/1; 12275 overflow:hidden; 12276 background:#fff !important; 12277} 12278 12279.image{ 12280 position:relative; 12281 width:100%; 12282 height:100%; 12283} 12284 12285.image-wrapper img{ 12286 width:100% !important; 12287 height:100% !important; 12288 object-fit:cover !important; 12289 object-position:center center !important; 12290 display:block; 12291 transition:transform .35s ease; 12292} 12293 12294/* ===== DISCOUNT ===== */ 12295.discount{ 12296 position:absolute; 12297 top:12px; 12298 left:12px; 12299 width:28px; 12300 height:48px; 12301 background:#e10b0b; 12302 color:#fff; 12303 font-size:12px; 12304 font-weight:600; 12305 display:flex; 12306 align-items:center; 12307 justify-content:center; 12308 writing-mode:vertical-rl; 12309 transform:rotate(180deg); 12310 letter-spacing:.5px; 12311 z-index:7; 12312} 12313 12314/* ===== FAV ===== */ 12315.lux-fav{ 12316 position:absolute; 12317 top:12px; 12318 right:12px; 12319 z-index:7; 12320} 12321.lux-fav a, 12322.lux-fav button{ 12323 background:transparent !important; 12324 border:0 !important; 12325 padding:0 !important; 12326 cursor:pointer; 12327 display:inline-flex; 12328 align-items:center; 12329 justify-content:center; 12330} 12331 12332/* ===== SEPET IKON ===== */ 12333.lux-bag{ 12334 position:absolute; 12335 bottom:12px; 12336 right:12px; 12337 z-index:7; 12338 width:34px; 12339 height:34px; 12340 display:inline-flex; 12341 align-items:center; 12342 justify-content:center; 12343 background:rgba(255,255,255,.92); 12344 border:1px solid rgba(0,0,0,.10); 12345 border-radius:10px; 12346 cursor:pointer; 12347 transition:.2s ease; 12348} 12349.lux-bag:hover{ 12350 background:#fff; 12351 border-color:rgba(0,0,0,.25); 12352} 12353.lux-bag.is-loading{ 12354 opacity:.6; 12355 cursor:wait; 12356} 12357.lux-bag.is-success{ 12358 background:#2e7d32 !important; 12359 border-color:#2e7d32 !important; 12360 color:#fff !important; 12361} 12362.card-product.sizes-open .lux-bag{ 12363 opacity:0; 12364 pointer-events:none; 12365} 12366 12367/* Loading spinner */ 12368.lux-bag.is-loading i::before{ 12369 content:"â³"; 12370} 12371 12372/* ===== SIZE STRIP ===== */ 12373.size-strip{ 12374 width:100%; 12375 max-height:0; 12376 overflow:hidden; 12377 background:#fff; 12378 display:flex; 12379 flex-wrap:wrap; 12380 transition:max-height .3s ease, border-color .3s ease; 12381 border-top:1px solid transparent; 12382 border-bottom:1px solid transparent; 12383} 12384.size-strip.open{ 12385 max-height:200px; 12386 border-top-color:rgba(0,0,0,.08); 12387 border-bottom-color:rgba(0,0,0,.08); 12388} 12389.size-item{ 12390 flex:1 0 auto; 12391 min-width:38px; 12392 height:42px; 12393 display:flex; 12394 align-items:center; 12395 justify-content:center; 12396 font-size:13px; 12397 font-weight:500; 12398 color:#111 !important; 12399 cursor:pointer; 12400 user-select:none; 12401 background:transparent; 12402 transition:background .15s ease, color .15s ease; 12403 border-right:1px solid rgba(0,0,0,.08); 12404} 12405.size-item:last-child{ border-right:0; } 12406.size-item:hover:not(.disabled):not(.adding){ 12407 background:#000 !important; 12408 color:#fff !important; 12409} 12410.size-item.disabled{ 12411 color:#111 !important; 12412 text-decoration:line-through !important; 12413 opacity:.30 !important; 12414 cursor:not-allowed; 12415} 12416.size-item.adding{ 12417 background:#2e7d32 !important; 12418 color:#fff !important; 12419 cursor:wait; 12420} 12421 12422/* ===== META ===== */ 12423.lux-meta{ 12424 padding:12px 6px 6px; 12425 background:transparent !important; 12426} 12427.lux-brand{ 12428 font-size:16px; 12429 font-weight:600; 12430 color:#111; 12431 margin-bottom:2px; 12432} 12433.lux-title{ 12434 font-size:14px; 12435 font-weight:400; 12436 line-height:1.45; 12437 color:#111; 12438 margin:0; 12439} 12440.lux-price{ 12441 margin-top:10px; 12442 display:flex; 12443 gap:10px; 12444 align-items:baseline; 12445 background:transparent !important; 12446} 12447.lux-price .list-price{ 12448 font-size:14px; 12449 font-weight:400; 12450 color:#111; 12451 text-decoration:line-through; 12452} 12453.lux-price .sale-price{ 12454 font-size:16px; 12455 font-weight:600; 12456 color:#e10b0b; 12457} 12458 12459.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
12460.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 12461</style><div class="card-product" 12462 id="card-10177" 12463 data-lux-card-id="10177" 12464 data-lux-product-link="https://www.vezzalux.com/amiri-823-siyah-erkek-ayakkabi" 12465 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/amiri-823-siyah-erkek-ayakkabi" class="c-p-i-link" title="Amiri 823 Siyah Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c75766362-24212613-sw1200sh1200.webp" alt="Amiri 823 Siyah Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c75766362-24212613-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c755c0cc8-61953316-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 12466 onclick="userProductFavourite('add', 10177)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 12467 id="lux-bag-10177" 12468 onclick="return luxBagClick(event, 10177);" 12469 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10177" style="display:none;"></div><div class="size-strip" id="size-strip-10177" data-loaded="0"></div><a href="https://www.vezzalux.com/amiri-823-siyah-erkek-ayakkabi" class="c-p-i-link" title="Amiri 823 Siyah Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Amiri</div><div class="lux-title">Amiri 823 Siyah Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
12469<script> 12470(function(){ 12471 12472 /* Bir kez kur */ 12473 if(window.__luxCardInit) return; 12474 window.__luxCardInit = true; 12475 12476 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 12477 window.__luxVariantCache = window.__luxVariantCache || {}; 12478 12479 function closeAll(){ 12480 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12481 s.classList.remove('open'); 12482 }); 12483 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12484 c.classList.remove('sizes-open'); 12485 }); 12486 } 12487 12488 function flashSuccess(productId){ 12489 var bag = document.getElementById('lux-bag-' + productId); 12490 if(!bag) return; 12491 bag.classList.add('is-success'); 12492 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 12493 } 12494 12495 /* DıŠtıklama - kapat */ 12496 document.addEventListener('click', function(e){ 12497 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 12498 if(!inside) closeAll(); 12499 }); 12500 12501 document.addEventListener('keydown', function(e){ 12502 if(e.key === 'Escape') closeAll(); 12503 }); 12504 12505 12506 /* ============================================ 12507 MODAL KILLER - yedek güvence 12508 ============================================ */ 12509 var LUX_MODAL_KILL_ACTIVE = false; 12510 12511 function killVisibleModals(){ 12512 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 12513 modals.forEach(function(m){ 12514 var id = (m.id || '').toLowerCase(); 12515 var txt = (m.textContent || '').toLowerCase(); 12516 var isCartModal = id.indexOf('cart') > -1 12517 || id.indexOf('variant') > -1 12518 || id.indexOf('fast') > -1 12519 || id.indexOf('urun') > -1 12520 || txt.indexOf('lütfen seçin') > -1; 12521 12522 if(isCartModal){ 12523 if(typeof jQuery !== 'undefined'){ 12524 try { jQuery(m).modal('hide'); } catch(e){} 12525 } 12526 m.classList.remove('show','in'); 12527 m.style.display = 'none'; 12528 } 12529 }); 12530 12531 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 12532 document.body.classList.remove('modal-open'); 12533 document.body.style.overflow = ''; 12534 document.body.style.paddingRight = ''; 12535 } 12536 12537 function startModalKill(durationMs){ 12538 if(LUX_MODAL_KILL_ACTIVE) return; 12539 LUX_MODAL_KILL_ACTIVE = true; 12540 killVisibleModals(); 12541 var interval = setInterval(killVisibleModals, 50); 12542 setTimeout(function(){ 12543 clearInterval(interval); 12544 LUX_MODAL_KILL_ACTIVE = false; 12545 }, durationMs || 2000); 12546 } 12547 12548 12549 /* ============================================ 12550 AJAX: Varyantları detay sayfasından çek 12551 ============================================ 12552 Ãrün detay sayfasının tam HTML'ini indir, 12553 DOMParser ile parse et, varyantları bul 12554 ============================================ */ 12555 function fetchVariants(productId, productLink, callback){ 12556 12557 /* Cache'te varsa hemen döndür */ 12558 if(window.__luxVariantCache[productId]){ 12559 callback(window.__luxVariantCache[productId]); 12560 return; 12561 } 12562 12563 fetch(productLink, { 12564 method: 'GET', 12565 credentials: 'same-origin', 12566 headers: { 'Accept': 'text/html' } 12567 }) 12568 .then(function(r){ return r.text(); }) 12569 .then(function(html){ 12570 var parser = new DOMParser(); 12571 var doc = parser.parseFromString(html, 'text/html'); 12572 12573 /* Detay sayfasındaki .variant-box'ı bul */ 12574 var variantBox = doc.querySelector('.variant-box'); 12575 if(!variantBox){ 12576 callback({ variants: [], error: 'no_variant_box' }); 12577 return; 12578 } 12579 12580 /* Her varyant grubu için select'leri ve option'ları oku */ 12581 var variants = []; 12582 var variantLis = variantBox.querySelectorAll('.variant'); 12583 12584 variantLis.forEach(function(li, idx){ 12585 var nameEl = li.querySelector('.name'); 12586 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 12587 12588 var values = []; 12589 12590 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 12591 var optLinks = li.querySelectorAll('.options a'); 12592 12593 if(optLinks.length > 0){ 12594 optLinks.forEach(function(a){ 12595 /* Beden/renk deÄerini doÄru attribute'tan oku
12596 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 12597 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 12598 - textContent: fallback */ 12599 var deger = a.getAttribute('data-variant-value') 12600 || a.textContent.trim(); 12601 12602 /* Stok kontrolü - birden fazla yoldan kontrol et */ 12603 var isSoldOut = a.classList.contains('sold-out') 12604 || a.classList.contains('sold_out') 12605 || a.classList.contains('disabled') 12606 || a.classList.contains('stoksuz') 12607 || a.classList.contains('out-of-stock') 12608 || a.hasAttribute('disabled') 12609 || a.getAttribute('data-in-stock') === '0' 12610 || a.getAttribute('data-in-stock') === 'false' 12611 || a.getAttribute('data-stokta-var-mi') === '0' 12612 || a.getAttribute('data-stokta-var-mi') === 'false'; 12613 12614 values.push({ 12615 deger: deger, 12616 inStock: !isSoldOut 12617 }); 12618 }); 12619 } else { 12620 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 12621 var select = li.querySelector('select'); 12622 if(select){ 12623 var opts = select.querySelectorAll('option'); 12624 opts.forEach(function(o){ 12625 if(!o.value) return; 12626 values.push({ 12627 deger: o.value, 12628 inStock: !o.disabled 12629 }); 12630 }); 12631 } 12632 } 12633 12634 variants.push({ 12635 index: idx, 12636 baslik: name, 12637 values: values 12638 }); 12639 }); 12640 12641 var result = { variants: variants }; 12642 window.__luxVariantCache[productId] = result; 12643 callback(result); 12644 }) 12645 .catch(function(err){ 12646 console.error('Varyant çekme hatası:', err); 12647 callback({ variants: [], error: 'fetch_failed' }); 12648 }); 12649 } 12650 12651 12652 /* ============================================ 12653 Beden Åeridini ve gizli variant-box'ı oluÅtur 12654 ============================================ */ 12655 function buildVariantUI(productId, data){ 12656 var card = document.getElementById('card-' + productId); 12657 if(!card) return false; 12658 12659 var holder = card.querySelector('.lux-variant-box'); 12660 var strip = document.getElementById('size-strip-' + productId); 12661 if(!holder || !strip) return false; 12662 12663 if(!data.variants || data.variants.length === 0){ 12664 /* Varyant yok */ 12665 return false; 12666 } 12667 12668 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 12669 var displayVariant = null;
12670 data.variants.forEach(function(v){ 12671 if(!displayVariant && v.values.length > 1){ 12672 displayVariant = v; 12673 } 12674 }); 12675 12676 /* Gizli variant-box HTML */ 12677 var html = '<div class="variant-box"><ul>'; 12678 data.variants.forEach(function(v){ 12679 html += '<li class="variant">'; 12680 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 12681 12682 if(v.values.length > 1){ 12683 html += '<option value="">Lütfen seçin</option>'; 12684 } 12685 12686 v.values.forEach(function(val, i){ 12687 var selected = (v.values.length === 1) ? ' selected' : ''; 12688 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 12689 }); 12690 12691 html += '</select></li>'; 12692 }); 12693 html += '</ul></div>'; 12694 12695 holder.innerHTML = html; 12696 holder.style.display = ''; 12697 12698 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 12699 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 12700 if(displayVariant){ 12701 var stripHtml = ''; 12702 var inStockCount = 0; 12703 12704 /* DEBUG - console'da gör */ 12705 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 12706 12707 displayVariant.values.forEach(function(val){ 12708 /* SADECE stokta olanları ekle */ 12709 if(val.inStock === true){ 12710 stripHtml += '<div class="size-item" ' 12711 + 'data-urun-id="' + productId + '" ' 12712 + 'data-varyant-deger="' + val.deger + '" ' 12713 + 'onclick="return luxAddVariant(event, this);">' 12714 + val.deger + '</div>'; 12715 inStockCount++; 12716 } 12717 }); 12718 12719 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 12720 if(inStockCount === 0){ 12721 strip.setAttribute('data-loaded', '1'); 12722 strip.setAttribute('data-has-variants', '0'); 12723 return false; 12724 } 12725
12726 strip.innerHTML = stripHtml; 12727 strip.setAttribute('data-loaded', '1'); 12728 strip.setAttribute('data-has-variants', '1'); 12729 return true; 12730 } else { 12731 strip.setAttribute('data-loaded', '1'); 12732 strip.setAttribute('data-has-variants', '0'); 12733 return false; 12734 } 12735 } 12736 12737 12738 /* ============================================ 12739 SEPET IKONU TIKLAMASI 12740 ============================================ */ 12741 window.luxBagClick = function(ev, productId){ 12742 ev.preventDefault(); 12743 ev.stopPropagation(); 12744 12745 var card = document.getElementById('card-' + productId); 12746 var strip = document.getElementById('size-strip-' + productId); 12747 var bag = document.getElementById('lux-bag-' + productId); 12748 if(!card || !strip) return false; 12749 12750 /* Strip zaten yüklenmiÅse direkt davran */ 12751 if(strip.getAttribute('data-loaded') === '1'){ 12752 if(strip.getAttribute('data-has-variants') === '1'){ 12753 toggleStrip(productId); 12754 } else { 12755 addToCartSmart(productId); 12756 } 12757 return false; 12758 } 12759 12760 /* İlk tıklama - AJAX ile varyantları çek */ 12761 bag.classList.add('is-loading'); 12762 var productLink = card.getAttribute('data-lux-product-link'); 12763 12764 fetchVariants(productId, productLink, function(data){ 12765 bag.classList.remove('is-loading'); 12766 12767 var hasVariants = buildVariantUI(productId, data); 12768 12769 if(hasVariants){ 12770 /* Bedenler var - Åeridi aç */ 12771 toggleStrip(productId); 12772 } else { 12773 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 12774 addToCartSmart(productId); 12775 } 12776 }); 12777 12778 return false; 12779 }; 12780 12781 function toggleStrip(productId){ 12782 var strip = document.getElementById('size-strip-' + productId); 12783 var card = document.getElementById('card-' + productId); 12784 if(!strip) return; 12785 12786 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12787 if(s !== strip) s.classList.remove('open'); 12788 }); 12789 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12790 if(c !== card) c.classList.remove('sizes-open'); 12791 }); 12792 12793 strip.classList.toggle('open'); 12794 if(card) card.classList.toggle('sizes-open'); 12795 } 12796 12797 12798 /* ============================================ 12799 BEDEN TIKLAMASI 12800 ============================================ */ 12801 window.luxAddVariant = function(ev, elem){ 12802 ev.preventDefault(); 12803 ev.stopPropagation(); 12804 12805 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 12806 12807 var productId = elem.getAttribute('data-urun-id'); 12808 var varyantDeger = elem.getAttribute('data-varyant-deger'); 12809 12810 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12811 if(!holder) return false; 12812 12813 /* Seçilen bedeni ilk select'e yaz */ 12814 var firstSelect = holder.querySelector('select[data-variant="0"]'); 12815 if(firstSelect){ 12816 firstSelect.value = varyantDeger; 12817 if(typeof jQuery !== "undefined"){ 12818 jQuery(firstSelect).val(varyantDeger).trigger('change'); 12819 } 12820 } 12821 12822 /* DiÄer select'lere ilk geçerli deÄeri koy */ 12823 var allSelects = holder.querySelectorAll('select[data-variant]'); 12824 allSelects.forEach(function(sel, idx){ 12825 if(idx === 0) return; 12826 if(sel.value) return; 12827 var options = sel.querySelectorAll('option'); 12828 for(var i = 0; i < options.length; i++){ 12829 if(options[i].value){ 12830 sel.value = options[i].value; 12831 if(typeof jQuery !== "undefined"){ 12832 jQuery(sel).val(options[i].value).trigger('change'); 12833 } 12834 break; 12835 } 12836 } 12837 }); 12838 12839 /* Görsel feedback */ 12840 elem.classList.add('adding'); 12841 var originalText = elem.textContent; 12842 elem.textContent = 'â'; 12843 12844 /* Sepete ekle */ 12845 addToCartSmart(productId, { 12846 checkVariant: true, 12847 variantCount: allSelects.length, 12848 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 12849 }); 12850 12851 setTimeout(function(){ 12852 elem.textContent = originalText; 12853 elem.classList.remove('adding'); 12854 closeAll(); 12855 }, 800); 12856 12857 return false; 12858 }; 12859 12860 12861 /* ============================================ 12862 SEPETE EKLE - Modal killer ile 12863 ============================================ */ 12864 function addToCartSmart(productId, extraOptions){ 12865 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12866 12867 var options = { 12868 quantity: 1, 12869 hideNativeModal: 'lux-card-' + productId 12870 }; 12871 12872 if(extraOptions){
12873 Object.keys(extraOptions).forEach(function(k){ 12874 options[k] = extraOptions[k]; 12875 }); 12876 } else if(holder){ 12877 var selects = holder.querySelectorAll('select[data-variant]'); 12878 if(selects.length > 0){ 12879 options.checkVariant = true; 12880 options.variantCount = selects.length; 12881 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 12882 } 12883 } 12884 12885 startModalKill(2000); 12886 12887 if(typeof addCart === "function"){ 12888 try { 12889 addCart(productId, 'card', options); 12890 flashSuccess(productId); 12891 } catch(err){ 12892 console.error('Sepete ekleme hatası:', err); 12893 } 12894 } 12895 } 12896 12897})(); 12898</script>
12898</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 12899 data-lux-product-shell="1" 12900 data-lux-page="1"><style> 12901@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 12902 12903/* ===== VEZZA LUX CARD ===== */ 12904.card-product{ 12905 font-family:'Poppins',sans-serif; 12906 background:#fff !important; 12907 position:relative; 12908} 12909.card-product-inner{ 12910 background:transparent !important; 12911 position:relative; 12912} 12913.card-product .c-p-i-link, 12914.card-product a{ 12915 background:transparent !important; 12916} 12917.card-product-inner > div{ 12918 background:transparent !important; 12919} 12920.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 12921 background:transparent !important; 12922} 12923.card-product .card-product-content, 12924.card-product .price-group, 12925.card-product .prices{ 12926 background:transparent !important; 12927} 12928[class*="skeleton"], 12929[class*="placeholder"], 12930[class*="loading"]{ 12931 background:transparent !important; 12932} 12933 12934/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 12935.image-wrapper{ 12936 position:relative; 12937 width:100%; 12938 aspect-ratio:1/1; 12939 overflow:hidden; 12940 background:#fff !important; 12941} 12942 12943.image{ 12944 position:relative; 12945 width:100%; 12946 height:100%; 12947} 12948 12949.image-wrapper img{ 12950 width:100% !important; 12951 height:100% !important; 12952 object-fit:cover !important; 12953 object-position:center center !important; 12954 display:block; 12955 transition:transform .35s ease; 12956} 12957 12958/* ===== DISCOUNT ===== */ 12959.discount{ 12960 position:absolute; 12961 top:12px; 12962 left:12px; 12963 width:28px; 12964 height:48px; 12965 background:#e10b0b; 12966 color:#fff; 12967 font-size:12px; 12968 font-weight:600; 12969 display:flex; 12970 align-items:center; 12971 justify-content:center; 12972 writing-mode:vertical-rl; 12973 transform:rotate(180deg); 12974 letter-spacing:.5px; 12975 z-index:7; 12976} 12977 12978/* ===== FAV ===== */ 12979.lux-fav{ 12980 position:absolute; 12981 top:12px; 12982 right:12px; 12983 z-index:7; 12984} 12985.lux-fav a, 12986.lux-fav button{ 12987 background:transparent !important; 12988 border:0 !important; 12989 padding:0 !important; 12990 cursor:pointer; 12991 display:inline-flex; 12992 align-items:center; 12993 justify-content:center; 12994} 12995 12996/* ===== SEPET IKON ===== */ 12997.lux-bag{ 12998 position:absolute; 12999 bottom:12px; 13000 right:12px; 13001 z-index:7; 13002 width:34px; 13003 height:34px; 13004 display:inline-flex; 13005 align-items:center; 13006 justify-content:center; 13007 background:rgba(255,255,255,.92); 13008 border:1px solid rgba(0,0,0,.10); 13009 border-radius:10px; 13010 cursor:pointer; 13011 transition:.2s ease; 13012} 13013.lux-bag:hover{ 13014 background:#fff; 13015 border-color:rgba(0,0,0,.25); 13016} 13017.lux-bag.is-loading{ 13018 opacity:.6; 13019 cursor:wait; 13020} 13021.lux-bag.is-success{ 13022 background:#2e7d32 !important; 13023 border-color:#2e7d32 !important; 13024 color:#fff !important; 13025} 13026.card-product.sizes-open .lux-bag{ 13027 opacity:0; 13028 pointer-events:none; 13029} 13030 13031/* Loading spinner */ 13032.lux-bag.is-loading i::before{ 13033 content:"â³"; 13034} 13035 13036/* ===== SIZE STRIP ===== */ 13037.size-strip{ 13038 width:100%; 13039 max-height:0; 13040 overflow:hidden; 13041 background:#fff; 13042 display:flex; 13043 flex-wrap:wrap; 13044 transition:max-height .3s ease, border-color .3s ease; 13045 border-top:1px solid transparent; 13046 border-bottom:1px solid transparent; 13047} 13048.size-strip.open{ 13049 max-height:200px; 13050 border-top-color:rgba(0,0,0,.08); 13051 border-bottom-color:rgba(0,0,0,.08); 13052} 13053.size-item{ 13054 flex:1 0 auto; 13055 min-width:38px; 13056 height:42px; 13057 display:flex; 13058 align-items:center; 13059 justify-content:center; 13060 font-size:13px; 13061 font-weight:500; 13062 color:#111 !important; 13063 cursor:pointer; 13064 user-select:none; 13065 background:transparent; 13066 transition:background .15s ease, color .15s ease; 13067 border-right:1px solid rgba(0,0,0,.08); 13068} 13069.size-item:last-child{ border-right:0; } 13070.size-item:hover:not(.disabled):not(.adding){ 13071 background:#000 !important; 13072 color:#fff !important; 13073} 13074.size-item.disabled{ 13075 color:#111 !important; 13076 text-decoration:line-through !important; 13077 opacity:.30 !important; 13078 cursor:not-allowed; 13079} 13080.size-item.adding{ 13081 background:#2e7d32 !important; 13082 color:#fff !important; 13083 cursor:wait; 13084} 13085 13086/* ===== META ===== */ 13087.lux-meta{ 13088 padding:12px 6px 6px; 13089 background:transparent !important; 13090} 13091.lux-brand{ 13092 font-size:16px; 13093 font-weight:600; 13094 color:#111; 13095 margin-bottom:2px; 13096} 13097.lux-title{ 13098 font-size:14px; 13099 font-weight:400; 13100 line-height:1.45; 13101 color:#111; 13102 margin:0; 13103} 13104.lux-price{ 13105 margin-top:10px; 13106 display:flex; 13107 gap:10px; 13108 align-items:baseline; 13109 background:transparent !important; 13110} 13111.lux-price .list-price{ 13112 font-size:14px; 13113 font-weight:400; 13114 color:#111; 13115 text-decoration:line-through; 13116} 13117.lux-price .sale-price{ 13118 font-size:16px; 13119 font-weight:600; 13120 color:#e10b0b; 13121} 13122 13123.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
13124.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 13125</style><div class="card-product" 13126 id="card-10273" 13127 data-lux-card-id="10273" 13128 data-lux-product-link="https://www.vezzalux.com/dior-943-siyah-logosu-kumas-erkek-ayakkabi" 13129 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/dior-943-siyah-logosu-kumas-erkek-ayakkabi" class="c-p-i-link" title="Dior 943 Siyah Logosu KumaŠErkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9ab32107-97240786-sw1200sh1200.webp" alt="Dior 943 Siyah Logosu KumaŠErkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9ab32107-97240786-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9ac9e0ad-62650519-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 13130 onclick="userProductFavourite('add', 10273)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 13131 id="lux-bag-10273" 13132 onclick="return luxBagClick(event, 10273);" 13133 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10273" style="display:none;"></div><div class="size-strip" id="size-strip-10273" data-loaded="0"></div><a href="https://www.vezzalux.com/dior-943-siyah-logosu-kumas-erkek-ayakkabi" class="c-p-i-link" title="Dior 943 Siyah Logosu KumaŠErkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dior</div><div class="lux-title">Dior 943 Siyah Logosu KumaŠErkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
13133<script> 13134(function(){ 13135 13136 /* Bir kez kur */ 13137 if(window.__luxCardInit) return; 13138 window.__luxCardInit = true; 13139 13140 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 13141 window.__luxVariantCache = window.__luxVariantCache || {}; 13142 13143 function closeAll(){ 13144 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13145 s.classList.remove('open'); 13146 }); 13147 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13148 c.classList.remove('sizes-open'); 13149 }); 13150 } 13151 13152 function flashSuccess(productId){ 13153 var bag = document.getElementById('lux-bag-' + productId); 13154 if(!bag) return; 13155 bag.classList.add('is-success'); 13156 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 13157 } 13158 13159 /* DıŠtıklama - kapat */ 13160 document.addEventListener('click', function(e){ 13161 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 13162 if(!inside) closeAll(); 13163 }); 13164 13165 document.addEventListener('keydown', function(e){ 13166 if(e.key === 'Escape') closeAll(); 13167 }); 13168 13169 13170 /* ============================================ 13171 MODAL KILLER - yedek güvence 13172 ============================================ */ 13173 var LUX_MODAL_KILL_ACTIVE = false; 13174 13175 function killVisibleModals(){ 13176 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 13177 modals.forEach(function(m){ 13178 var id = (m.id || '').toLowerCase(); 13179 var txt = (m.textContent || '').toLowerCase(); 13180 var isCartModal = id.indexOf('cart') > -1 13181 || id.indexOf('variant') > -1 13182 || id.indexOf('fast') > -1 13183 || id.indexOf('urun') > -1 13184 || txt.indexOf('lütfen seçin') > -1; 13185 13186 if(isCartModal){ 13187 if(typeof jQuery !== 'undefined'){ 13188 try { jQuery(m).modal('hide'); } catch(e){} 13189 } 13190 m.classList.remove('show','in'); 13191 m.style.display = 'none'; 13192 } 13193 }); 13194 13195 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 13196 document.body.classList.remove('modal-open'); 13197 document.body.style.overflow = ''; 13198 document.body.style.paddingRight = ''; 13199 } 13200 13201 function startModalKill(durationMs){ 13202 if(LUX_MODAL_KILL_ACTIVE) return; 13203 LUX_MODAL_KILL_ACTIVE = true; 13204 killVisibleModals(); 13205 var interval = setInterval(killVisibleModals, 50); 13206 setTimeout(function(){ 13207 clearInterval(interval); 13208 LUX_MODAL_KILL_ACTIVE = false; 13209 }, durationMs || 2000); 13210 } 13211 13212 13213 /* ============================================ 13214 AJAX: Varyantları detay sayfasından çek 13215 ============================================ 13216 Ãrün detay sayfasının tam HTML'ini indir, 13217 DOMParser ile parse et, varyantları bul 13218 ============================================ */ 13219 function fetchVariants(productId, productLink, callback){ 13220 13221 /* Cache'te varsa hemen döndür */ 13222 if(window.__luxVariantCache[productId]){ 13223 callback(window.__luxVariantCache[productId]); 13224 return; 13225 } 13226 13227 fetch(productLink, { 13228 method: 'GET', 13229 credentials: 'same-origin', 13230 headers: { 'Accept': 'text/html' } 13231 }) 13232 .then(function(r){ return r.text(); }) 13233 .then(function(html){ 13234 var parser = new DOMParser(); 13235 var doc = parser.parseFromString(html, 'text/html'); 13236 13237 /* Detay sayfasındaki .variant-box'ı bul */ 13238 var variantBox = doc.querySelector('.variant-box'); 13239 if(!variantBox){ 13240 callback({ variants: [], error: 'no_variant_box' }); 13241 return; 13242 } 13243 13244 /* Her varyant grubu için select'leri ve option'ları oku */ 13245 var variants = []; 13246 var variantLis = variantBox.querySelectorAll('.variant'); 13247 13248 variantLis.forEach(function(li, idx){ 13249 var nameEl = li.querySelector('.name'); 13250 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 13251 13252 var values = []; 13253 13254 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 13255 var optLinks = li.querySelectorAll('.options a'); 13256 13257 if(optLinks.length > 0){ 13258 optLinks.forEach(function(a){ 13259 /* Beden/renk deÄerini doÄru attribute'tan oku
13260 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 13261 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 13262 - textContent: fallback */ 13263 var deger = a.getAttribute('data-variant-value') 13264 || a.textContent.trim(); 13265 13266 /* Stok kontrolü - birden fazla yoldan kontrol et */ 13267 var isSoldOut = a.classList.contains('sold-out') 13268 || a.classList.contains('sold_out') 13269 || a.classList.contains('disabled') 13270 || a.classList.contains('stoksuz') 13271 || a.classList.contains('out-of-stock') 13272 || a.hasAttribute('disabled') 13273 || a.getAttribute('data-in-stock') === '0' 13274 || a.getAttribute('data-in-stock') === 'false' 13275 || a.getAttribute('data-stokta-var-mi') === '0' 13276 || a.getAttribute('data-stokta-var-mi') === 'false'; 13277 13278 values.push({ 13279 deger: deger, 13280 inStock: !isSoldOut 13281 }); 13282 }); 13283 } else { 13284 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 13285 var select = li.querySelector('select'); 13286 if(select){ 13287 var opts = select.querySelectorAll('option'); 13288 opts.forEach(function(o){ 13289 if(!o.value) return; 13290 values.push({ 13291 deger: o.value, 13292 inStock: !o.disabled 13293 }); 13294 }); 13295 } 13296 } 13297 13298 variants.push({ 13299 index: idx, 13300 baslik: name, 13301 values: values 13302 }); 13303 }); 13304 13305 var result = { variants: variants }; 13306 window.__luxVariantCache[productId] = result; 13307 callback(result); 13308 }) 13309 .catch(function(err){ 13310 console.error('Varyant çekme hatası:', err); 13311 callback({ variants: [], error: 'fetch_failed' }); 13312 }); 13313 } 13314 13315 13316 /* ============================================ 13317 Beden Åeridini ve gizli variant-box'ı oluÅtur 13318 ============================================ */ 13319 function buildVariantUI(productId, data){ 13320 var card = document.getElementById('card-' + productId); 13321 if(!card) return false; 13322 13323 var holder = card.querySelector('.lux-variant-box'); 13324 var strip = document.getElementById('size-strip-' + productId); 13325 if(!holder || !strip) return false; 13326 13327 if(!data.variants || data.variants.length === 0){ 13328 /* Varyant yok */ 13329 return false; 13330 } 13331 13332 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 13333 var displayVariant = null;
13334 data.variants.forEach(function(v){ 13335 if(!displayVariant && v.values.length > 1){ 13336 displayVariant = v; 13337 } 13338 }); 13339 13340 /* Gizli variant-box HTML */ 13341 var html = '<div class="variant-box"><ul>'; 13342 data.variants.forEach(function(v){ 13343 html += '<li class="variant">'; 13344 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 13345 13346 if(v.values.length > 1){ 13347 html += '<option value="">Lütfen seçin</option>'; 13348 } 13349 13350 v.values.forEach(function(val, i){ 13351 var selected = (v.values.length === 1) ? ' selected' : ''; 13352 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 13353 }); 13354 13355 html += '</select></li>'; 13356 }); 13357 html += '</ul></div>'; 13358 13359 holder.innerHTML = html; 13360 holder.style.display = ''; 13361 13362 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 13363 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 13364 if(displayVariant){ 13365 var stripHtml = ''; 13366 var inStockCount = 0; 13367 13368 /* DEBUG - console'da gör */ 13369 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 13370 13371 displayVariant.values.forEach(function(val){ 13372 /* SADECE stokta olanları ekle */ 13373 if(val.inStock === true){ 13374 stripHtml += '<div class="size-item" ' 13375 + 'data-urun-id="' + productId + '" ' 13376 + 'data-varyant-deger="' + val.deger + '" ' 13377 + 'onclick="return luxAddVariant(event, this);">' 13378 + val.deger + '</div>'; 13379 inStockCount++; 13380 } 13381 }); 13382 13383 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 13384 if(inStockCount === 0){ 13385 strip.setAttribute('data-loaded', '1'); 13386 strip.setAttribute('data-has-variants', '0'); 13387 return false; 13388 } 13389
13390 strip.innerHTML = stripHtml; 13391 strip.setAttribute('data-loaded', '1'); 13392 strip.setAttribute('data-has-variants', '1'); 13393 return true; 13394 } else { 13395 strip.setAttribute('data-loaded', '1'); 13396 strip.setAttribute('data-has-variants', '0'); 13397 return false; 13398 } 13399 } 13400 13401 13402 /* ============================================ 13403 SEPET IKONU TIKLAMASI 13404 ============================================ */ 13405 window.luxBagClick = function(ev, productId){ 13406 ev.preventDefault(); 13407 ev.stopPropagation(); 13408 13409 var card = document.getElementById('card-' + productId); 13410 var strip = document.getElementById('size-strip-' + productId); 13411 var bag = document.getElementById('lux-bag-' + productId); 13412 if(!card || !strip) return false; 13413 13414 /* Strip zaten yüklenmiÅse direkt davran */ 13415 if(strip.getAttribute('data-loaded') === '1'){ 13416 if(strip.getAttribute('data-has-variants') === '1'){ 13417 toggleStrip(productId); 13418 } else { 13419 addToCartSmart(productId); 13420 } 13421 return false; 13422 } 13423 13424 /* İlk tıklama - AJAX ile varyantları çek */ 13425 bag.classList.add('is-loading'); 13426 var productLink = card.getAttribute('data-lux-product-link'); 13427 13428 fetchVariants(productId, productLink, function(data){ 13429 bag.classList.remove('is-loading'); 13430 13431 var hasVariants = buildVariantUI(productId, data); 13432 13433 if(hasVariants){ 13434 /* Bedenler var - Åeridi aç */ 13435 toggleStrip(productId); 13436 } else { 13437 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 13438 addToCartSmart(productId); 13439 } 13440 }); 13441 13442 return false; 13443 }; 13444 13445 function toggleStrip(productId){ 13446 var strip = document.getElementById('size-strip-' + productId); 13447 var card = document.getElementById('card-' + productId); 13448 if(!strip) return; 13449 13450 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13451 if(s !== strip) s.classList.remove('open'); 13452 }); 13453 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13454 if(c !== card) c.classList.remove('sizes-open'); 13455 }); 13456 13457 strip.classList.toggle('open'); 13458 if(card) card.classList.toggle('sizes-open'); 13459 } 13460 13461 13462 /* ============================================ 13463 BEDEN TIKLAMASI 13464 ============================================ */ 13465 window.luxAddVariant = function(ev, elem){ 13466 ev.preventDefault(); 13467 ev.stopPropagation(); 13468 13469 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 13470 13471 var productId = elem.getAttribute('data-urun-id'); 13472 var varyantDeger = elem.getAttribute('data-varyant-deger'); 13473 13474 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 13475 if(!holder) return false; 13476 13477 /* Seçilen bedeni ilk select'e yaz */ 13478 var firstSelect = holder.querySelector('select[data-variant="0"]'); 13479 if(firstSelect){ 13480 firstSelect.value = varyantDeger; 13481 if(typeof jQuery !== "undefined"){ 13482 jQuery(firstSelect).val(varyantDeger).trigger('change'); 13483 } 13484 } 13485 13486 /* DiÄer select'lere ilk geçerli deÄeri koy */ 13487 var allSelects = holder.querySelectorAll('select[data-variant]'); 13488 allSelects.forEach(function(sel, idx){ 13489 if(idx === 0) return; 13490 if(sel.value) return; 13491 var options = sel.querySelectorAll('option'); 13492 for(var i = 0; i < options.length; i++){ 13493 if(options[i].value){ 13494 sel.value = options[i].value; 13495 if(typeof jQuery !== "undefined"){ 13496 jQuery(sel).val(options[i].value).trigger('change'); 13497 } 13498 break; 13499 } 13500 } 13501 }); 13502 13503 /* Görsel feedback */ 13504 elem.classList.add('adding'); 13505 var originalText = elem.textContent; 13506 elem.textContent = 'â'; 13507 13508 /* Sepete ekle */ 13509 addToCartSmart(productId, { 13510 checkVariant: true, 13511 variantCount: allSelects.length, 13512 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 13513 }); 13514 13515 setTimeout(function(){ 13516 elem.textContent = originalText; 13517 elem.classList.remove('adding'); 13518 closeAll(); 13519 }, 800); 13520 13521 return false; 13522 }; 13523 13524 13525 /* ============================================ 13526 SEPETE EKLE - Modal killer ile 13527 ============================================ */ 13528 function addToCartSmart(productId, extraOptions){ 13529 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 13530 13531 var options = { 13532 quantity: 1, 13533 hideNativeModal: 'lux-card-' + productId 13534 }; 13535 13536 if(extraOptions){
13537 Object.keys(extraOptions).forEach(function(k){ 13538 options[k] = extraOptions[k]; 13539 }); 13540 } else if(holder){ 13541 var selects = holder.querySelectorAll('select[data-variant]'); 13542 if(selects.length > 0){ 13543 options.checkVariant = true; 13544 options.variantCount = selects.length; 13545 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 13546 } 13547 } 13548 13549 startModalKill(2000); 13550 13551 if(typeof addCart === "function"){ 13552 try { 13553 addCart(productId, 'card', options); 13554 flashSuccess(productId); 13555 } catch(err){ 13556 console.error('Sepete ekleme hatası:', err); 13557 } 13558 } 13559 } 13560 13561})(); 13562</script>
13562</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 13563 data-lux-product-shell="1" 13564 data-lux-page="1"><style> 13565@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 13566 13567/* ===== VEZZA LUX CARD ===== */ 13568.card-product{ 13569 font-family:'Poppins',sans-serif; 13570 background:#fff !important; 13571 position:relative; 13572} 13573.card-product-inner{ 13574 background:transparent !important; 13575 position:relative; 13576} 13577.card-product .c-p-i-link, 13578.card-product a{ 13579 background:transparent !important; 13580} 13581.card-product-inner > div{ 13582 background:transparent !important; 13583} 13584.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 13585 background:transparent !important; 13586} 13587.card-product .card-product-content, 13588.card-product .price-group, 13589.card-product .prices{ 13590 background:transparent !important; 13591} 13592[class*="skeleton"], 13593[class*="placeholder"], 13594[class*="loading"]{ 13595 background:transparent !important; 13596} 13597 13598/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 13599.image-wrapper{ 13600 position:relative; 13601 width:100%; 13602 aspect-ratio:1/1; 13603 overflow:hidden; 13604 background:#fff !important; 13605} 13606 13607.image{ 13608 position:relative; 13609 width:100%; 13610 height:100%; 13611} 13612 13613.image-wrapper img{ 13614 width:100% !important; 13615 height:100% !important; 13616 object-fit:cover !important; 13617 object-position:center center !important; 13618 display:block; 13619 transition:transform .35s ease; 13620} 13621 13622/* ===== DISCOUNT ===== */ 13623.discount{ 13624 position:absolute; 13625 top:12px; 13626 left:12px; 13627 width:28px; 13628 height:48px; 13629 background:#e10b0b; 13630 color:#fff; 13631 font-size:12px; 13632 font-weight:600; 13633 display:flex; 13634 align-items:center; 13635 justify-content:center; 13636 writing-mode:vertical-rl; 13637 transform:rotate(180deg); 13638 letter-spacing:.5px; 13639 z-index:7; 13640} 13641 13642/* ===== FAV ===== */ 13643.lux-fav{ 13644 position:absolute; 13645 top:12px; 13646 right:12px; 13647 z-index:7; 13648} 13649.lux-fav a, 13650.lux-fav button{ 13651 background:transparent !important; 13652 border:0 !important; 13653 padding:0 !important; 13654 cursor:pointer; 13655 display:inline-flex; 13656 align-items:center; 13657 justify-content:center; 13658} 13659 13660/* ===== SEPET IKON ===== */ 13661.lux-bag{ 13662 position:absolute; 13663 bottom:12px; 13664 right:12px; 13665 z-index:7; 13666 width:34px; 13667 height:34px; 13668 display:inline-flex; 13669 align-items:center; 13670 justify-content:center; 13671 background:rgba(255,255,255,.92); 13672 border:1px solid rgba(0,0,0,.10); 13673 border-radius:10px; 13674 cursor:pointer; 13675 transition:.2s ease; 13676} 13677.lux-bag:hover{ 13678 background:#fff; 13679 border-color:rgba(0,0,0,.25); 13680} 13681.lux-bag.is-loading{ 13682 opacity:.6; 13683 cursor:wait; 13684} 13685.lux-bag.is-success{ 13686 background:#2e7d32 !important; 13687 border-color:#2e7d32 !important; 13688 color:#fff !important; 13689} 13690.card-product.sizes-open .lux-bag{ 13691 opacity:0; 13692 pointer-events:none; 13693} 13694 13695/* Loading spinner */ 13696.lux-bag.is-loading i::before{ 13697 content:"â³"; 13698} 13699 13700/* ===== SIZE STRIP ===== */ 13701.size-strip{ 13702 width:100%; 13703 max-height:0; 13704 overflow:hidden; 13705 background:#fff; 13706 display:flex; 13707 flex-wrap:wrap; 13708 transition:max-height .3s ease, border-color .3s ease; 13709 border-top:1px solid transparent; 13710 border-bottom:1px solid transparent; 13711} 13712.size-strip.open{ 13713 max-height:200px; 13714 border-top-color:rgba(0,0,0,.08); 13715 border-bottom-color:rgba(0,0,0,.08); 13716} 13717.size-item{ 13718 flex:1 0 auto; 13719 min-width:38px; 13720 height:42px; 13721 display:flex; 13722 align-items:center; 13723 justify-content:center; 13724 font-size:13px; 13725 font-weight:500; 13726 color:#111 !important; 13727 cursor:pointer; 13728 user-select:none; 13729 background:transparent; 13730 transition:background .15s ease, color .15s ease; 13731 border-right:1px solid rgba(0,0,0,.08); 13732} 13733.size-item:last-child{ border-right:0; } 13734.size-item:hover:not(.disabled):not(.adding){ 13735 background:#000 !important; 13736 color:#fff !important; 13737} 13738.size-item.disabled{ 13739 color:#111 !important; 13740 text-decoration:line-through !important; 13741 opacity:.30 !important; 13742 cursor:not-allowed; 13743} 13744.size-item.adding{ 13745 background:#2e7d32 !important; 13746 color:#fff !important; 13747 cursor:wait; 13748} 13749 13750/* ===== META ===== */ 13751.lux-meta{ 13752 padding:12px 6px 6px; 13753 background:transparent !important; 13754} 13755.lux-brand{ 13756 font-size:16px; 13757 font-weight:600; 13758 color:#111; 13759 margin-bottom:2px; 13760} 13761.lux-title{ 13762 font-size:14px; 13763 font-weight:400; 13764 line-height:1.45; 13765 color:#111; 13766 margin:0; 13767} 13768.lux-price{ 13769 margin-top:10px; 13770 display:flex; 13771 gap:10px; 13772 align-items:baseline; 13773 background:transparent !important; 13774} 13775.lux-price .list-price{ 13776 font-size:14px; 13777 font-weight:400; 13778 color:#111; 13779 text-decoration:line-through; 13780} 13781.lux-price .sale-price{ 13782 font-size:16px; 13783 font-weight:600; 13784 color:#e10b0b; 13785} 13786 13787.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
13788.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 13789</style><div class="card-product" 13790 id="card-10164" 13791 data-lux-card-id="10164" 13792 data-lux-product-link="https://www.vezzalux.com/gg-807-siyah-bogazli-beyaz-yildiz-erkek-ayakkabi" 13793 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%38</div><a href="https://www.vezzalux.com/gg-807-siyah-bogazli-beyaz-yildiz-erkek-ayakkabi" class="c-p-i-link" title="Gg 807 Siyah BoÄazlı Beyaz Yıldız Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c706a3143-60100938-sw1200sh1200.webp" alt="Gg 807 Siyah BoÄazlı Beyaz Yıldız Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c706a3143-60100938-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c70804450-88565336-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 13794 onclick="userProductFavourite('add', 10164)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 13795 id="lux-bag-10164" 13796 onclick="return luxBagClick(event, 10164);" 13797 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10164" style="display:none;"></div><div class="size-strip" id="size-strip-10164" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-807-siyah-bogazli-beyaz-yildiz-erkek-ayakkabi" class="c-p-i-link" title="Gg 807 Siyah BoÄazlı Beyaz Yıldız Er
13797kek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 807 Siyah BoÄazlı Beyaz Yıldız Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">10.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
13797<script> 13798(function(){ 13799 13800 /* Bir kez kur */ 13801 if(window.__luxCardInit) return; 13802 window.__luxCardInit = true; 13803 13804 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 13805 window.__luxVariantCache = window.__luxVariantCache || {}; 13806 13807 function closeAll(){ 13808 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13809 s.classList.remove('open'); 13810 }); 13811 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13812 c.classList.remove('sizes-open'); 13813 }); 13814 } 13815 13816 function flashSuccess(productId){ 13817 var bag = document.getElementById('lux-bag-' + productId); 13818 if(!bag) return; 13819 bag.classList.add('is-success'); 13820 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 13821 } 13822 13823 /* DıŠtıklama - kapat */ 13824 document.addEventListener('click', function(e){ 13825 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 13826 if(!inside) closeAll(); 13827 }); 13828 13829 document.addEventListener('keydown', function(e){ 13830 if(e.key === 'Escape') closeAll(); 13831 }); 13832 13833 13834 /* ============================================ 13835 MODAL KILLER - yedek güvence 13836 ============================================ */ 13837 var LUX_MODAL_KILL_ACTIVE = false; 13838 13839 function killVisibleModals(){ 13840 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 13841 modals.forEach(function(m){ 13842 var id = (m.id || '').toLowerCase(); 13843 var txt = (m.textContent || '').toLowerCase(); 13844 var isCartModal = id.indexOf('cart') > -1 13845 || id.indexOf('variant') > -1 13846 || id.indexOf('fast') > -1 13847 || id.indexOf('urun') > -1 13848 || txt.indexOf('lütfen seçin') > -1; 13849 13850 if(isCartModal){ 13851 if(typeof jQuery !== 'undefined'){ 13852 try { jQuery(m).modal('hide'); } catch(e){} 13853 } 13854 m.classList.remove('show','in'); 13855 m.style.display = 'none'; 13856 } 13857 }); 13858 13859 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 13860 document.body.classList.remove('modal-open'); 13861 document.body.style.overflow = ''; 13862 document.body.style.paddingRight = ''; 13863 } 13864 13865 function startModalKill(durationMs){ 13866 if(LUX_MODAL_KILL_ACTIVE) return; 13867 LUX_MODAL_KILL_ACTIVE = true; 13868 killVisibleModals(); 13869 var interval = setInterval(killVisibleModals, 50); 13870 setTimeout(function(){ 13871 clearInterval(interval); 13872 LUX_MODAL_KILL_ACTIVE = false; 13873 }, durationMs || 2000); 13874 } 13875 13876 13877 /* ============================================ 13878 AJAX: Varyantları detay sayfasından çek 13879 ============================================ 13880 Ãrün detay sayfasının tam HTML'ini indir, 13881 DOMParser ile parse et, varyantları bul 13882 ============================================ */ 13883 function fetchVariants(productId, productLink, callback){ 13884 13885 /* Cache'te varsa hemen döndür */ 13886 if(window.__luxVariantCache[productId]){ 13887 callback(window.__luxVariantCache[productId]); 13888 return; 13889 } 13890 13891 fetch(productLink, { 13892 method: 'GET', 13893 credentials: 'same-origin', 13894 headers: { 'Accept': 'text/html' } 13895 }) 13896 .then(function(r){ return r.text(); }) 13897 .then(function(html){ 13898 var parser = new DOMParser(); 13899 var doc = parser.parseFromString(html, 'text/html'); 13900 13901 /* Detay sayfasındaki .variant-box'ı bul */ 13902 var variantBox = doc.querySelector('.variant-box'); 13903 if(!variantBox){ 13904 callback({ variants: [], error: 'no_variant_box' }); 13905 return; 13906 } 13907 13908 /* Her varyant grubu için select'leri ve option'ları oku */ 13909 var variants = []; 13910 var variantLis = variantBox.querySelectorAll('.variant'); 13911 13912 variantLis.forEach(function(li, idx){ 13913 var nameEl = li.querySelector('.name'); 13914 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 13915 13916 var values = []; 13917 13918 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 13919 var optLinks = li.querySelectorAll('.options a'); 13920 13921 if(optLinks.length > 0){ 13922 optLinks.forEach(function(a){ 13923 /* Beden/renk deÄerini doÄru attribute'tan oku
13924 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 13925 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 13926 - textContent: fallback */ 13927 var deger = a.getAttribute('data-variant-value') 13928 || a.textContent.trim(); 13929 13930 /* Stok kontrolü - birden fazla yoldan kontrol et */ 13931 var isSoldOut = a.classList.contains('sold-out') 13932 || a.classList.contains('sold_out') 13933 || a.classList.contains('disabled') 13934 || a.classList.contains('stoksuz') 13935 || a.classList.contains('out-of-stock') 13936 || a.hasAttribute('disabled') 13937 || a.getAttribute('data-in-stock') === '0' 13938 || a.getAttribute('data-in-stock') === 'false' 13939 || a.getAttribute('data-stokta-var-mi') === '0' 13940 || a.getAttribute('data-stokta-var-mi') === 'false'; 13941 13942 values.push({ 13943 deger: deger, 13944 inStock: !isSoldOut 13945 }); 13946 }); 13947 } else { 13948 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 13949 var select = li.querySelector('select'); 13950 if(select){ 13951 var opts = select.querySelectorAll('option'); 13952 opts.forEach(function(o){ 13953 if(!o.value) return; 13954 values.push({ 13955 deger: o.value, 13956 inStock: !o.disabled 13957 }); 13958 }); 13959 } 13960 } 13961 13962 variants.push({ 13963 index: idx, 13964 baslik: name, 13965 values: values 13966 }); 13967 }); 13968 13969 var result = { variants: variants }; 13970 window.__luxVariantCache[productId] = result; 13971 callback(result); 13972 }) 13973 .catch(function(err){ 13974 console.error('Varyant çekme hatası:', err); 13975 callback({ variants: [], error: 'fetch_failed' }); 13976 }); 13977 } 13978 13979 13980 /* ============================================ 13981 Beden Åeridini ve gizli variant-box'ı oluÅtur 13982 ============================================ */ 13983 function buildVariantUI(productId, data){ 13984 var card = document.getElementById('card-' + productId); 13985 if(!card) return false; 13986 13987 var holder = card.querySelector('.lux-variant-box'); 13988 var strip = document.getElementById('size-strip-' + productId); 13989 if(!holder || !strip) return false; 13990 13991 if(!data.variants || data.variants.length === 0){ 13992 /* Varyant yok */ 13993 return false; 13994 } 13995 13996 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 13997 var displayVariant = null;
13998 data.variants.forEach(function(v){ 13999 if(!displayVariant && v.values.length > 1){ 14000 displayVariant = v; 14001 } 14002 }); 14003 14004 /* Gizli variant-box HTML */ 14005 var html = '<div class="variant-box"><ul>'; 14006 data.variants.forEach(function(v){ 14007 html += '<li class="variant">'; 14008 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 14009 14010 if(v.values.length > 1){ 14011 html += '<option value="">Lütfen seçin</option>'; 14012 } 14013 14014 v.values.forEach(function(val, i){ 14015 var selected = (v.values.length === 1) ? ' selected' : ''; 14016 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 14017 }); 14018 14019 html += '</select></li>'; 14020 }); 14021 html += '</ul></div>'; 14022 14023 holder.innerHTML = html; 14024 holder.style.display = ''; 14025 14026 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 14027 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 14028 if(displayVariant){ 14029 var stripHtml = ''; 14030 var inStockCount = 0; 14031 14032 /* DEBUG - console'da gör */ 14033 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 14034 14035 displayVariant.values.forEach(function(val){ 14036 /* SADECE stokta olanları ekle */ 14037 if(val.inStock === true){ 14038 stripHtml += '<div class="size-item" ' 14039 + 'data-urun-id="' + productId + '" ' 14040 + 'data-varyant-deger="' + val.deger + '" ' 14041 + 'onclick="return luxAddVariant(event, this);">' 14042 + val.deger + '</div>'; 14043 inStockCount++; 14044 } 14045 }); 14046 14047 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 14048 if(inStockCount === 0){ 14049 strip.setAttribute('data-loaded', '1'); 14050 strip.setAttribute('data-has-variants', '0'); 14051 return false; 14052 } 14053
14054 strip.innerHTML = stripHtml; 14055 strip.setAttribute('data-loaded', '1'); 14056 strip.setAttribute('data-has-variants', '1'); 14057 return true; 14058 } else { 14059 strip.setAttribute('data-loaded', '1'); 14060 strip.setAttribute('data-has-variants', '0'); 14061 return false; 14062 } 14063 } 14064 14065 14066 /* ============================================ 14067 SEPET IKONU TIKLAMASI 14068 ============================================ */ 14069 window.luxBagClick = function(ev, productId){ 14070 ev.preventDefault(); 14071 ev.stopPropagation(); 14072 14073 var card = document.getElementById('card-' + productId); 14074 var strip = document.getElementById('size-strip-' + productId); 14075 var bag = document.getElementById('lux-bag-' + productId); 14076 if(!card || !strip) return false; 14077 14078 /* Strip zaten yüklenmiÅse direkt davran */ 14079 if(strip.getAttribute('data-loaded') === '1'){ 14080 if(strip.getAttribute('data-has-variants') === '1'){ 14081 toggleStrip(productId); 14082 } else { 14083 addToCartSmart(productId); 14084 } 14085 return false; 14086 } 14087 14088 /* İlk tıklama - AJAX ile varyantları çek */ 14089 bag.classList.add('is-loading'); 14090 var productLink = card.getAttribute('data-lux-product-link'); 14091 14092 fetchVariants(productId, productLink, function(data){ 14093 bag.classList.remove('is-loading'); 14094 14095 var hasVariants = buildVariantUI(productId, data); 14096 14097 if(hasVariants){ 14098 /* Bedenler var - Åeridi aç */ 14099 toggleStrip(productId); 14100 } else { 14101 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 14102 addToCartSmart(productId); 14103 } 14104 }); 14105 14106 return false; 14107 }; 14108 14109 function toggleStrip(productId){ 14110 var strip = document.getElementById('size-strip-' + productId); 14111 var card = document.getElementById('card-' + productId); 14112 if(!strip) return; 14113 14114 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14115 if(s !== strip) s.classList.remove('open'); 14116 }); 14117 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14118 if(c !== card) c.classList.remove('sizes-open'); 14119 }); 14120 14121 strip.classList.toggle('open'); 14122 if(card) card.classList.toggle('sizes-open'); 14123 } 14124 14125 14126 /* ============================================ 14127 BEDEN TIKLAMASI 14128 ============================================ */ 14129 window.luxAddVariant = function(ev, elem){ 14130 ev.preventDefault(); 14131 ev.stopPropagation(); 14132 14133 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 14134 14135 var productId = elem.getAttribute('data-urun-id'); 14136 var varyantDeger = elem.getAttribute('data-varyant-deger'); 14137 14138 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14139 if(!holder) return false; 14140 14141 /* Seçilen bedeni ilk select'e yaz */ 14142 var firstSelect = holder.querySelector('select[data-variant="0"]'); 14143 if(firstSelect){ 14144 firstSelect.value = varyantDeger; 14145 if(typeof jQuery !== "undefined"){ 14146 jQuery(firstSelect).val(varyantDeger).trigger('change'); 14147 } 14148 } 14149 14150 /* DiÄer select'lere ilk geçerli deÄeri koy */ 14151 var allSelects = holder.querySelectorAll('select[data-variant]'); 14152 allSelects.forEach(function(sel, idx){ 14153 if(idx === 0) return; 14154 if(sel.value) return; 14155 var options = sel.querySelectorAll('option'); 14156 for(var i = 0; i < options.length; i++){ 14157 if(options[i].value){ 14158 sel.value = options[i].value; 14159 if(typeof jQuery !== "undefined"){ 14160 jQuery(sel).val(options[i].value).trigger('change'); 14161 } 14162 break; 14163 } 14164 } 14165 }); 14166 14167 /* Görsel feedback */ 14168 elem.classList.add('adding'); 14169 var originalText = elem.textContent; 14170 elem.textContent = 'â'; 14171 14172 /* Sepete ekle */ 14173 addToCartSmart(productId, { 14174 checkVariant: true, 14175 variantCount: allSelects.length, 14176 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 14177 }); 14178 14179 setTimeout(function(){ 14180 elem.textContent = originalText; 14181 elem.classList.remove('adding'); 14182 closeAll(); 14183 }, 800); 14184 14185 return false; 14186 }; 14187 14188 14189 /* ============================================ 14190 SEPETE EKLE - Modal killer ile 14191 ============================================ */ 14192 function addToCartSmart(productId, extraOptions){ 14193 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14194 14195 var options = { 14196 quantity: 1, 14197 hideNativeModal: 'lux-card-' + productId 14198 }; 14199 14200 if(extraOptions){
14201 Object.keys(extraOptions).forEach(function(k){ 14202 options[k] = extraOptions[k]; 14203 }); 14204 } else if(holder){ 14205 var selects = holder.querySelectorAll('select[data-variant]'); 14206 if(selects.length > 0){ 14207 options.checkVariant = true; 14208 options.variantCount = selects.length; 14209 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 14210 } 14211 } 14212 14213 startModalKill(2000); 14214 14215 if(typeof addCart === "function"){ 14216 try { 14217 addCart(productId, 'card', options); 14218 flashSuccess(productId); 14219 } catch(err){ 14220 console.error('Sepete ekleme hatası:', err); 14221 } 14222 } 14223 } 14224 14225})(); 14226</script>
14226</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 14227 data-lux-product-shell="1" 14228 data-lux-page="1"><style> 14229@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 14230 14231/* ===== VEZZA LUX CARD ===== */ 14232.card-product{ 14233 font-family:'Poppins',sans-serif; 14234 background:#fff !important; 14235 position:relative; 14236} 14237.card-product-inner{ 14238 background:transparent !important; 14239 position:relative; 14240} 14241.card-product .c-p-i-link, 14242.card-product a{ 14243 background:transparent !important; 14244} 14245.card-product-inner > div{ 14246 background:transparent !important; 14247} 14248.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 14249 background:transparent !important; 14250} 14251.card-product .card-product-content, 14252.card-product .price-group, 14253.card-product .prices{ 14254 background:transparent !important; 14255} 14256[class*="skeleton"], 14257[class*="placeholder"], 14258[class*="loading"]{ 14259 background:transparent !important; 14260} 14261 14262/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 14263.image-wrapper{ 14264 position:relative; 14265 width:100%; 14266 aspect-ratio:1/1; 14267 overflow:hidden; 14268 background:#fff !important; 14269} 14270 14271.image{ 14272 position:relative; 14273 width:100%; 14274 height:100%; 14275} 14276 14277.image-wrapper img{ 14278 width:100% !important; 14279 height:100% !important; 14280 object-fit:cover !important; 14281 object-position:center center !important; 14282 display:block; 14283 transition:transform .35s ease; 14284} 14285 14286/* ===== DISCOUNT ===== */ 14287.discount{ 14288 position:absolute; 14289 top:12px; 14290 left:12px; 14291 width:28px; 14292 height:48px; 14293 background:#e10b0b; 14294 color:#fff; 14295 font-size:12px; 14296 font-weight:600; 14297 display:flex; 14298 align-items:center; 14299 justify-content:center; 14300 writing-mode:vertical-rl; 14301 transform:rotate(180deg); 14302 letter-spacing:.5px; 14303 z-index:7; 14304} 14305 14306/* ===== FAV ===== */ 14307.lux-fav{ 14308 position:absolute; 14309 top:12px; 14310 right:12px; 14311 z-index:7; 14312} 14313.lux-fav a, 14314.lux-fav button{ 14315 background:transparent !important; 14316 border:0 !important; 14317 padding:0 !important; 14318 cursor:pointer; 14319 display:inline-flex; 14320 align-items:center; 14321 justify-content:center; 14322} 14323 14324/* ===== SEPET IKON ===== */ 14325.lux-bag{ 14326 position:absolute; 14327 bottom:12px; 14328 right:12px; 14329 z-index:7; 14330 width:34px; 14331 height:34px; 14332 display:inline-flex; 14333 align-items:center; 14334 justify-content:center; 14335 background:rgba(255,255,255,.92); 14336 border:1px solid rgba(0,0,0,.10); 14337 border-radius:10px; 14338 cursor:pointer; 14339 transition:.2s ease; 14340} 14341.lux-bag:hover{ 14342 background:#fff; 14343 border-color:rgba(0,0,0,.25); 14344} 14345.lux-bag.is-loading{ 14346 opacity:.6; 14347 cursor:wait; 14348} 14349.lux-bag.is-success{ 14350 background:#2e7d32 !important; 14351 border-color:#2e7d32 !important; 14352 color:#fff !important; 14353} 14354.card-product.sizes-open .lux-bag{ 14355 opacity:0; 14356 pointer-events:none; 14357} 14358 14359/* Loading spinner */ 14360.lux-bag.is-loading i::before{ 14361 content:"â³"; 14362} 14363 14364/* ===== SIZE STRIP ===== */ 14365.size-strip{ 14366 width:100%; 14367 max-height:0; 14368 overflow:hidden; 14369 background:#fff; 14370 display:flex; 14371 flex-wrap:wrap; 14372 transition:max-height .3s ease, border-color .3s ease; 14373 border-top:1px solid transparent; 14374 border-bottom:1px solid transparent; 14375} 14376.size-strip.open{ 14377 max-height:200px; 14378 border-top-color:rgba(0,0,0,.08); 14379 border-bottom-color:rgba(0,0,0,.08); 14380} 14381.size-item{ 14382 flex:1 0 auto; 14383 min-width:38px; 14384 height:42px; 14385 display:flex; 14386 align-items:center; 14387 justify-content:center; 14388 font-size:13px; 14389 font-weight:500; 14390 color:#111 !important; 14391 cursor:pointer; 14392 user-select:none; 14393 background:transparent; 14394 transition:background .15s ease, color .15s ease; 14395 border-right:1px solid rgba(0,0,0,.08); 14396} 14397.size-item:last-child{ border-right:0; } 14398.size-item:hover:not(.disabled):not(.adding){ 14399 background:#000 !important; 14400 color:#fff !important; 14401} 14402.size-item.disabled{ 14403 color:#111 !important; 14404 text-decoration:line-through !important; 14405 opacity:.30 !important; 14406 cursor:not-allowed; 14407} 14408.size-item.adding{ 14409 background:#2e7d32 !important; 14410 color:#fff !important; 14411 cursor:wait; 14412} 14413 14414/* ===== META ===== */ 14415.lux-meta{ 14416 padding:12px 6px 6px; 14417 background:transparent !important; 14418} 14419.lux-brand{ 14420 font-size:16px; 14421 font-weight:600; 14422 color:#111; 14423 margin-bottom:2px; 14424} 14425.lux-title{ 14426 font-size:14px; 14427 font-weight:400; 14428 line-height:1.45; 14429 color:#111; 14430 margin:0; 14431} 14432.lux-price{ 14433 margin-top:10px; 14434 display:flex; 14435 gap:10px; 14436 align-items:baseline; 14437 background:transparent !important; 14438} 14439.lux-price .list-price{ 14440 font-size:14px; 14441 font-weight:400; 14442 color:#111; 14443 text-decoration:line-through; 14444} 14445.lux-price .sale-price{ 14446 font-size:16px; 14447 font-weight:600; 14448 color:#e10b0b; 14449} 14450 14451.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
14452.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 14453</style><div class="card-product" 14454 id="card-10305" 14455 data-lux-card-id="10305" 14456 data-lux-product-link="https://www.vezzalux.com/mcq-982-ful-beyaz-arkasi-fermarli-erkek-ayakkabi" 14457 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/mcq-982-ful-beyaz-arkasi-fermarli-erkek-ayakkabi" class="c-p-i-link" title="Mcq 982 Ful Beyaz Arkası Fermarlı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca742ac42-13247058-sw1200sh1200.webp" alt="Mcq 982 Ful Beyaz Arkası Fermarlı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca742ac42-13247058-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca75adede-14406833-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 14458 onclick="userProductFavourite('add', 10305)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 14459 id="lux-bag-10305" 14460 onclick="return luxBagClick(event, 10305);" 14461 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10305" style="display:none;"></div><div class="size-strip" id="size-strip-10305" data-loaded="0"></div><a href="https://www.vezzalux.com/mcq-982-ful-beyaz-arkasi-fermarli-erkek-ayakkabi" class="c-p-i-link" title="Mcq 982 Ful Beyaz Arkası Fermarlı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Alexander Mcqueen</div><div class="lux-title">Mcq 982 Ful Beyaz Arkası Fermarlı Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
14461<script> 14462(function(){ 14463 14464 /* Bir kez kur */ 14465 if(window.__luxCardInit) return; 14466 window.__luxCardInit = true; 14467 14468 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 14469 window.__luxVariantCache = window.__luxVariantCache || {}; 14470 14471 function closeAll(){ 14472 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14473 s.classList.remove('open'); 14474 }); 14475 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14476 c.classList.remove('sizes-open'); 14477 }); 14478 } 14479 14480 function flashSuccess(productId){ 14481 var bag = document.getElementById('lux-bag-' + productId); 14482 if(!bag) return; 14483 bag.classList.add('is-success'); 14484 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 14485 } 14486 14487 /* DıŠtıklama - kapat */ 14488 document.addEventListener('click', function(e){ 14489 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 14490 if(!inside) closeAll(); 14491 }); 14492 14493 document.addEventListener('keydown', function(e){ 14494 if(e.key === 'Escape') closeAll(); 14495 }); 14496 14497 14498 /* ============================================ 14499 MODAL KILLER - yedek güvence 14500 ============================================ */ 14501 var LUX_MODAL_KILL_ACTIVE = false; 14502 14503 function killVisibleModals(){ 14504 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 14505 modals.forEach(function(m){ 14506 var id = (m.id || '').toLowerCase(); 14507 var txt = (m.textContent || '').toLowerCase(); 14508 var isCartModal = id.indexOf('cart') > -1 14509 || id.indexOf('variant') > -1 14510 || id.indexOf('fast') > -1 14511 || id.indexOf('urun') > -1 14512 || txt.indexOf('lütfen seçin') > -1; 14513 14514 if(isCartModal){ 14515 if(typeof jQuery !== 'undefined'){ 14516 try { jQuery(m).modal('hide'); } catch(e){} 14517 } 14518 m.classList.remove('show','in'); 14519 m.style.display = 'none'; 14520 } 14521 }); 14522 14523 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 14524 document.body.classList.remove('modal-open'); 14525 document.body.style.overflow = ''; 14526 document.body.style.paddingRight = ''; 14527 } 14528 14529 function startModalKill(durationMs){ 14530 if(LUX_MODAL_KILL_ACTIVE) return; 14531 LUX_MODAL_KILL_ACTIVE = true; 14532 killVisibleModals(); 14533 var interval = setInterval(killVisibleModals, 50); 14534 setTimeout(function(){ 14535 clearInterval(interval); 14536 LUX_MODAL_KILL_ACTIVE = false; 14537 }, durationMs || 2000); 14538 } 14539 14540 14541 /* ============================================ 14542 AJAX: Varyantları detay sayfasından çek 14543 ============================================ 14544 Ãrün detay sayfasının tam HTML'ini indir, 14545 DOMParser ile parse et, varyantları bul 14546 ============================================ */ 14547 function fetchVariants(productId, productLink, callback){ 14548 14549 /* Cache'te varsa hemen döndür */ 14550 if(window.__luxVariantCache[productId]){ 14551 callback(window.__luxVariantCache[productId]); 14552 return; 14553 } 14554 14555 fetch(productLink, { 14556 method: 'GET', 14557 credentials: 'same-origin', 14558 headers: { 'Accept': 'text/html' } 14559 }) 14560 .then(function(r){ return r.text(); }) 14561 .then(function(html){ 14562 var parser = new DOMParser(); 14563 var doc = parser.parseFromString(html, 'text/html'); 14564 14565 /* Detay sayfasındaki .variant-box'ı bul */ 14566 var variantBox = doc.querySelector('.variant-box'); 14567 if(!variantBox){ 14568 callback({ variants: [], error: 'no_variant_box' }); 14569 return; 14570 } 14571 14572 /* Her varyant grubu için select'leri ve option'ları oku */ 14573 var variants = []; 14574 var variantLis = variantBox.querySelectorAll('.variant'); 14575 14576 variantLis.forEach(function(li, idx){ 14577 var nameEl = li.querySelector('.name'); 14578 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 14579 14580 var values = []; 14581 14582 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 14583 var optLinks = li.querySelectorAll('.options a'); 14584 14585 if(optLinks.length > 0){ 14586 optLinks.forEach(function(a){ 14587 /* Beden/renk deÄerini doÄru attribute'tan oku
14588 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 14589 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 14590 - textContent: fallback */ 14591 var deger = a.getAttribute('data-variant-value') 14592 || a.textContent.trim(); 14593 14594 /* Stok kontrolü - birden fazla yoldan kontrol et */ 14595 var isSoldOut = a.classList.contains('sold-out') 14596 || a.classList.contains('sold_out') 14597 || a.classList.contains('disabled') 14598 || a.classList.contains('stoksuz') 14599 || a.classList.contains('out-of-stock') 14600 || a.hasAttribute('disabled') 14601 || a.getAttribute('data-in-stock') === '0' 14602 || a.getAttribute('data-in-stock') === 'false' 14603 || a.getAttribute('data-stokta-var-mi') === '0' 14604 || a.getAttribute('data-stokta-var-mi') === 'false'; 14605 14606 values.push({ 14607 deger: deger, 14608 inStock: !isSoldOut 14609 }); 14610 }); 14611 } else { 14612 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 14613 var select = li.querySelector('select'); 14614 if(select){ 14615 var opts = select.querySelectorAll('option'); 14616 opts.forEach(function(o){ 14617 if(!o.value) return; 14618 values.push({ 14619 deger: o.value, 14620 inStock: !o.disabled 14621 }); 14622 }); 14623 } 14624 } 14625 14626 variants.push({ 14627 index: idx, 14628 baslik: name, 14629 values: values 14630 }); 14631 }); 14632 14633 var result = { variants: variants }; 14634 window.__luxVariantCache[productId] = result; 14635 callback(result); 14636 }) 14637 .catch(function(err){ 14638 console.error('Varyant çekme hatası:', err); 14639 callback({ variants: [], error: 'fetch_failed' }); 14640 }); 14641 } 14642 14643 14644 /* ============================================ 14645 Beden Åeridini ve gizli variant-box'ı oluÅtur 14646 ============================================ */ 14647 function buildVariantUI(productId, data){ 14648 var card = document.getElementById('card-' + productId); 14649 if(!card) return false; 14650 14651 var holder = card.querySelector('.lux-variant-box'); 14652 var strip = document.getElementById('size-strip-' + productId); 14653 if(!holder || !strip) return false; 14654 14655 if(!data.variants || data.variants.length === 0){ 14656 /* Varyant yok */ 14657 return false; 14658 } 14659 14660 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 14661 var displayVariant = null;
14662 data.variants.forEach(function(v){ 14663 if(!displayVariant && v.values.length > 1){ 14664 displayVariant = v; 14665 } 14666 }); 14667 14668 /* Gizli variant-box HTML */ 14669 var html = '<div class="variant-box"><ul>'; 14670 data.variants.forEach(function(v){ 14671 html += '<li class="variant">'; 14672 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 14673 14674 if(v.values.length > 1){ 14675 html += '<option value="">Lütfen seçin</option>'; 14676 } 14677 14678 v.values.forEach(function(val, i){ 14679 var selected = (v.values.length === 1) ? ' selected' : ''; 14680 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 14681 }); 14682 14683 html += '</select></li>'; 14684 }); 14685 html += '</ul></div>'; 14686 14687 holder.innerHTML = html; 14688 holder.style.display = ''; 14689 14690 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 14691 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 14692 if(displayVariant){ 14693 var stripHtml = ''; 14694 var inStockCount = 0; 14695 14696 /* DEBUG - console'da gör */ 14697 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 14698 14699 displayVariant.values.forEach(function(val){ 14700 /* SADECE stokta olanları ekle */ 14701 if(val.inStock === true){ 14702 stripHtml += '<div class="size-item" ' 14703 + 'data-urun-id="' + productId + '" ' 14704 + 'data-varyant-deger="' + val.deger + '" ' 14705 + 'onclick="return luxAddVariant(event, this);">' 14706 + val.deger + '</div>'; 14707 inStockCount++; 14708 } 14709 }); 14710 14711 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 14712 if(inStockCount === 0){ 14713 strip.setAttribute('data-loaded', '1'); 14714 strip.setAttribute('data-has-variants', '0'); 14715 return false; 14716 } 14717
14718 strip.innerHTML = stripHtml; 14719 strip.setAttribute('data-loaded', '1'); 14720 strip.setAttribute('data-has-variants', '1'); 14721 return true; 14722 } else { 14723 strip.setAttribute('data-loaded', '1'); 14724 strip.setAttribute('data-has-variants', '0'); 14725 return false; 14726 } 14727 } 14728 14729 14730 /* ============================================ 14731 SEPET IKONU TIKLAMASI 14732 ============================================ */ 14733 window.luxBagClick = function(ev, productId){ 14734 ev.preventDefault(); 14735 ev.stopPropagation(); 14736 14737 var card = document.getElementById('card-' + productId); 14738 var strip = document.getElementById('size-strip-' + productId); 14739 var bag = document.getElementById('lux-bag-' + productId); 14740 if(!card || !strip) return false; 14741 14742 /* Strip zaten yüklenmiÅse direkt davran */ 14743 if(strip.getAttribute('data-loaded') === '1'){ 14744 if(strip.getAttribute('data-has-variants') === '1'){ 14745 toggleStrip(productId); 14746 } else { 14747 addToCartSmart(productId); 14748 } 14749 return false; 14750 } 14751 14752 /* İlk tıklama - AJAX ile varyantları çek */ 14753 bag.classList.add('is-loading'); 14754 var productLink = card.getAttribute('data-lux-product-link'); 14755 14756 fetchVariants(productId, productLink, function(data){ 14757 bag.classList.remove('is-loading'); 14758 14759 var hasVariants = buildVariantUI(productId, data); 14760 14761 if(hasVariants){ 14762 /* Bedenler var - Åeridi aç */ 14763 toggleStrip(productId); 14764 } else { 14765 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 14766 addToCartSmart(productId); 14767 } 14768 }); 14769 14770 return false; 14771 }; 14772 14773 function toggleStrip(productId){ 14774 var strip = document.getElementById('size-strip-' + productId); 14775 var card = document.getElementById('card-' + productId); 14776 if(!strip) return; 14777 14778 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14779 if(s !== strip) s.classList.remove('open'); 14780 }); 14781 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14782 if(c !== card) c.classList.remove('sizes-open'); 14783 }); 14784 14785 strip.classList.toggle('open'); 14786 if(card) card.classList.toggle('sizes-open'); 14787 } 14788 14789 14790 /* ============================================ 14791 BEDEN TIKLAMASI 14792 ============================================ */ 14793 window.luxAddVariant = function(ev, elem){ 14794 ev.preventDefault(); 14795 ev.stopPropagation(); 14796 14797 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 14798 14799 var productId = elem.getAttribute('data-urun-id'); 14800 var varyantDeger = elem.getAttribute('data-varyant-deger'); 14801 14802 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14803 if(!holder) return false; 14804 14805 /* Seçilen bedeni ilk select'e yaz */ 14806 var firstSelect = holder.querySelector('select[data-variant="0"]'); 14807 if(firstSelect){ 14808 firstSelect.value = varyantDeger; 14809 if(typeof jQuery !== "undefined"){ 14810 jQuery(firstSelect).val(varyantDeger).trigger('change'); 14811 } 14812 } 14813 14814 /* DiÄer select'lere ilk geçerli deÄeri koy */ 14815 var allSelects = holder.querySelectorAll('select[data-variant]'); 14816 allSelects.forEach(function(sel, idx){ 14817 if(idx === 0) return; 14818 if(sel.value) return; 14819 var options = sel.querySelectorAll('option'); 14820 for(var i = 0; i < options.length; i++){ 14821 if(options[i].value){ 14822 sel.value = options[i].value; 14823 if(typeof jQuery !== "undefined"){ 14824 jQuery(sel).val(options[i].value).trigger('change'); 14825 } 14826 break; 14827 } 14828 } 14829 }); 14830 14831 /* Görsel feedback */ 14832 elem.classList.add('adding'); 14833 var originalText = elem.textContent; 14834 elem.textContent = 'â'; 14835 14836 /* Sepete ekle */ 14837 addToCartSmart(productId, { 14838 checkVariant: true, 14839 variantCount: allSelects.length, 14840 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 14841 }); 14842 14843 setTimeout(function(){ 14844 elem.textContent = originalText; 14845 elem.classList.remove('adding'); 14846 closeAll(); 14847 }, 800); 14848 14849 return false; 14850 }; 14851 14852 14853 /* ============================================ 14854 SEPETE EKLE - Modal killer ile 14855 ============================================ */ 14856 function addToCartSmart(productId, extraOptions){ 14857 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14858 14859 var options = { 14860 quantity: 1, 14861 hideNativeModal: 'lux-card-' + productId 14862 }; 14863 14864 if(extraOptions){
14865 Object.keys(extraOptions).forEach(function(k){ 14866 options[k] = extraOptions[k]; 14867 }); 14868 } else if(holder){ 14869 var selects = holder.querySelectorAll('select[data-variant]'); 14870 if(selects.length > 0){ 14871 options.checkVariant = true; 14872 options.variantCount = selects.length; 14873 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 14874 } 14875 } 14876 14877 startModalKill(2000); 14878 14879 if(typeof addCart === "function"){ 14880 try { 14881 addCart(productId, 'card', options); 14882 flashSuccess(productId); 14883 } catch(err){ 14884 console.error('Sepete ekleme hatası:', err); 14885 } 14886 } 14887 } 14888 14889})(); 14890</script>
14890</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 14891 data-lux-product-shell="1" 14892 data-lux-page="1"><style> 14893@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 14894 14895/* ===== VEZZA LUX CARD ===== */ 14896.card-product{ 14897 font-family:'Poppins',sans-serif; 14898 background:#fff !important; 14899 position:relative; 14900} 14901.card-product-inner{ 14902 background:transparent !important; 14903 position:relative; 14904} 14905.card-product .c-p-i-link, 14906.card-product a{ 14907 background:transparent !important; 14908} 14909.card-product-inner > div{ 14910 background:transparent !important; 14911} 14912.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 14913 background:transparent !important; 14914} 14915.card-product .card-product-content, 14916.card-product .price-group, 14917.card-product .prices{ 14918 background:transparent !important; 14919} 14920[class*="skeleton"], 14921[class*="placeholder"], 14922[class*="loading"]{ 14923 background:transparent !important; 14924} 14925 14926/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 14927.image-wrapper{ 14928 position:relative; 14929 width:100%; 14930 aspect-ratio:1/1; 14931 overflow:hidden; 14932 background:#fff !important; 14933} 14934 14935.image{ 14936 position:relative; 14937 width:100%; 14938 height:100%; 14939} 14940 14941.image-wrapper img{ 14942 width:100% !important; 14943 height:100% !important; 14944 object-fit:cover !important; 14945 object-position:center center !important; 14946 display:block; 14947 transition:transform .35s ease; 14948} 14949 14950/* ===== DISCOUNT ===== */ 14951.discount{ 14952 position:absolute; 14953 top:12px; 14954 left:12px; 14955 width:28px; 14956 height:48px; 14957 background:#e10b0b; 14958 color:#fff; 14959 font-size:12px; 14960 font-weight:600; 14961 display:flex; 14962 align-items:center; 14963 justify-content:center; 14964 writing-mode:vertical-rl; 14965 transform:rotate(180deg); 14966 letter-spacing:.5px; 14967 z-index:7; 14968} 14969 14970/* ===== FAV ===== */ 14971.lux-fav{ 14972 position:absolute; 14973 top:12px; 14974 right:12px; 14975 z-index:7; 14976} 14977.lux-fav a, 14978.lux-fav button{ 14979 background:transparent !important; 14980 border:0 !important; 14981 padding:0 !important; 14982 cursor:pointer; 14983 display:inline-flex; 14984 align-items:center; 14985 justify-content:center; 14986} 14987 14988/* ===== SEPET IKON ===== */ 14989.lux-bag{ 14990 position:absolute; 14991 bottom:12px; 14992 right:12px; 14993 z-index:7; 14994 width:34px; 14995 height:34px; 14996 display:inline-flex; 14997 align-items:center; 14998 justify-content:center; 14999 background:rgba(255,255,255,.92); 15000 border:1px solid rgba(0,0,0,.10); 15001 border-radius:10px; 15002 cursor:pointer; 15003 transition:.2s ease; 15004} 15005.lux-bag:hover{ 15006 background:#fff; 15007 border-color:rgba(0,0,0,.25); 15008} 15009.lux-bag.is-loading{ 15010 opacity:.6; 15011 cursor:wait; 15012} 15013.lux-bag.is-success{ 15014 background:#2e7d32 !important; 15015 border-color:#2e7d32 !important; 15016 color:#fff !important; 15017} 15018.card-product.sizes-open .lux-bag{ 15019 opacity:0; 15020 pointer-events:none; 15021} 15022 15023/* Loading spinner */ 15024.lux-bag.is-loading i::before{ 15025 content:"â³"; 15026} 15027 15028/* ===== SIZE STRIP ===== */ 15029.size-strip{ 15030 width:100%; 15031 max-height:0; 15032 overflow:hidden; 15033 background:#fff; 15034 display:flex; 15035 flex-wrap:wrap; 15036 transition:max-height .3s ease, border-color .3s ease; 15037 border-top:1px solid transparent; 15038 border-bottom:1px solid transparent; 15039} 15040.size-strip.open{ 15041 max-height:200px; 15042 border-top-color:rgba(0,0,0,.08); 15043 border-bottom-color:rgba(0,0,0,.08); 15044} 15045.size-item{ 15046 flex:1 0 auto; 15047 min-width:38px; 15048 height:42px; 15049 display:flex; 15050 align-items:center; 15051 justify-content:center; 15052 font-size:13px; 15053 font-weight:500; 15054 color:#111 !important; 15055 cursor:pointer; 15056 user-select:none; 15057 background:transparent; 15058 transition:background .15s ease, color .15s ease; 15059 border-right:1px solid rgba(0,0,0,.08); 15060} 15061.size-item:last-child{ border-right:0; } 15062.size-item:hover:not(.disabled):not(.adding){ 15063 background:#000 !important; 15064 color:#fff !important; 15065} 15066.size-item.disabled{ 15067 color:#111 !important; 15068 text-decoration:line-through !important; 15069 opacity:.30 !important; 15070 cursor:not-allowed; 15071} 15072.size-item.adding{ 15073 background:#2e7d32 !important; 15074 color:#fff !important; 15075 cursor:wait; 15076} 15077 15078/* ===== META ===== */ 15079.lux-meta{ 15080 padding:12px 6px 6px; 15081 background:transparent !important; 15082} 15083.lux-brand{ 15084 font-size:16px; 15085 font-weight:600; 15086 color:#111; 15087 margin-bottom:2px; 15088} 15089.lux-title{ 15090 font-size:14px; 15091 font-weight:400; 15092 line-height:1.45; 15093 color:#111; 15094 margin:0; 15095} 15096.lux-price{ 15097 margin-top:10px; 15098 display:flex; 15099 gap:10px; 15100 align-items:baseline; 15101 background:transparent !important; 15102} 15103.lux-price .list-price{ 15104 font-size:14px; 15105 font-weight:400; 15106 color:#111; 15107 text-decoration:line-through; 15108} 15109.lux-price .sale-price{ 15110 font-size:16px; 15111 font-weight:600; 15112 color:#e10b0b; 15113} 15114 15115.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
15116.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 15117</style><div class="card-product" 15118 id="card-10158" 15119 data-lux-card-id="10158" 15120 data-lux-product-link="https://www.vezzalux.com/gg-799-arkasi-gumus-erkek-ayakkabi" 15121 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%38</div><a href="https://www.vezzalux.com/gg-799-arkasi-gumus-erkek-ayakkabi" class="c-p-i-link" title="Gg 799 Arkası GümüŠErkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6df67968-47350919-sw1200sh1200.webp" alt="Gg 799 Arkası GümüŠErkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6df67968-47350919-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c6e0dd1f8-80130218-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 15122 onclick="userProductFavourite('add', 10158)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 15123 id="lux-bag-10158" 15124 onclick="return luxBagClick(event, 10158);" 15125 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10158" style="display:none;"></div><div class="size-strip" id="size-strip-10158" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-799-arkasi-gumus-erkek-ayakkabi" class="c-p-i-link" title="Gg 799 Arkası GümüŠErkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 799 Arkası GümüŠErkek Ayakkabı</div><div class="lux-price"><div class="list-price">10.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
15125<script> 15126(function(){ 15127 15128 /* Bir kez kur */ 15129 if(window.__luxCardInit) return; 15130 window.__luxCardInit = true; 15131 15132 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 15133 window.__luxVariantCache = window.__luxVariantCache || {}; 15134 15135 function closeAll(){ 15136 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15137 s.classList.remove('open'); 15138 }); 15139 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15140 c.classList.remove('sizes-open'); 15141 }); 15142 } 15143 15144 function flashSuccess(productId){ 15145 var bag = document.getElementById('lux-bag-' + productId); 15146 if(!bag) return; 15147 bag.classList.add('is-success'); 15148 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 15149 } 15150 15151 /* DıŠtıklama - kapat */ 15152 document.addEventListener('click', function(e){ 15153 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 15154 if(!inside) closeAll(); 15155 }); 15156 15157 document.addEventListener('keydown', function(e){ 15158 if(e.key === 'Escape') closeAll(); 15159 }); 15160 15161 15162 /* ============================================ 15163 MODAL KILLER - yedek güvence 15164 ============================================ */ 15165 var LUX_MODAL_KILL_ACTIVE = false; 15166 15167 function killVisibleModals(){ 15168 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 15169 modals.forEach(function(m){ 15170 var id = (m.id || '').toLowerCase(); 15171 var txt = (m.textContent || '').toLowerCase(); 15172 var isCartModal = id.indexOf('cart') > -1 15173 || id.indexOf('variant') > -1 15174 || id.indexOf('fast') > -1 15175 || id.indexOf('urun') > -1 15176 || txt.indexOf('lütfen seçin') > -1; 15177 15178 if(isCartModal){ 15179 if(typeof jQuery !== 'undefined'){ 15180 try { jQuery(m).modal('hide'); } catch(e){} 15181 } 15182 m.classList.remove('show','in'); 15183 m.style.display = 'none'; 15184 } 15185 }); 15186 15187 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 15188 document.body.classList.remove('modal-open'); 15189 document.body.style.overflow = ''; 15190 document.body.style.paddingRight = ''; 15191 } 15192 15193 function startModalKill(durationMs){ 15194 if(LUX_MODAL_KILL_ACTIVE) return; 15195 LUX_MODAL_KILL_ACTIVE = true; 15196 killVisibleModals(); 15197 var interval = setInterval(killVisibleModals, 50); 15198 setTimeout(function(){ 15199 clearInterval(interval); 15200 LUX_MODAL_KILL_ACTIVE = false; 15201 }, durationMs || 2000); 15202 } 15203 15204 15205 /* ============================================ 15206 AJAX: Varyantları detay sayfasından çek 15207 ============================================ 15208 Ãrün detay sayfasının tam HTML'ini indir, 15209 DOMParser ile parse et, varyantları bul 15210 ============================================ */ 15211 function fetchVariants(productId, productLink, callback){ 15212 15213 /* Cache'te varsa hemen döndür */ 15214 if(window.__luxVariantCache[productId]){ 15215 callback(window.__luxVariantCache[productId]); 15216 return; 15217 } 15218 15219 fetch(productLink, { 15220 method: 'GET', 15221 credentials: 'same-origin', 15222 headers: { 'Accept': 'text/html' } 15223 }) 15224 .then(function(r){ return r.text(); }) 15225 .then(function(html){ 15226 var parser = new DOMParser(); 15227 var doc = parser.parseFromString(html, 'text/html'); 15228 15229 /* Detay sayfasındaki .variant-box'ı bul */ 15230 var variantBox = doc.querySelector('.variant-box'); 15231 if(!variantBox){ 15232 callback({ variants: [], error: 'no_variant_box' }); 15233 return; 15234 } 15235 15236 /* Her varyant grubu için select'leri ve option'ları oku */ 15237 var variants = []; 15238 var variantLis = variantBox.querySelectorAll('.variant'); 15239 15240 variantLis.forEach(function(li, idx){ 15241 var nameEl = li.querySelector('.name'); 15242 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 15243 15244 var values = []; 15245 15246 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 15247 var optLinks = li.querySelectorAll('.options a'); 15248 15249 if(optLinks.length > 0){ 15250 optLinks.forEach(function(a){ 15251 /* Beden/renk deÄerini doÄru attribute'tan oku
15252 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 15253 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 15254 - textContent: fallback */ 15255 var deger = a.getAttribute('data-variant-value') 15256 || a.textContent.trim(); 15257 15258 /* Stok kontrolü - birden fazla yoldan kontrol et */ 15259 var isSoldOut = a.classList.contains('sold-out') 15260 || a.classList.contains('sold_out') 15261 || a.classList.contains('disabled') 15262 || a.classList.contains('stoksuz') 15263 || a.classList.contains('out-of-stock') 15264 || a.hasAttribute('disabled') 15265 || a.getAttribute('data-in-stock') === '0' 15266 || a.getAttribute('data-in-stock') === 'false' 15267 || a.getAttribute('data-stokta-var-mi') === '0' 15268 || a.getAttribute('data-stokta-var-mi') === 'false'; 15269 15270 values.push({ 15271 deger: deger, 15272 inStock: !isSoldOut 15273 }); 15274 }); 15275 } else { 15276 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 15277 var select = li.querySelector('select'); 15278 if(select){ 15279 var opts = select.querySelectorAll('option'); 15280 opts.forEach(function(o){ 15281 if(!o.value) return; 15282 values.push({ 15283 deger: o.value, 15284 inStock: !o.disabled 15285 }); 15286 }); 15287 } 15288 } 15289 15290 variants.push({ 15291 index: idx, 15292 baslik: name, 15293 values: values 15294 }); 15295 }); 15296 15297 var result = { variants: variants }; 15298 window.__luxVariantCache[productId] = result; 15299 callback(result); 15300 }) 15301 .catch(function(err){ 15302 console.error('Varyant çekme hatası:', err); 15303 callback({ variants: [], error: 'fetch_failed' }); 15304 }); 15305 } 15306 15307 15308 /* ============================================ 15309 Beden Åeridini ve gizli variant-box'ı oluÅtur 15310 ============================================ */ 15311 function buildVariantUI(productId, data){ 15312 var card = document.getElementById('card-' + productId); 15313 if(!card) return false; 15314 15315 var holder = card.querySelector('.lux-variant-box'); 15316 var strip = document.getElementById('size-strip-' + productId); 15317 if(!holder || !strip) return false; 15318 15319 if(!data.variants || data.variants.length === 0){ 15320 /* Varyant yok */ 15321 return false; 15322 } 15323 15324 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 15325 var displayVariant = null;
15326 data.variants.forEach(function(v){ 15327 if(!displayVariant && v.values.length > 1){ 15328 displayVariant = v; 15329 } 15330 }); 15331 15332 /* Gizli variant-box HTML */ 15333 var html = '<div class="variant-box"><ul>'; 15334 data.variants.forEach(function(v){ 15335 html += '<li class="variant">'; 15336 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 15337 15338 if(v.values.length > 1){ 15339 html += '<option value="">Lütfen seçin</option>'; 15340 } 15341 15342 v.values.forEach(function(val, i){ 15343 var selected = (v.values.length === 1) ? ' selected' : ''; 15344 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 15345 }); 15346 15347 html += '</select></li>'; 15348 }); 15349 html += '</ul></div>'; 15350 15351 holder.innerHTML = html; 15352 holder.style.display = ''; 15353 15354 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 15355 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 15356 if(displayVariant){ 15357 var stripHtml = ''; 15358 var inStockCount = 0; 15359 15360 /* DEBUG - console'da gör */ 15361 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 15362 15363 displayVariant.values.forEach(function(val){ 15364 /* SADECE stokta olanları ekle */ 15365 if(val.inStock === true){ 15366 stripHtml += '<div class="size-item" ' 15367 + 'data-urun-id="' + productId + '" ' 15368 + 'data-varyant-deger="' + val.deger + '" ' 15369 + 'onclick="return luxAddVariant(event, this);">' 15370 + val.deger + '</div>'; 15371 inStockCount++; 15372 } 15373 }); 15374 15375 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 15376 if(inStockCount === 0){ 15377 strip.setAttribute('data-loaded', '1'); 15378 strip.setAttribute('data-has-variants', '0'); 15379 return false; 15380 } 15381
15382 strip.innerHTML = stripHtml; 15383 strip.setAttribute('data-loaded', '1'); 15384 strip.setAttribute('data-has-variants', '1'); 15385 return true; 15386 } else { 15387 strip.setAttribute('data-loaded', '1'); 15388 strip.setAttribute('data-has-variants', '0'); 15389 return false; 15390 } 15391 } 15392 15393 15394 /* ============================================ 15395 SEPET IKONU TIKLAMASI 15396 ============================================ */ 15397 window.luxBagClick = function(ev, productId){ 15398 ev.preventDefault(); 15399 ev.stopPropagation(); 15400 15401 var card = document.getElementById('card-' + productId); 15402 var strip = document.getElementById('size-strip-' + productId); 15403 var bag = document.getElementById('lux-bag-' + productId); 15404 if(!card || !strip) return false; 15405 15406 /* Strip zaten yüklenmiÅse direkt davran */ 15407 if(strip.getAttribute('data-loaded') === '1'){ 15408 if(strip.getAttribute('data-has-variants') === '1'){ 15409 toggleStrip(productId); 15410 } else { 15411 addToCartSmart(productId); 15412 } 15413 return false; 15414 } 15415 15416 /* İlk tıklama - AJAX ile varyantları çek */ 15417 bag.classList.add('is-loading'); 15418 var productLink = card.getAttribute('data-lux-product-link'); 15419 15420 fetchVariants(productId, productLink, function(data){ 15421 bag.classList.remove('is-loading'); 15422 15423 var hasVariants = buildVariantUI(productId, data); 15424 15425 if(hasVariants){ 15426 /* Bedenler var - Åeridi aç */ 15427 toggleStrip(productId); 15428 } else { 15429 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 15430 addToCartSmart(productId); 15431 } 15432 }); 15433 15434 return false; 15435 }; 15436 15437 function toggleStrip(productId){ 15438 var strip = document.getElementById('size-strip-' + productId); 15439 var card = document.getElementById('card-' + productId); 15440 if(!strip) return; 15441 15442 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15443 if(s !== strip) s.classList.remove('open'); 15444 }); 15445 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15446 if(c !== card) c.classList.remove('sizes-open'); 15447 }); 15448 15449 strip.classList.toggle('open'); 15450 if(card) card.classList.toggle('sizes-open'); 15451 } 15452 15453 15454 /* ============================================ 15455 BEDEN TIKLAMASI 15456 ============================================ */ 15457 window.luxAddVariant = function(ev, elem){ 15458 ev.preventDefault(); 15459 ev.stopPropagation(); 15460 15461 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 15462 15463 var productId = elem.getAttribute('data-urun-id'); 15464 var varyantDeger = elem.getAttribute('data-varyant-deger'); 15465 15466 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 15467 if(!holder) return false; 15468 15469 /* Seçilen bedeni ilk select'e yaz */ 15470 var firstSelect = holder.querySelector('select[data-variant="0"]'); 15471 if(firstSelect){ 15472 firstSelect.value = varyantDeger; 15473 if(typeof jQuery !== "undefined"){ 15474 jQuery(firstSelect).val(varyantDeger).trigger('change'); 15475 } 15476 } 15477 15478 /* DiÄer select'lere ilk geçerli deÄeri koy */ 15479 var allSelects = holder.querySelectorAll('select[data-variant]'); 15480 allSelects.forEach(function(sel, idx){ 15481 if(idx === 0) return; 15482 if(sel.value) return; 15483 var options = sel.querySelectorAll('option'); 15484 for(var i = 0; i < options.length; i++){ 15485 if(options[i].value){ 15486 sel.value = options[i].value; 15487 if(typeof jQuery !== "undefined"){ 15488 jQuery(sel).val(options[i].value).trigger('change'); 15489 } 15490 break; 15491 } 15492 } 15493 }); 15494 15495 /* Görsel feedback */ 15496 elem.classList.add('adding'); 15497 var originalText = elem.textContent; 15498 elem.textContent = 'â'; 15499 15500 /* Sepete ekle */ 15501 addToCartSmart(productId, { 15502 checkVariant: true, 15503 variantCount: allSelects.length, 15504 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 15505 }); 15506 15507 setTimeout(function(){ 15508 elem.textContent = originalText; 15509 elem.classList.remove('adding'); 15510 closeAll(); 15511 }, 800); 15512 15513 return false; 15514 }; 15515 15516 15517 /* ============================================ 15518 SEPETE EKLE - Modal killer ile 15519 ============================================ */ 15520 function addToCartSmart(productId, extraOptions){ 15521 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 15522 15523 var options = { 15524 quantity: 1, 15525 hideNativeModal: 'lux-card-' + productId 15526 }; 15527 15528 if(extraOptions){
15529 Object.keys(extraOptions).forEach(function(k){ 15530 options[k] = extraOptions[k]; 15531 }); 15532 } else if(holder){ 15533 var selects = holder.querySelectorAll('select[data-variant]'); 15534 if(selects.length > 0){ 15535 options.checkVariant = true; 15536 options.variantCount = selects.length; 15537 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 15538 } 15539 } 15540 15541 startModalKill(2000); 15542 15543 if(typeof addCart === "function"){ 15544 try { 15545 addCart(productId, 'card', options); 15546 flashSuccess(productId); 15547 } catch(err){ 15548 console.error('Sepete ekleme hatası:', err); 15549 } 15550 } 15551 } 15552 15553})(); 15554</script>
15554</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 15555 data-lux-product-shell="1" 15556 data-lux-page="1"><style> 15557@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 15558 15559/* ===== VEZZA LUX CARD ===== */ 15560.card-product{ 15561 font-family:'Poppins',sans-serif; 15562 background:#fff !important; 15563 position:relative; 15564} 15565.card-product-inner{ 15566 background:transparent !important; 15567 position:relative; 15568} 15569.card-product .c-p-i-link, 15570.card-product a{ 15571 background:transparent !important; 15572} 15573.card-product-inner > div{ 15574 background:transparent !important; 15575} 15576.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 15577 background:transparent !important; 15578} 15579.card-product .card-product-content, 15580.card-product .price-group, 15581.card-product .prices{ 15582 background:transparent !important; 15583} 15584[class*="skeleton"], 15585[class*="placeholder"], 15586[class*="loading"]{ 15587 background:transparent !important; 15588} 15589 15590/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 15591.image-wrapper{ 15592 position:relative; 15593 width:100%; 15594 aspect-ratio:1/1; 15595 overflow:hidden; 15596 background:#fff !important; 15597} 15598 15599.image{ 15600 position:relative; 15601 width:100%; 15602 height:100%; 15603} 15604 15605.image-wrapper img{ 15606 width:100% !important; 15607 height:100% !important; 15608 object-fit:cover !important; 15609 object-position:center center !important; 15610 display:block; 15611 transition:transform .35s ease; 15612} 15613 15614/* ===== DISCOUNT ===== */ 15615.discount{ 15616 position:absolute; 15617 top:12px; 15618 left:12px; 15619 width:28px; 15620 height:48px; 15621 background:#e10b0b; 15622 color:#fff; 15623 font-size:12px; 15624 font-weight:600; 15625 display:flex; 15626 align-items:center; 15627 justify-content:center; 15628 writing-mode:vertical-rl; 15629 transform:rotate(180deg); 15630 letter-spacing:.5px; 15631 z-index:7; 15632} 15633 15634/* ===== FAV ===== */ 15635.lux-fav{ 15636 position:absolute; 15637 top:12px; 15638 right:12px; 15639 z-index:7; 15640} 15641.lux-fav a, 15642.lux-fav button{ 15643 background:transparent !important; 15644 border:0 !important; 15645 padding:0 !important; 15646 cursor:pointer; 15647 display:inline-flex; 15648 align-items:center; 15649 justify-content:center; 15650} 15651 15652/* ===== SEPET IKON ===== */ 15653.lux-bag{ 15654 position:absolute; 15655 bottom:12px; 15656 right:12px; 15657 z-index:7; 15658 width:34px; 15659 height:34px; 15660 display:inline-flex; 15661 align-items:center; 15662 justify-content:center; 15663 background:rgba(255,255,255,.92); 15664 border:1px solid rgba(0,0,0,.10); 15665 border-radius:10px; 15666 cursor:pointer; 15667 transition:.2s ease; 15668} 15669.lux-bag:hover{ 15670 background:#fff; 15671 border-color:rgba(0,0,0,.25); 15672} 15673.lux-bag.is-loading{ 15674 opacity:.6; 15675 cursor:wait; 15676} 15677.lux-bag.is-success{ 15678 background:#2e7d32 !important; 15679 border-color:#2e7d32 !important; 15680 color:#fff !important; 15681} 15682.card-product.sizes-open .lux-bag{ 15683 opacity:0; 15684 pointer-events:none; 15685} 15686 15687/* Loading spinner */ 15688.lux-bag.is-loading i::before{ 15689 content:"â³"; 15690} 15691 15692/* ===== SIZE STRIP ===== */ 15693.size-strip{ 15694 width:100%; 15695 max-height:0; 15696 overflow:hidden; 15697 background:#fff; 15698 display:flex; 15699 flex-wrap:wrap; 15700 transition:max-height .3s ease, border-color .3s ease; 15701 border-top:1px solid transparent; 15702 border-bottom:1px solid transparent; 15703} 15704.size-strip.open{ 15705 max-height:200px; 15706 border-top-color:rgba(0,0,0,.08); 15707 border-bottom-color:rgba(0,0,0,.08); 15708} 15709.size-item{ 15710 flex:1 0 auto; 15711 min-width:38px; 15712 height:42px; 15713 display:flex; 15714 align-items:center; 15715 justify-content:center; 15716 font-size:13px; 15717 font-weight:500; 15718 color:#111 !important; 15719 cursor:pointer; 15720 user-select:none; 15721 background:transparent; 15722 transition:background .15s ease, color .15s ease; 15723 border-right:1px solid rgba(0,0,0,.08); 15724} 15725.size-item:last-child{ border-right:0; } 15726.size-item:hover:not(.disabled):not(.adding){ 15727 background:#000 !important; 15728 color:#fff !important; 15729} 15730.size-item.disabled{ 15731 color:#111 !important; 15732 text-decoration:line-through !important; 15733 opacity:.30 !important; 15734 cursor:not-allowed; 15735} 15736.size-item.adding{ 15737 background:#2e7d32 !important; 15738 color:#fff !important; 15739 cursor:wait; 15740} 15741 15742/* ===== META ===== */ 15743.lux-meta{ 15744 padding:12px 6px 6px; 15745 background:transparent !important; 15746} 15747.lux-brand{ 15748 font-size:16px; 15749 font-weight:600; 15750 color:#111; 15751 margin-bottom:2px; 15752} 15753.lux-title{ 15754 font-size:14px; 15755 font-weight:400; 15756 line-height:1.45; 15757 color:#111; 15758 margin:0; 15759} 15760.lux-price{ 15761 margin-top:10px; 15762 display:flex; 15763 gap:10px; 15764 align-items:baseline; 15765 background:transparent !important; 15766} 15767.lux-price .list-price{ 15768 font-size:14px; 15769 font-weight:400; 15770 color:#111; 15771 text-decoration:line-through; 15772} 15773.lux-price .sale-price{ 15774 font-size:16px; 15775 font-weight:600; 15776 color:#e10b0b; 15777} 15778 15779.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
15780.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 15781</style><div class="card-product" 15782 id="card-10261" 15783 data-lux-card-id="10261" 15784 data-lux-product-link="https://www.vezzalux.com/fendi-930-siyah-sari-erkek-ayakkabi" 15785 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%48</div><a href="https://www.vezzalux.com/fendi-930-siyah-sari-erkek-ayakkabi" class="c-p-i-link" title="Fendi 930 Siyah Sarı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c968790a4-15944944-sw1200sh1200.webp" alt="Fendi 930 Siyah Sarı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c968790a4-15944944-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c966ab58d-42827392-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 15786 onclick="userProductFavourite('add', 10261)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 15787 id="lux-bag-10261" 15788 onclick="return luxBagClick(event, 10261);" 15789 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10261" style="display:none;"></div><div class="size-strip" id="size-strip-10261" data-loaded="0"></div><a href="https://www.vezzalux.com/fendi-930-siyah-sari-erkek-ayakkabi" class="c-p-i-link" title="Fendi 930 Siyah Sarı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Fendi</div><div class="lux-title">Fendi 930 Siyah Sarı Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">12.500,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
15789<script> 15790(function(){ 15791 15792 /* Bir kez kur */ 15793 if(window.__luxCardInit) return; 15794 window.__luxCardInit = true; 15795 15796 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 15797 window.__luxVariantCache = window.__luxVariantCache || {}; 15798 15799 function closeAll(){ 15800 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15801 s.classList.remove('open'); 15802 }); 15803 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15804 c.classList.remove('sizes-open'); 15805 }); 15806 } 15807 15808 function flashSuccess(productId){ 15809 var bag = document.getElementById('lux-bag-' + productId); 15810 if(!bag) return; 15811 bag.classList.add('is-success'); 15812 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 15813 } 15814 15815 /* DıŠtıklama - kapat */ 15816 document.addEventListener('click', function(e){ 15817 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 15818 if(!inside) closeAll(); 15819 }); 15820 15821 document.addEventListener('keydown', function(e){ 15822 if(e.key === 'Escape') closeAll(); 15823 }); 15824 15825 15826 /* ============================================ 15827 MODAL KILLER - yedek güvence 15828 ============================================ */ 15829 var LUX_MODAL_KILL_ACTIVE = false; 15830 15831 function killVisibleModals(){ 15832 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 15833 modals.forEach(function(m){ 15834 var id = (m.id || '').toLowerCase(); 15835 var txt = (m.textContent || '').toLowerCase(); 15836 var isCartModal = id.indexOf('cart') > -1 15837 || id.indexOf('variant') > -1 15838 || id.indexOf('fast') > -1 15839 || id.indexOf('urun') > -1 15840 || txt.indexOf('lütfen seçin') > -1; 15841 15842 if(isCartModal){ 15843 if(typeof jQuery !== 'undefined'){ 15844 try { jQuery(m).modal('hide'); } catch(e){} 15845 } 15846 m.classList.remove('show','in'); 15847 m.style.display = 'none'; 15848 } 15849 }); 15850 15851 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 15852 document.body.classList.remove('modal-open'); 15853 document.body.style.overflow = ''; 15854 document.body.style.paddingRight = ''; 15855 } 15856 15857 function startModalKill(durationMs){ 15858 if(LUX_MODAL_KILL_ACTIVE) return; 15859 LUX_MODAL_KILL_ACTIVE = true; 15860 killVisibleModals(); 15861 var interval = setInterval(killVisibleModals, 50); 15862 setTimeout(function(){ 15863 clearInterval(interval); 15864 LUX_MODAL_KILL_ACTIVE = false; 15865 }, durationMs || 2000); 15866 } 15867 15868 15869 /* ============================================ 15870 AJAX: Varyantları detay sayfasından çek 15871 ============================================ 15872 Ãrün detay sayfasının tam HTML'ini indir, 15873 DOMParser ile parse et, varyantları bul 15874 ============================================ */ 15875 function fetchVariants(productId, productLink, callback){ 15876 15877 /* Cache'te varsa hemen döndür */ 15878 if(window.__luxVariantCache[productId]){ 15879 callback(window.__luxVariantCache[productId]); 15880 return; 15881 } 15882 15883 fetch(productLink, { 15884 method: 'GET', 15885 credentials: 'same-origin', 15886 headers: { 'Accept': 'text/html' } 15887 }) 15888 .then(function(r){ return r.text(); }) 15889 .then(function(html){ 15890 var parser = new DOMParser(); 15891 var doc = parser.parseFromString(html, 'text/html'); 15892 15893 /* Detay sayfasındaki .variant-box'ı bul */ 15894 var variantBox = doc.querySelector('.variant-box'); 15895 if(!variantBox){ 15896 callback({ variants: [], error: 'no_variant_box' }); 15897 return; 15898 } 15899 15900 /* Her varyant grubu için select'leri ve option'ları oku */ 15901 var variants = []; 15902 var variantLis = variantBox.querySelectorAll('.variant'); 15903 15904 variantLis.forEach(function(li, idx){ 15905 var nameEl = li.querySelector('.name'); 15906 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 15907 15908 var values = []; 15909 15910 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 15911 var optLinks = li.querySelectorAll('.options a'); 15912 15913 if(optLinks.length > 0){ 15914 optLinks.forEach(function(a){ 15915 /* Beden/renk deÄerini doÄru attribute'tan oku
15916 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 15917 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 15918 - textContent: fallback */ 15919 var deger = a.getAttribute('data-variant-value') 15920 || a.textContent.trim(); 15921 15922 /* Stok kontrolü - birden fazla yoldan kontrol et */ 15923 var isSoldOut = a.classList.contains('sold-out') 15924 || a.classList.contains('sold_out') 15925 || a.classList.contains('disabled') 15926 || a.classList.contains('stoksuz') 15927 || a.classList.contains('out-of-stock') 15928 || a.hasAttribute('disabled') 15929 || a.getAttribute('data-in-stock') === '0' 15930 || a.getAttribute('data-in-stock') === 'false' 15931 || a.getAttribute('data-stokta-var-mi') === '0' 15932 || a.getAttribute('data-stokta-var-mi') === 'false'; 15933 15934 values.push({ 15935 deger: deger, 15936 inStock: !isSoldOut 15937 }); 15938 }); 15939 } else { 15940 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 15941 var select = li.querySelector('select'); 15942 if(select){ 15943 var opts = select.querySelectorAll('option'); 15944 opts.forEach(function(o){ 15945 if(!o.value) return; 15946 values.push({ 15947 deger: o.value, 15948 inStock: !o.disabled 15949 }); 15950 }); 15951 } 15952 } 15953 15954 variants.push({ 15955 index: idx, 15956 baslik: name, 15957 values: values 15958 }); 15959 }); 15960 15961 var result = { variants: variants }; 15962 window.__luxVariantCache[productId] = result; 15963 callback(result); 15964 }) 15965 .catch(function(err){ 15966 console.error('Varyant çekme hatası:', err); 15967 callback({ variants: [], error: 'fetch_failed' }); 15968 }); 15969 } 15970 15971 15972 /* ============================================ 15973 Beden Åeridini ve gizli variant-box'ı oluÅtur 15974 ============================================ */ 15975 function buildVariantUI(productId, data){ 15976 var card = document.getElementById('card-' + productId); 15977 if(!card) return false; 15978 15979 var holder = card.querySelector('.lux-variant-box'); 15980 var strip = document.getElementById('size-strip-' + productId); 15981 if(!holder || !strip) return false; 15982 15983 if(!data.variants || data.variants.length === 0){ 15984 /* Varyant yok */ 15985 return false; 15986 } 15987 15988 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 15989 var displayVariant = null;
15990 data.variants.forEach(function(v){ 15991 if(!displayVariant && v.values.length > 1){ 15992 displayVariant = v; 15993 } 15994 }); 15995 15996 /* Gizli variant-box HTML */ 15997 var html = '<div class="variant-box"><ul>'; 15998 data.variants.forEach(function(v){ 15999 html += '<li class="variant">'; 16000 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 16001 16002 if(v.values.length > 1){ 16003 html += '<option value="">Lütfen seçin</option>'; 16004 } 16005 16006 v.values.forEach(function(val, i){ 16007 var selected = (v.values.length === 1) ? ' selected' : ''; 16008 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 16009 }); 16010 16011 html += '</select></li>'; 16012 }); 16013 html += '</ul></div>'; 16014 16015 holder.innerHTML = html; 16016 holder.style.display = ''; 16017 16018 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 16019 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 16020 if(displayVariant){ 16021 var stripHtml = ''; 16022 var inStockCount = 0; 16023 16024 /* DEBUG - console'da gör */ 16025 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 16026 16027 displayVariant.values.forEach(function(val){ 16028 /* SADECE stokta olanları ekle */ 16029 if(val.inStock === true){ 16030 stripHtml += '<div class="size-item" ' 16031 + 'data-urun-id="' + productId + '" ' 16032 + 'data-varyant-deger="' + val.deger + '" ' 16033 + 'onclick="return luxAddVariant(event, this);">' 16034 + val.deger + '</div>'; 16035 inStockCount++; 16036 } 16037 }); 16038 16039 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 16040 if(inStockCount === 0){ 16041 strip.setAttribute('data-loaded', '1'); 16042 strip.setAttribute('data-has-variants', '0'); 16043 return false; 16044 } 16045
16046 strip.innerHTML = stripHtml; 16047 strip.setAttribute('data-loaded', '1'); 16048 strip.setAttribute('data-has-variants', '1'); 16049 return true; 16050 } else { 16051 strip.setAttribute('data-loaded', '1'); 16052 strip.setAttribute('data-has-variants', '0'); 16053 return false; 16054 } 16055 } 16056 16057 16058 /* ============================================ 16059 SEPET IKONU TIKLAMASI 16060 ============================================ */ 16061 window.luxBagClick = function(ev, productId){ 16062 ev.preventDefault(); 16063 ev.stopPropagation(); 16064 16065 var card = document.getElementById('card-' + productId); 16066 var strip = document.getElementById('size-strip-' + productId); 16067 var bag = document.getElementById('lux-bag-' + productId); 16068 if(!card || !strip) return false; 16069 16070 /* Strip zaten yüklenmiÅse direkt davran */ 16071 if(strip.getAttribute('data-loaded') === '1'){ 16072 if(strip.getAttribute('data-has-variants') === '1'){ 16073 toggleStrip(productId); 16074 } else { 16075 addToCartSmart(productId); 16076 } 16077 return false; 16078 } 16079 16080 /* İlk tıklama - AJAX ile varyantları çek */ 16081 bag.classList.add('is-loading'); 16082 var productLink = card.getAttribute('data-lux-product-link'); 16083 16084 fetchVariants(productId, productLink, function(data){ 16085 bag.classList.remove('is-loading'); 16086 16087 var hasVariants = buildVariantUI(productId, data); 16088 16089 if(hasVariants){ 16090 /* Bedenler var - Åeridi aç */ 16091 toggleStrip(productId); 16092 } else { 16093 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 16094 addToCartSmart(productId); 16095 } 16096 }); 16097 16098 return false; 16099 }; 16100 16101 function toggleStrip(productId){ 16102 var strip = document.getElementById('size-strip-' + productId); 16103 var card = document.getElementById('card-' + productId); 16104 if(!strip) return; 16105 16106 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16107 if(s !== strip) s.classList.remove('open'); 16108 }); 16109 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16110 if(c !== card) c.classList.remove('sizes-open'); 16111 }); 16112 16113 strip.classList.toggle('open'); 16114 if(card) card.classList.toggle('sizes-open'); 16115 } 16116 16117 16118 /* ============================================ 16119 BEDEN TIKLAMASI 16120 ============================================ */ 16121 window.luxAddVariant = function(ev, elem){ 16122 ev.preventDefault(); 16123 ev.stopPropagation(); 16124 16125 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 16126 16127 var productId = elem.getAttribute('data-urun-id'); 16128 var varyantDeger = elem.getAttribute('data-varyant-deger'); 16129 16130 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16131 if(!holder) return false; 16132 16133 /* Seçilen bedeni ilk select'e yaz */ 16134 var firstSelect = holder.querySelector('select[data-variant="0"]'); 16135 if(firstSelect){ 16136 firstSelect.value = varyantDeger; 16137 if(typeof jQuery !== "undefined"){ 16138 jQuery(firstSelect).val(varyantDeger).trigger('change'); 16139 } 16140 } 16141 16142 /* DiÄer select'lere ilk geçerli deÄeri koy */ 16143 var allSelects = holder.querySelectorAll('select[data-variant]'); 16144 allSelects.forEach(function(sel, idx){ 16145 if(idx === 0) return; 16146 if(sel.value) return; 16147 var options = sel.querySelectorAll('option'); 16148 for(var i = 0; i < options.length; i++){ 16149 if(options[i].value){ 16150 sel.value = options[i].value; 16151 if(typeof jQuery !== "undefined"){ 16152 jQuery(sel).val(options[i].value).trigger('change'); 16153 } 16154 break; 16155 } 16156 } 16157 }); 16158 16159 /* Görsel feedback */ 16160 elem.classList.add('adding'); 16161 var originalText = elem.textContent; 16162 elem.textContent = 'â'; 16163 16164 /* Sepete ekle */ 16165 addToCartSmart(productId, { 16166 checkVariant: true, 16167 variantCount: allSelects.length, 16168 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 16169 }); 16170 16171 setTimeout(function(){ 16172 elem.textContent = originalText; 16173 elem.classList.remove('adding'); 16174 closeAll(); 16175 }, 800); 16176 16177 return false; 16178 }; 16179 16180 16181 /* ============================================ 16182 SEPETE EKLE - Modal killer ile 16183 ============================================ */ 16184 function addToCartSmart(productId, extraOptions){ 16185 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16186 16187 var options = { 16188 quantity: 1, 16189 hideNativeModal: 'lux-card-' + productId 16190 }; 16191 16192 if(extraOptions){
16193 Object.keys(extraOptions).forEach(function(k){ 16194 options[k] = extraOptions[k]; 16195 }); 16196 } else if(holder){ 16197 var selects = holder.querySelectorAll('select[data-variant]'); 16198 if(selects.length > 0){ 16199 options.checkVariant = true; 16200 options.variantCount = selects.length; 16201 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 16202 } 16203 } 16204 16205 startModalKill(2000); 16206 16207 if(typeof addCart === "function"){ 16208 try { 16209 addCart(productId, 'card', options); 16210 flashSuccess(productId); 16211 } catch(err){ 16212 console.error('Sepete ekleme hatası:', err); 16213 } 16214 } 16215 } 16216 16217})(); 16218</script>
16218</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 16219 data-lux-product-shell="1" 16220 data-lux-page="1"><style> 16221@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 16222 16223/* ===== VEZZA LUX CARD ===== */ 16224.card-product{ 16225 font-family:'Poppins',sans-serif; 16226 background:#fff !important; 16227 position:relative; 16228} 16229.card-product-inner{ 16230 background:transparent !important; 16231 position:relative; 16232} 16233.card-product .c-p-i-link, 16234.card-product a{ 16235 background:transparent !important; 16236} 16237.card-product-inner > div{ 16238 background:transparent !important; 16239} 16240.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 16241 background:transparent !important; 16242} 16243.card-product .card-product-content, 16244.card-product .price-group, 16245.card-product .prices{ 16246 background:transparent !important; 16247} 16248[class*="skeleton"], 16249[class*="placeholder"], 16250[class*="loading"]{ 16251 background:transparent !important; 16252} 16253 16254/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 16255.image-wrapper{ 16256 position:relative; 16257 width:100%; 16258 aspect-ratio:1/1; 16259 overflow:hidden; 16260 background:#fff !important; 16261} 16262 16263.image{ 16264 position:relative; 16265 width:100%; 16266 height:100%; 16267} 16268 16269.image-wrapper img{ 16270 width:100% !important; 16271 height:100% !important; 16272 object-fit:cover !important; 16273 object-position:center center !important; 16274 display:block; 16275 transition:transform .35s ease; 16276} 16277 16278/* ===== DISCOUNT ===== */ 16279.discount{ 16280 position:absolute; 16281 top:12px; 16282 left:12px; 16283 width:28px; 16284 height:48px; 16285 background:#e10b0b; 16286 color:#fff; 16287 font-size:12px; 16288 font-weight:600; 16289 display:flex; 16290 align-items:center; 16291 justify-content:center; 16292 writing-mode:vertical-rl; 16293 transform:rotate(180deg); 16294 letter-spacing:.5px; 16295 z-index:7; 16296} 16297 16298/* ===== FAV ===== */ 16299.lux-fav{ 16300 position:absolute; 16301 top:12px; 16302 right:12px; 16303 z-index:7; 16304} 16305.lux-fav a, 16306.lux-fav button{ 16307 background:transparent !important; 16308 border:0 !important; 16309 padding:0 !important; 16310 cursor:pointer; 16311 display:inline-flex; 16312 align-items:center; 16313 justify-content:center; 16314} 16315 16316/* ===== SEPET IKON ===== */ 16317.lux-bag{ 16318 position:absolute; 16319 bottom:12px; 16320 right:12px; 16321 z-index:7; 16322 width:34px; 16323 height:34px; 16324 display:inline-flex; 16325 align-items:center; 16326 justify-content:center; 16327 background:rgba(255,255,255,.92); 16328 border:1px solid rgba(0,0,0,.10); 16329 border-radius:10px; 16330 cursor:pointer; 16331 transition:.2s ease; 16332} 16333.lux-bag:hover{ 16334 background:#fff; 16335 border-color:rgba(0,0,0,.25); 16336} 16337.lux-bag.is-loading{ 16338 opacity:.6; 16339 cursor:wait; 16340} 16341.lux-bag.is-success{ 16342 background:#2e7d32 !important; 16343 border-color:#2e7d32 !important; 16344 color:#fff !important; 16345} 16346.card-product.sizes-open .lux-bag{ 16347 opacity:0; 16348 pointer-events:none; 16349} 16350 16351/* Loading spinner */ 16352.lux-bag.is-loading i::before{ 16353 content:"â³"; 16354} 16355 16356/* ===== SIZE STRIP ===== */ 16357.size-strip{ 16358 width:100%; 16359 max-height:0; 16360 overflow:hidden; 16361 background:#fff; 16362 display:flex; 16363 flex-wrap:wrap; 16364 transition:max-height .3s ease, border-color .3s ease; 16365 border-top:1px solid transparent; 16366 border-bottom:1px solid transparent; 16367} 16368.size-strip.open{ 16369 max-height:200px; 16370 border-top-color:rgba(0,0,0,.08); 16371 border-bottom-color:rgba(0,0,0,.08); 16372} 16373.size-item{ 16374 flex:1 0 auto; 16375 min-width:38px; 16376 height:42px; 16377 display:flex; 16378 align-items:center; 16379 justify-content:center; 16380 font-size:13px; 16381 font-weight:500; 16382 color:#111 !important; 16383 cursor:pointer; 16384 user-select:none; 16385 background:transparent; 16386 transition:background .15s ease, color .15s ease; 16387 border-right:1px solid rgba(0,0,0,.08); 16388} 16389.size-item:last-child{ border-right:0; } 16390.size-item:hover:not(.disabled):not(.adding){ 16391 background:#000 !important; 16392 color:#fff !important; 16393} 16394.size-item.disabled{ 16395 color:#111 !important; 16396 text-decoration:line-through !important; 16397 opacity:.30 !important; 16398 cursor:not-allowed; 16399} 16400.size-item.adding{ 16401 background:#2e7d32 !important; 16402 color:#fff !important; 16403 cursor:wait; 16404} 16405 16406/* ===== META ===== */ 16407.lux-meta{ 16408 padding:12px 6px 6px; 16409 background:transparent !important; 16410} 16411.lux-brand{ 16412 font-size:16px; 16413 font-weight:600; 16414 color:#111; 16415 margin-bottom:2px; 16416} 16417.lux-title{ 16418 font-size:14px; 16419 font-weight:400; 16420 line-height:1.45; 16421 color:#111; 16422 margin:0; 16423} 16424.lux-price{ 16425 margin-top:10px; 16426 display:flex; 16427 gap:10px; 16428 align-items:baseline; 16429 background:transparent !important; 16430} 16431.lux-price .list-price{ 16432 font-size:14px; 16433 font-weight:400; 16434 color:#111; 16435 text-decoration:line-through; 16436} 16437.lux-price .sale-price{ 16438 font-size:16px; 16439 font-weight:600; 16440 color:#e10b0b; 16441} 16442 16443.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
16444.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 16445</style><div class="card-product" 16446 id="card-10451" 16447 data-lux-card-id="10451" 16448 data-lux-product-link="https://www.vezzalux.com/cl-1168-gri-sneaker-erkek-ayakkabi" 16449 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/cl-1168-gri-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Cl 1168 Gri Sneaker Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3907759-72642519-sw1200sh1200.webp" alt="Cl 1168 Gri Sneaker Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3907759-72642519-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cd3a5891e-67436955-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 16450 onclick="userProductFavourite('add', 10451)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 16451 id="lux-bag-10451" 16452 onclick="return luxBagClick(event, 10451);" 16453 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10451" style="display:none;"></div><div class="size-strip" id="size-strip-10451" data-loaded="0"></div><a href="https://www.vezzalux.com/cl-1168-gri-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Cl 1168 Gri Sneaker Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Christian Louboutin</div><div class="lux-title">Cl 1168 Gri Sneaker Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
16453<script> 16454(function(){ 16455 16456 /* Bir kez kur */ 16457 if(window.__luxCardInit) return; 16458 window.__luxCardInit = true; 16459 16460 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 16461 window.__luxVariantCache = window.__luxVariantCache || {}; 16462 16463 function closeAll(){ 16464 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16465 s.classList.remove('open'); 16466 }); 16467 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16468 c.classList.remove('sizes-open'); 16469 }); 16470 } 16471 16472 function flashSuccess(productId){ 16473 var bag = document.getElementById('lux-bag-' + productId); 16474 if(!bag) return; 16475 bag.classList.add('is-success'); 16476 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 16477 } 16478 16479 /* DıŠtıklama - kapat */ 16480 document.addEventListener('click', function(e){ 16481 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 16482 if(!inside) closeAll(); 16483 }); 16484 16485 document.addEventListener('keydown', function(e){ 16486 if(e.key === 'Escape') closeAll(); 16487 }); 16488 16489 16490 /* ============================================ 16491 MODAL KILLER - yedek güvence 16492 ============================================ */ 16493 var LUX_MODAL_KILL_ACTIVE = false; 16494 16495 function killVisibleModals(){ 16496 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 16497 modals.forEach(function(m){ 16498 var id = (m.id || '').toLowerCase(); 16499 var txt = (m.textContent || '').toLowerCase(); 16500 var isCartModal = id.indexOf('cart') > -1 16501 || id.indexOf('variant') > -1 16502 || id.indexOf('fast') > -1 16503 || id.indexOf('urun') > -1 16504 || txt.indexOf('lütfen seçin') > -1; 16505 16506 if(isCartModal){ 16507 if(typeof jQuery !== 'undefined'){ 16508 try { jQuery(m).modal('hide'); } catch(e){} 16509 } 16510 m.classList.remove('show','in'); 16511 m.style.display = 'none'; 16512 } 16513 }); 16514 16515 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 16516 document.body.classList.remove('modal-open'); 16517 document.body.style.overflow = ''; 16518 document.body.style.paddingRight = ''; 16519 } 16520 16521 function startModalKill(durationMs){ 16522 if(LUX_MODAL_KILL_ACTIVE) return; 16523 LUX_MODAL_KILL_ACTIVE = true; 16524 killVisibleModals(); 16525 var interval = setInterval(killVisibleModals, 50); 16526 setTimeout(function(){ 16527 clearInterval(interval); 16528 LUX_MODAL_KILL_ACTIVE = false; 16529 }, durationMs || 2000); 16530 } 16531 16532 16533 /* ============================================ 16534 AJAX: Varyantları detay sayfasından çek 16535 ============================================ 16536 Ãrün detay sayfasının tam HTML'ini indir, 16537 DOMParser ile parse et, varyantları bul 16538 ============================================ */ 16539 function fetchVariants(productId, productLink, callback){ 16540 16541 /* Cache'te varsa hemen döndür */ 16542 if(window.__luxVariantCache[productId]){ 16543 callback(window.__luxVariantCache[productId]); 16544 return; 16545 } 16546 16547 fetch(productLink, { 16548 method: 'GET', 16549 credentials: 'same-origin', 16550 headers: { 'Accept': 'text/html' } 16551 }) 16552 .then(function(r){ return r.text(); }) 16553 .then(function(html){ 16554 var parser = new DOMParser(); 16555 var doc = parser.parseFromString(html, 'text/html'); 16556 16557 /* Detay sayfasındaki .variant-box'ı bul */ 16558 var variantBox = doc.querySelector('.variant-box'); 16559 if(!variantBox){ 16560 callback({ variants: [], error: 'no_variant_box' }); 16561 return; 16562 } 16563 16564 /* Her varyant grubu için select'leri ve option'ları oku */ 16565 var variants = []; 16566 var variantLis = variantBox.querySelectorAll('.variant'); 16567 16568 variantLis.forEach(function(li, idx){ 16569 var nameEl = li.querySelector('.name'); 16570 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 16571 16572 var values = []; 16573 16574 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 16575 var optLinks = li.querySelectorAll('.options a'); 16576 16577 if(optLinks.length > 0){ 16578 optLinks.forEach(function(a){ 16579 /* Beden/renk deÄerini doÄru attribute'tan oku
16580 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 16581 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 16582 - textContent: fallback */ 16583 var deger = a.getAttribute('data-variant-value') 16584 || a.textContent.trim(); 16585 16586 /* Stok kontrolü - birden fazla yoldan kontrol et */ 16587 var isSoldOut = a.classList.contains('sold-out') 16588 || a.classList.contains('sold_out') 16589 || a.classList.contains('disabled') 16590 || a.classList.contains('stoksuz') 16591 || a.classList.contains('out-of-stock') 16592 || a.hasAttribute('disabled') 16593 || a.getAttribute('data-in-stock') === '0' 16594 || a.getAttribute('data-in-stock') === 'false' 16595 || a.getAttribute('data-stokta-var-mi') === '0' 16596 || a.getAttribute('data-stokta-var-mi') === 'false'; 16597 16598 values.push({ 16599 deger: deger, 16600 inStock: !isSoldOut 16601 }); 16602 }); 16603 } else { 16604 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 16605 var select = li.querySelector('select'); 16606 if(select){ 16607 var opts = select.querySelectorAll('option'); 16608 opts.forEach(function(o){ 16609 if(!o.value) return; 16610 values.push({ 16611 deger: o.value, 16612 inStock: !o.disabled 16613 }); 16614 }); 16615 } 16616 } 16617 16618 variants.push({ 16619 index: idx, 16620 baslik: name, 16621 values: values 16622 }); 16623 }); 16624 16625 var result = { variants: variants }; 16626 window.__luxVariantCache[productId] = result; 16627 callback(result); 16628 }) 16629 .catch(function(err){ 16630 console.error('Varyant çekme hatası:', err); 16631 callback({ variants: [], error: 'fetch_failed' }); 16632 }); 16633 } 16634 16635 16636 /* ============================================ 16637 Beden Åeridini ve gizli variant-box'ı oluÅtur 16638 ============================================ */ 16639 function buildVariantUI(productId, data){ 16640 var card = document.getElementById('card-' + productId); 16641 if(!card) return false; 16642 16643 var holder = card.querySelector('.lux-variant-box'); 16644 var strip = document.getElementById('size-strip-' + productId); 16645 if(!holder || !strip) return false; 16646 16647 if(!data.variants || data.variants.length === 0){ 16648 /* Varyant yok */ 16649 return false; 16650 } 16651 16652 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 16653 var displayVariant = null;
16654 data.variants.forEach(function(v){ 16655 if(!displayVariant && v.values.length > 1){ 16656 displayVariant = v; 16657 } 16658 }); 16659 16660 /* Gizli variant-box HTML */ 16661 var html = '<div class="variant-box"><ul>'; 16662 data.variants.forEach(function(v){ 16663 html += '<li class="variant">'; 16664 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 16665 16666 if(v.values.length > 1){ 16667 html += '<option value="">Lütfen seçin</option>'; 16668 } 16669 16670 v.values.forEach(function(val, i){ 16671 var selected = (v.values.length === 1) ? ' selected' : ''; 16672 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 16673 }); 16674 16675 html += '</select></li>'; 16676 }); 16677 html += '</ul></div>'; 16678 16679 holder.innerHTML = html; 16680 holder.style.display = ''; 16681 16682 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 16683 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 16684 if(displayVariant){ 16685 var stripHtml = ''; 16686 var inStockCount = 0; 16687 16688 /* DEBUG - console'da gör */ 16689 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 16690 16691 displayVariant.values.forEach(function(val){ 16692 /* SADECE stokta olanları ekle */ 16693 if(val.inStock === true){ 16694 stripHtml += '<div class="size-item" ' 16695 + 'data-urun-id="' + productId + '" ' 16696 + 'data-varyant-deger="' + val.deger + '" ' 16697 + 'onclick="return luxAddVariant(event, this);">' 16698 + val.deger + '</div>'; 16699 inStockCount++; 16700 } 16701 }); 16702 16703 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 16704 if(inStockCount === 0){ 16705 strip.setAttribute('data-loaded', '1'); 16706 strip.setAttribute('data-has-variants', '0'); 16707 return false; 16708 } 16709
16710 strip.innerHTML = stripHtml; 16711 strip.setAttribute('data-loaded', '1'); 16712 strip.setAttribute('data-has-variants', '1'); 16713 return true; 16714 } else { 16715 strip.setAttribute('data-loaded', '1'); 16716 strip.setAttribute('data-has-variants', '0'); 16717 return false; 16718 } 16719 } 16720 16721 16722 /* ============================================ 16723 SEPET IKONU TIKLAMASI 16724 ============================================ */ 16725 window.luxBagClick = function(ev, productId){ 16726 ev.preventDefault(); 16727 ev.stopPropagation(); 16728 16729 var card = document.getElementById('card-' + productId); 16730 var strip = document.getElementById('size-strip-' + productId); 16731 var bag = document.getElementById('lux-bag-' + productId); 16732 if(!card || !strip) return false; 16733 16734 /* Strip zaten yüklenmiÅse direkt davran */ 16735 if(strip.getAttribute('data-loaded') === '1'){ 16736 if(strip.getAttribute('data-has-variants') === '1'){ 16737 toggleStrip(productId); 16738 } else { 16739 addToCartSmart(productId); 16740 } 16741 return false; 16742 } 16743 16744 /* İlk tıklama - AJAX ile varyantları çek */ 16745 bag.classList.add('is-loading'); 16746 var productLink = card.getAttribute('data-lux-product-link'); 16747 16748 fetchVariants(productId, productLink, function(data){ 16749 bag.classList.remove('is-loading'); 16750 16751 var hasVariants = buildVariantUI(productId, data); 16752 16753 if(hasVariants){ 16754 /* Bedenler var - Åeridi aç */ 16755 toggleStrip(productId); 16756 } else { 16757 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 16758 addToCartSmart(productId); 16759 } 16760 }); 16761 16762 return false; 16763 }; 16764 16765 function toggleStrip(productId){ 16766 var strip = document.getElementById('size-strip-' + productId); 16767 var card = document.getElementById('card-' + productId); 16768 if(!strip) return; 16769 16770 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16771 if(s !== strip) s.classList.remove('open'); 16772 }); 16773 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16774 if(c !== card) c.classList.remove('sizes-open'); 16775 }); 16776 16777 strip.classList.toggle('open'); 16778 if(card) card.classList.toggle('sizes-open'); 16779 } 16780 16781 16782 /* ============================================ 16783 BEDEN TIKLAMASI 16784 ============================================ */ 16785 window.luxAddVariant = function(ev, elem){ 16786 ev.preventDefault(); 16787 ev.stopPropagation(); 16788 16789 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 16790 16791 var productId = elem.getAttribute('data-urun-id'); 16792 var varyantDeger = elem.getAttribute('data-varyant-deger'); 16793 16794 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16795 if(!holder) return false; 16796 16797 /* Seçilen bedeni ilk select'e yaz */ 16798 var firstSelect = holder.querySelector('select[data-variant="0"]'); 16799 if(firstSelect){ 16800 firstSelect.value = varyantDeger; 16801 if(typeof jQuery !== "undefined"){ 16802 jQuery(firstSelect).val(varyantDeger).trigger('change'); 16803 } 16804 } 16805 16806 /* DiÄer select'lere ilk geçerli deÄeri koy */ 16807 var allSelects = holder.querySelectorAll('select[data-variant]'); 16808 allSelects.forEach(function(sel, idx){ 16809 if(idx === 0) return; 16810 if(sel.value) return; 16811 var options = sel.querySelectorAll('option'); 16812 for(var i = 0; i < options.length; i++){ 16813 if(options[i].value){ 16814 sel.value = options[i].value; 16815 if(typeof jQuery !== "undefined"){ 16816 jQuery(sel).val(options[i].value).trigger('change'); 16817 } 16818 break; 16819 } 16820 } 16821 }); 16822 16823 /* Görsel feedback */ 16824 elem.classList.add('adding'); 16825 var originalText = elem.textContent; 16826 elem.textContent = 'â'; 16827 16828 /* Sepete ekle */ 16829 addToCartSmart(productId, { 16830 checkVariant: true, 16831 variantCount: allSelects.length, 16832 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 16833 }); 16834 16835 setTimeout(function(){ 16836 elem.textContent = originalText; 16837 elem.classList.remove('adding'); 16838 closeAll(); 16839 }, 800); 16840 16841 return false; 16842 }; 16843 16844 16845 /* ============================================ 16846 SEPETE EKLE - Modal killer ile 16847 ============================================ */ 16848 function addToCartSmart(productId, extraOptions){ 16849 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16850 16851 var options = { 16852 quantity: 1, 16853 hideNativeModal: 'lux-card-' + productId 16854 }; 16855 16856 if(extraOptions){
16857 Object.keys(extraOptions).forEach(function(k){ 16858 options[k] = extraOptions[k]; 16859 }); 16860 } else if(holder){ 16861 var selects = holder.querySelectorAll('select[data-variant]'); 16862 if(selects.length > 0){ 16863 options.checkVariant = true; 16864 options.variantCount = selects.length; 16865 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 16866 } 16867 } 16868 16869 startModalKill(2000); 16870 16871 if(typeof addCart === "function"){ 16872 try { 16873 addCart(productId, 'card', options); 16874 flashSuccess(productId); 16875 } catch(err){ 16876 console.error('Sepete ekleme hatası:', err); 16877 } 16878 } 16879 } 16880 16881})(); 16882</script>
16882</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 16883 data-lux-product-shell="1" 16884 data-lux-page="1"><style> 16885@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 16886 16887/* ===== VEZZA LUX CARD ===== */ 16888.card-product{ 16889 font-family:'Poppins',sans-serif; 16890 background:#fff !important; 16891 position:relative; 16892} 16893.card-product-inner{ 16894 background:transparent !important; 16895 position:relative; 16896} 16897.card-product .c-p-i-link, 16898.card-product a{ 16899 background:transparent !important; 16900} 16901.card-product-inner > div{ 16902 background:transparent !important; 16903} 16904.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 16905 background:transparent !important; 16906} 16907.card-product .card-product-content, 16908.card-product .price-group, 16909.card-product .prices{ 16910 background:transparent !important; 16911} 16912[class*="skeleton"], 16913[class*="placeholder"], 16914[class*="loading"]{ 16915 background:transparent !important; 16916} 16917 16918/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 16919.image-wrapper{ 16920 position:relative; 16921 width:100%; 16922 aspect-ratio:1/1; 16923 overflow:hidden; 16924 background:#fff !important; 16925} 16926 16927.image{ 16928 position:relative; 16929 width:100%; 16930 height:100%; 16931} 16932 16933.image-wrapper img{ 16934 width:100% !important; 16935 height:100% !important; 16936 object-fit:cover !important; 16937 object-position:center center !important; 16938 display:block; 16939 transition:transform .35s ease; 16940} 16941 16942/* ===== DISCOUNT ===== */ 16943.discount{ 16944 position:absolute; 16945 top:12px; 16946 left:12px; 16947 width:28px; 16948 height:48px; 16949 background:#e10b0b; 16950 color:#fff; 16951 font-size:12px; 16952 font-weight:600; 16953 display:flex; 16954 align-items:center; 16955 justify-content:center; 16956 writing-mode:vertical-rl; 16957 transform:rotate(180deg); 16958 letter-spacing:.5px; 16959 z-index:7; 16960} 16961 16962/* ===== FAV ===== */ 16963.lux-fav{ 16964 position:absolute; 16965 top:12px; 16966 right:12px; 16967 z-index:7; 16968} 16969.lux-fav a, 16970.lux-fav button{ 16971 background:transparent !important; 16972 border:0 !important; 16973 padding:0 !important; 16974 cursor:pointer; 16975 display:inline-flex; 16976 align-items:center; 16977 justify-content:center; 16978} 16979 16980/* ===== SEPET IKON ===== */ 16981.lux-bag{ 16982 position:absolute; 16983 bottom:12px; 16984 right:12px; 16985 z-index:7; 16986 width:34px; 16987 height:34px; 16988 display:inline-flex; 16989 align-items:center; 16990 justify-content:center; 16991 background:rgba(255,255,255,.92); 16992 border:1px solid rgba(0,0,0,.10); 16993 border-radius:10px; 16994 cursor:pointer; 16995 transition:.2s ease; 16996} 16997.lux-bag:hover{ 16998 background:#fff; 16999 border-color:rgba(0,0,0,.25); 17000} 17001.lux-bag.is-loading{ 17002 opacity:.6; 17003 cursor:wait; 17004} 17005.lux-bag.is-success{ 17006 background:#2e7d32 !important; 17007 border-color:#2e7d32 !important; 17008 color:#fff !important; 17009} 17010.card-product.sizes-open .lux-bag{ 17011 opacity:0; 17012 pointer-events:none; 17013} 17014 17015/* Loading spinner */ 17016.lux-bag.is-loading i::before{ 17017 content:"â³"; 17018} 17019 17020/* ===== SIZE STRIP ===== */ 17021.size-strip{ 17022 width:100%; 17023 max-height:0; 17024 overflow:hidden; 17025 background:#fff; 17026 display:flex; 17027 flex-wrap:wrap; 17028 transition:max-height .3s ease, border-color .3s ease; 17029 border-top:1px solid transparent; 17030 border-bottom:1px solid transparent; 17031} 17032.size-strip.open{ 17033 max-height:200px; 17034 border-top-color:rgba(0,0,0,.08); 17035 border-bottom-color:rgba(0,0,0,.08); 17036} 17037.size-item{ 17038 flex:1 0 auto; 17039 min-width:38px; 17040 height:42px; 17041 display:flex; 17042 align-items:center; 17043 justify-content:center; 17044 font-size:13px; 17045 font-weight:500; 17046 color:#111 !important; 17047 cursor:pointer; 17048 user-select:none; 17049 background:transparent; 17050 transition:background .15s ease, color .15s ease; 17051 border-right:1px solid rgba(0,0,0,.08); 17052} 17053.size-item:last-child{ border-right:0; } 17054.size-item:hover:not(.disabled):not(.adding){ 17055 background:#000 !important; 17056 color:#fff !important; 17057} 17058.size-item.disabled{ 17059 color:#111 !important; 17060 text-decoration:line-through !important; 17061 opacity:.30 !important; 17062 cursor:not-allowed; 17063} 17064.size-item.adding{ 17065 background:#2e7d32 !important; 17066 color:#fff !important; 17067 cursor:wait; 17068} 17069 17070/* ===== META ===== */ 17071.lux-meta{ 17072 padding:12px 6px 6px; 17073 background:transparent !important; 17074} 17075.lux-brand{ 17076 font-size:16px; 17077 font-weight:600; 17078 color:#111; 17079 margin-bottom:2px; 17080} 17081.lux-title{ 17082 font-size:14px; 17083 font-weight:400; 17084 line-height:1.45; 17085 color:#111; 17086 margin:0; 17087} 17088.lux-price{ 17089 margin-top:10px; 17090 display:flex; 17091 gap:10px; 17092 align-items:baseline; 17093 background:transparent !important; 17094} 17095.lux-price .list-price{ 17096 font-size:14px; 17097 font-weight:400; 17098 color:#111; 17099 text-decoration:line-through; 17100} 17101.lux-price .sale-price{ 17102 font-size:16px; 17103 font-weight:600; 17104 color:#e10b0b; 17105} 17106 17107.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
17108.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 17109</style><div class="card-product" 17110 id="card-10200" 17111 data-lux-card-id="10200" 17112 data-lux-product-link="https://www.vezzalux.com/gg-855-beyaz-tuylu-erkek-ayakkabi" 17113 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><div class="discount">%38</div><a href="https://www.vezzalux.com/gg-855-beyaz-tuylu-erkek-ayakkabi" class="c-p-i-link" title="Gg 855 Beyaz Tüylü Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e49cdd1-2677124-sw1200sh1200.webp" alt="Gg 855 Beyaz Tüylü Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e49cdd1-2677124-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c7e1a2082-49775039-sw1200sh1200.webp" data-image-type="hover-image" src="data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAACACwAAAAAAQABAAACAlQBADs="></div></a><div class="lux-fav"><div class="product-favourite-kart" data-favourite-product-id="267"><a href="javascript:;" class=" d-block add-favorite" 17114 onclick="userProductFavourite('add', 10200)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 17115 id="lux-bag-10200" 17116 onclick="return luxBagClick(event, 10200);" 17117 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10200" style="display:none;"></div><div class="size-strip" id="size-strip-10200" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-855-beyaz-tuylu-erkek-ayakkabi" class="c-p-i-link" title="Gg 855 Beyaz Tüylü Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 855 Beyaz Tüylü Erkek Ayakkabı</div><div class="lux-price"><div class="list-price">10.499,00 TL</div><div class="sale-price">6.499,00 TL</div></div></div></a></div></div>
17117<script> 17118(function(){ 17119 17120 /* Bir kez kur */ 17121 if(window.__luxCardInit) return; 17122 window.__luxCardInit = true; 17123 17124 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 17125 window.__luxVariantCache = window.__luxVariantCache || {}; 17126 17127 function closeAll(){ 17128 document.querySelectorAll('.size-strip.open').forEach(function(s){ 17129 s.classList.remove('open'); 17130 }); 17131 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 17132 c.classList.remove('sizes-open'); 17133 }); 17134 } 17135 17136 function flashSuccess(productId){ 17137 var bag = document.getElementById('lux-bag-' + productId); 17138 if(!bag) return; 17139 bag.classList.add('is-success'); 17140 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 17141 } 17142 17143 /* DıŠtıklama - kapat */ 17144 document.addEventListener('click', function(e){ 17145 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 17146 if(!inside) closeAll(); 17147 }); 17148 17149 document.addEventListener('keydown', function(e){ 17150 if(e.key === 'Escape') closeAll(); 17151 }); 17152 17153 17154 /* ============================================ 17155 MODAL KILLER - yedek güvence 17156 ============================================ */ 17157 var LUX_MODAL_KILL_ACTIVE = false; 17158 17159 function killVisibleModals(){ 17160 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 17161 modals.forEach(function(m){ 17162 var id = (m.id || '').toLowerCase(); 17163 var txt = (m.textContent || '').toLowerCase(); 17164 var isCartModal = id.indexOf('cart') > -1 17165 || id.indexOf('variant') > -1 17166 || id.indexOf('fast') > -1 17167 || id.indexOf('urun') > -1 17168 || txt.indexOf('lütfen seçin') > -1; 17169 17170 if(isCartModal){ 17171 if(typeof jQuery !== 'undefined'){ 17172 try { jQuery(m).modal('hide'); } catch(e){} 17173 } 17174 m.classList.remove('show','in'); 17175 m.style.display = 'none'; 17176 } 17177 }); 17178 17179 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 17180 document.body.classList.remove('modal-open'); 17181 document.body.style.overflow = ''; 17182 document.body.style.paddingRight = ''; 17183 } 17184 17185 function startModalKill(durationMs){ 17186 if(LUX_MODAL_KILL_ACTIVE) return; 17187 LUX_MODAL_KILL_ACTIVE = true; 17188 killVisibleModals(); 17189 var interval = setInterval(killVisibleModals, 50); 17190 setTimeout(function(){ 17191 clearInterval(interval); 17192 LUX_MODAL_KILL_ACTIVE = false; 17193 }, durationMs || 2000); 17194 } 17195 17196 17197 /* ============================================ 17198 AJAX: Varyantları detay sayfasından çek 17199 ============================================ 17200 Ãrün detay sayfasının tam HTML'ini indir, 17201 DOMParser ile parse et, varyantları bul 17202 ============================================ */ 17203 function fetchVariants(productId, productLink, callback){ 17204 17205 /* Cache'te varsa hemen döndür */ 17206 if(window.__luxVariantCache[productId]){ 17207 callback(window.__luxVariantCache[productId]); 17208 return; 17209 } 17210 17211 fetch(productLink, { 17212 method: 'GET', 17213 credentials: 'same-origin', 17214 headers: { 'Accept': 'text/html' } 17215 }) 17216 .then(function(r){ return r.text(); }) 17217 .then(function(html){ 17218 var parser = new DOMParser(); 17219 var doc = parser.parseFromString(html, 'text/html'); 17220 17221 /* Detay sayfasındaki .variant-box'ı bul */ 17222 var variantBox = doc.querySelector('.variant-box'); 17223 if(!variantBox){ 17224 callback({ variants: [], error: 'no_variant_box' }); 17225 return; 17226 } 17227 17228 /* Her varyant grubu için select'leri ve option'ları oku */ 17229 var variants = []; 17230 var variantLis = variantBox.querySelectorAll('.variant'); 17231 17232 variantLis.forEach(function(li, idx){ 17233 var nameEl = li.querySelector('.name'); 17234 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 17235 17236 var values = []; 17237 17238 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 17239 var optLinks = li.querySelectorAll('.options a'); 17240 17241 if(optLinks.length > 0){ 17242 optLinks.forEach(function(a){ 17243 /* Beden/renk deÄerini doÄru attribute'tan oku
17244 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 17245 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 17246 - textContent: fallback */ 17247 var deger = a.getAttribute('data-variant-value') 17248 || a.textContent.trim(); 17249 17250 /* Stok kontrolü - birden fazla yoldan kontrol et */ 17251 var isSoldOut = a.classList.contains('sold-out') 17252 || a.classList.contains('sold_out') 17253 || a.classList.contains('disabled') 17254 || a.classList.contains('stoksuz') 17255 || a.classList.contains('out-of-stock') 17256 || a.hasAttribute('disabled') 17257 || a.getAttribute('data-in-stock') === '0' 17258 || a.getAttribute('data-in-stock') === 'false' 17259 || a.getAttribute('data-stokta-var-mi') === '0' 17260 || a.getAttribute('data-stokta-var-mi') === 'false'; 17261 17262 values.push({ 17263 deger: deger, 17264 inStock: !isSoldOut 17265 }); 17266 }); 17267 } else { 17268 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 17269 var select = li.querySelector('select'); 17270 if(select){ 17271 var opts = select.querySelectorAll('option'); 17272 opts.forEach(function(o){ 17273 if(!o.value) return; 17274 values.push({ 17275 deger: o.value, 17276 inStock: !o.disabled 17277 }); 17278 }); 17279 } 17280 } 17281 17282 variants.push({ 17283 index: idx, 17284 baslik: name, 17285 values: values 17286 }); 17287 }); 17288 17289 var result = { variants: variants }; 17290 window.__luxVariantCache[productId] = result; 17291 callback(result); 17292 }) 17293 .catch(function(err){ 17294 console.error('Varyant çekme hatası:', err); 17295 callback({ variants: [], error: 'fetch_failed' }); 17296 }); 17297 } 17298 17299 17300 /* ============================================ 17301 Beden Åeridini ve gizli variant-box'ı oluÅtur 17302 ============================================ */ 17303 function buildVariantUI(productId, data){ 17304 var card = document.getElementById('card-' + productId); 17305 if(!card) return false; 17306 17307 var holder = card.querySelector('.lux-variant-box'); 17308 var strip = document.getElementById('size-strip-' + productId); 17309 if(!holder || !strip) return false; 17310 17311 if(!data.variants || data.variants.length === 0){ 17312 /* Varyant yok */ 17313 return false; 17314 } 17315 17316 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 17317 var displayVariant = null;
17318 data.variants.forEach(function(v){ 17319 if(!displayVariant && v.values.length > 1){ 17320 displayVariant = v; 17321 } 17322 }); 17323 17324 /* Gizli variant-box HTML */ 17325 var html = '<div class="variant-box"><ul>'; 17326 data.variants.forEach(function(v){ 17327 html += '<li class="variant">'; 17328 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 17329 17330 if(v.values.length > 1){ 17331 html += '<option value="">Lütfen seçin</option>'; 17332 } 17333 17334 v.values.forEach(function(val, i){ 17335 var selected = (v.values.length === 1) ? ' selected' : ''; 17336 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 17337 }); 17338 17339 html += '</select></li>'; 17340 }); 17341 html += '</ul></div>'; 17342 17343 holder.innerHTML = html; 17344 holder.style.display = ''; 17345 17346 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 17347 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 17348 if(displayVariant){ 17349 var stripHtml = ''; 17350 var inStockCount = 0; 17351 17352 /* DEBUG - console'da gör */ 17353 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 17354 17355 displayVariant.values.forEach(function(val){ 17356 /* SADECE stokta olanları ekle */ 17357 if(val.inStock === true){ 17358 stripHtml += '<div class="size-item" ' 17359 + 'data-urun-id="' + productId + '" ' 17360 + 'data-varyant-deger="' + val.deger + '" ' 17361 + 'onclick="return luxAddVariant(event, this);">' 17362 + val.deger + '</div>'; 17363 inStockCount++; 17364 } 17365 }); 17366 17367 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 17368 if(inStockCount === 0){ 17369 strip.setAttribute('data-loaded', '1'); 17370 strip.setAttribute('data-has-variants', '0'); 17371 return false; 17372 } 17373
17374 strip.innerHTML = stripHtml; 17375 strip.setAttribute('data-loaded', '1'); 17376 strip.setAttribute('data-has-variants', '1'); 17377 return true; 17378 } else { 17379 strip.setAttribute('data-loaded', '1'); 17380 strip.setAttribute('data-has-variants', '0'); 17381 return false; 17382 } 17383 } 17384 17385 17386 /* ============================================ 17387 SEPET IKONU TIKLAMASI 17388 ============================================ */ 17389 window.luxBagClick = function(ev, productId){ 17390 ev.preventDefault(); 17391 ev.stopPropagation(); 17392 17393 var card = document.getElementById('card-' + productId); 17394 var strip = document.getElementById('size-strip-' + productId); 17395 var bag = document.getElementById('lux-bag-' + productId); 17396 if(!card || !strip) return false; 17397 17398 /* Strip zaten yüklenmiÅse direkt davran */ 17399 if(strip.getAttribute('data-loaded') === '1'){ 17400 if(strip.getAttribute('data-has-variants') === '1'){ 17401 toggleStrip(productId); 17402 } else { 17403 addToCartSmart(productId); 17404 } 17405 return false; 17406 } 17407 17408 /* İlk tıklama - AJAX ile varyantları çek */ 17409 bag.classList.add('is-loading'); 17410 var productLink = card.getAttribute('data-lux-product-link'); 17411 17412 fetchVariants(productId, productLink, function(data){ 17413 bag.classList.remove('is-loading'); 17414 17415 var hasVariants = buildVariantUI(productId, data); 17416 17417 if(hasVariants){ 17418 /* Bedenler var - Åeridi aç */ 17419 toggleStrip(productId); 17420 } else { 17421 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 17422 addToCartSmart(productId); 17423 } 17424 }); 17425 17426 return false; 17427 }; 17428 17429 function toggleStrip(productId){ 17430 var strip = document.getElementById('size-strip-' + productId); 17431 var card = document.getElementById('card-' + productId); 17432 if(!strip) return; 17433 17434 document.querySelectorAll('.size-strip.open').forEach(function(s){ 17435 if(s !== strip) s.classList.remove('open'); 17436 }); 17437 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 17438 if(c !== card) c.classList.remove('sizes-open'); 17439 }); 17440 17441 strip.classList.toggle('open'); 17442 if(card) card.classList.toggle('sizes-open'); 17443 } 17444 17445 17446 /* ============================================ 17447 BEDEN TIKLAMASI 17448 ============================================ */ 17449 window.luxAddVariant = function(ev, elem){ 17450 ev.preventDefault(); 17451 ev.stopPropagation(); 17452 17453 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 17454 17455 var productId = elem.getAttribute('data-urun-id'); 17456 var varyantDeger = elem.getAttribute('data-varyant-deger'); 17457 17458 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 17459 if(!holder) return false; 17460 17461 /* Seçilen bedeni ilk select'e yaz */ 17462 var firstSelect = holder.querySelector('select[data-variant="0"]'); 17463 if(firstSelect){ 17464 firstSelect.value = varyantDeger; 17465 if(typeof jQuery !== "undefined"){ 17466 jQuery(firstSelect).val(varyantDeger).trigger('change'); 17467 } 17468 } 17469 17470 /* DiÄer select'lere ilk geçerli deÄeri koy */ 17471 var allSelects = holder.querySelectorAll('select[data-variant]'); 17472 allSelects.forEach(function(sel, idx){ 17473 if(idx === 0) return; 17474 if(sel.value) return; 17475 var options = sel.querySelectorAll('option'); 17476 for(var i = 0; i < options.length; i++){ 17477 if(options[i].value){ 17478 sel.value = options[i].value; 17479 if(typeof jQuery !== "undefined"){ 17480 jQuery(sel).val(options[i].value).trigger('change'); 17481 } 17482 break; 17483 } 17484 } 17485 }); 17486 17487 /* Görsel feedback */ 17488 elem.classList.add('adding'); 17489 var originalText = elem.textContent; 17490 elem.textContent = 'â'; 17491 17492 /* Sepete ekle */ 17493 addToCartSmart(productId, { 17494 checkVariant: true, 17495 variantCount: allSelects.length, 17496 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 17497 }); 17498 17499 setTimeout(function(){ 17500 elem.textContent = originalText; 17501 elem.classList.remove('adding'); 17502 closeAll(); 17503 }, 800); 17504 17505 return false; 17506 }; 17507 17508 17509 /* ============================================ 17510 SEPETE EKLE - Modal killer ile 17511 ============================================ */ 17512 function addToCartSmart(productId, extraOptions){ 17513 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 17514 17515 var options = { 17516 quantity: 1, 17517 hideNativeModal: 'lux-card-' + productId 17518 }; 17519 17520 if(extraOptions){
17521 Object.keys(extraOptions).forEach(function(k){ 17522 options[k] = extraOptions[k]; 17523 }); 17524 } else if(holder){ 17525 var selects = holder.querySelectorAll('select[data-variant]'); 17526 if(selects.length > 0){ 17527 options.checkVariant = true; 17528 options.variantCount = selects.length; 17529 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 17530 } 17531 } 17532 17533 startModalKill(2000); 17534 17535 if(typeof addCart === "function"){ 17536 try { 17537 addCart(productId, 'card', options); 17538 flashSuccess(productId); 17539 } catch(err){ 17540 console.error('Sepete ekleme hatası:', err); 17541 } 17542 } 17543 } 17544 17545})(); 17546</script>
17546</div></div><div class="lux-custom-empty" id="luxCustomEmpty" style="display:none;"> 17547 Seçilen bedene uygun ürün bulunamadı. 17548 </div><ul class="lux-custom-pagination" id="luxCustomPagination" style="display:none;"></ul></div><div class="pagination-wrapper" id="luxNativePagination"><nav class="pagination-nav"><ul class="pagination"><li class="page-item active "><a class="page-link" href="javascript:;">1</a></li><li class="page-item "><a class="page-link" href="https://www.vezzalux.com/e-ayakkabi?sayfa=2">2</a></li><li class="page-item "><a class="page-link" href="https://www.vezzalux.com/e-ayakkabi?sayfa=3">3</a></li><li class="page-item "><a class="page-link" href="javascript:;">...</a></li><li class="page-item "><a class="page-link" href="https://www.vezzalux.com/e-ayakkabi?sayfa=6">6</a></li></ul></nav></div></div></div></div></div></div></div></div></div></section><section class="pattern-group pattern-group-t-0 pattern-group-p-categories "><div class="no-container"><div class="pattern-group-body"><div class="p-g-b-c-wrapper"><div class="p-g-b-c-inner"><div class="p-g-mod p-g-mod-t-29 p-g-mod-footer p-g-mod-trans "><div class="p-g-mod-body p-g-mod-body-p-0 "><div class="info-bar-1"><div class="container"><div class="icons"><div class="icon-group"><i class="coreicon-cargo-4"></i><div class="inf"><div class="name">Ãcretsiz Kargo</div><div class="description">Tüm sipariÅlerinizde hızlı ve ücretsiz teslimat</div></div></div><div class="icon-group"><i class="coreicon-credit-card"></i><div class="inf"><div class="name">Güvenli Ãdeme</div><div class="description">%100 korumalı ve güvenli ödeme altyapısı</div></div></div><div class="icon-group"><i class="coreicon-box-1"></i><div class="inf"><div class="name">Seçkin Koleksiyon</div><div class="description">Ãzenle seçilmiŠözel ürün seçenekleri</div></div></div><div class="icon-group"><i class="coreicon-time-1"></i><div class="inf"><div class="name">MüÅteri Destek Hattı</div><div class="description">Her zaman yanınızdayız</div></div></div></div></div></div><div class="footer-app-link"><style> 17549 .social-media { 17550 display: flex; 17551 align-items: center; 17552 gap: 10px; 17553 flex-wrap: wrap; 17554} 17555 17556.social-media-title { 17557 font-size: 11px; 17558 letter-spacing: 0.15em; 17559 text-transform: uppercase; 17560 color: #555; 17561 margin-right: 4px; 17562} 17563 17564.social-icon { 17565 width: 38px; 17566 height: 38px; 17567 border: 0.5px solid #333; 17568 border-radius: 50%; 17569 display: flex; 17570 align-items: center; 17571 justify-content: center; 17572 color: #888; 17573 font-size: 14px; 17574 text-decoration: none; 17575 transition: border-color 0.2s, color 0.2s; 17576} 17577 17578.social-icon:hover { 17579 border-color: #fff; 17580 color: #fff; 17581} 17582.footer-newsletter-band { 17583 background: #f5c518; 17584 padding: 18px 0; 17585} 17586 17587.footer-newsletter-band form { 17588 max-width: 700px; 17589 margin: 0 auto; 17590 display: flex; 17591 align-items: center; 17592 gap: 14px; 17593 padding: 0 20px; 17594 flex-wrap: wrap; 17595 justify-content: center; 17596} 17597 17598.fnb-icon { 17599 color: #000; 17600 font-size: 16px; 17601 flex-shrink: 0; 17602} 17603 17604.fnb-text { 17605 font-size: 11px; 17606 letter-spacing: 0.08em; 17607 color: #000; 17608 font-weight: 500; 17609 flex: 1; 17610 min-width: 200px; 17611 text-align: left; 17612} 17613 17614.fnb-input { 17615 background: transparent; 17616 border: none; 17617 border-bottom: 1px solid rgba(0,0,0,0.3); 17618 color: #000; 17619 font-size: 12px; 17620 padding: 6px 0; 17621 width: 220px; 17622 outline: none; 17623 transition: border-color 0.2s; 17624} 17625 17626.fnb-input:focus { 17627 border-bottom-color: #000; 17628} 17629 17630.fnb-input::placeholder { 17631 color: rgba(0,0,0,0.4); 17632} 17633 17634.fnb-btn { 17635 background: #000; 17636 border: none; 17637 border-radius: 4px; 17638 color: #f5c518; 17639 font-size: 11px; 17640 letter-spacing: 0.12em; 17641 text-transform: uppercase; 17642 padding: 8px 20px; 17643 cursor: pointer; 17644 flex-shrink: 0; 17645 transition: background 0.2s; 17646} 17647 17648.fnb-btn:hover { 17649 background: #222; 17650} 17651 </style><div class="social-media"><div class="social-media-title">Bizi Takip Edin</div><a href="https://www.instagram.com/vezzalux_tr" class="social-icon" target="_blank"><i class="fab fa-instagram"></i></a><a href="https://tr.pinterest.com/vezzalux" class="social-icon" target="_blank"><i class="fab fa-pinterest-p"></i></a></div><div class="mobile-app ml-5"><div class="mobile-app-title mr-3">
17651Mobil Uygulamalarımız</div><div class="d-flex"><a class="mr-3" href="https://apps.apple.com/tr/app/vezzalux/id6779634959" target="_blank"><i class="fab fa-apple"></i></a><a href="https://play.google.com/store/apps/details?id=com.qukasoft.vezzalux" target="_blank"><i class="fab fa-google-play"></i></a></div></div></div><div class="footer-newsletter-band"><form class="newsletter-form" action="" method="post" onsubmit="return emailNewsletter(this)"><i class="far fa-envelope fnb-icon"></i><span class="fnb-text">Kampanya, duyuru ve bilgilendirmelerden <br> e-posta ile haberdar olun.</span><input type="email" class="fnb-input" name="email" placeholder="E-Posta adresinizi yazınız"><button type="submit" class="fnb-btn">Gönder</button></form></div><footer><div class="bb"><div class="container"><div class="row"><div class="col-md-12"><div class="info"><div class="row"><div class="col-md-3"><div class="title text-left" onclick="mobileFooterToggle(4)">KURUMSAL</div><div class="fs f4"><ul><li><a href="https://www.vezzalux.com/hakkimizda"> 17652 Hakkımızda 17653 </a></li><li><a href="https://www.vezzalux.com/iletisim"> 17654 İletiÅim 17655 </a></li><li><a href="https://www.vezzalux.com/gizlilik-sozlesmesi"> 17656 Gizlilik SözleÅmesi 17657 </a></li><li><a href="https://www.vezzalux.com/kullanici-sozlesmesi"> 17658 Kullanıcı SözleÅmesi 17659 </a></li><li><a href="https://www.vezzalux.com/cerez-politikasi"> 17660 Ãerez Politikası 17661 </a></li><li><a href="https://www.vezzalux.com/mesafeli-satis-sozlesmesi"> 17662 Mesafeli SatıŠSözleÅmesi 17663 </a></li></ul></div></div><div class="col-md-3"><div class="title text-left" onclick="mobileFooterToggle(1)">MÃÅTERİ HİZMETLERİ</div><div class="fs f1"><ul><li><a href="https://www.vezzalux.com/sss"> 17664 Sıkça Sorulan Sorular 17665 </a></li><li><a href="https://www.vezzalux.com/siparis-takip"> 17666 SipariÅ Takip 17667 </a></li><li><a href="https://www.vezzalux.com/havale-bildirimleri"> 17668 Havale Bildirimleri 17669 </a></li></ul></div></div><div class="col-md-3"><div class="title text-left" onclick="mobileFooterToggle(2)">KATEGORİLER</div><div class="fs f2"><ul><li><a href="https://www.vezzalux.com/erkek"> 17670 ERKEK 17671 </a></li><li><a href="https://www.vezzalux.com/kadin"> 17672 KADIN 17673 </a></li><li><a href="https://www.vezzalux.com/yeni-sezon"> 17674 YENİ SEZON 17675 </a></li><li><a href="https://www.vezzalux.com/erkek-tek-kalanlar"> 17676 FIRSAT ÃRÃNLERİ 17677 </a></li></ul></div></div><div class="col-md-3"><div class="title text-left" onclick="mobileFooterToggle(3)">BİZE ULAÅIN</div><div class="fs f3"><div class="footer-contact"> 17678 Haftaiçi 09:00 - 19:00 Cumartesi 10:00 - 17:00 saatleri arasında ulaÅabilirsiniz. 17679 </div></div></div></div></div></div></div></div></div></footer></div></div></div></div></div></div></section>
17679<script type="text/javascript"> 17680 var SITE_CONFIG = { 17681 mode: 'production', 17682 page: 'categories', 17683 url: 'https://www.vezzalux.com', 17684 baseUrl: 'https://www.vezzalux.com', 17685 cartUrl: 'https://www.vezzalux.com/sepet', 17686 cartShippingType: 'in_order', 17687 paymentUrl: 'https://www.vezzalux.com/odeme', 17688 defaultCountry: 'TR', 17689 preferredCountries: ["TR"], 17690 onlyCountries: ["TR"], 17691 userIsLogin: false, 17692 userId: 0, 17693 lazyLoadEffectTime: '0', 17694 token: 'CFzphng6Vw8PshK0RDYS414c84f809674a0ff884ae0821538fe4eslqKex9a93F6z2IY9OcJcLr8zV6UgCdERWDRMFqLCgfuOKztWTIifk2i0BAyagLX6+p1NAbRSixMoRluROAoKPKieXLHMZCZAdvXcxCPTPco1RUJ+BlxX1YwlkNSm5RaZ/GU2ZYHNAeFmeOuzZuSsDba1B+wg4McrRkhiCQ7pPPkI2m/02h4FgM+YVWpYnrhgnL3poRI/QEdBGUWn/2AJRQDxkyu45bjxhQVVqhUYJ8V/yYRNSKjBdfg73USk3kgAM9ZA==fimtAUzo1v', 17695 accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 17696 pageKey: '336466d91adec5f72804a14dddd1a81coGJlWUTKMPHaZCH7KZzlsqDsmrJxIPZPrGhQgYmv0bQCuGT49rQQomJikStB869Bzf4B8KW35EamfANDyxesIIzE9hvESHBWQT0KIcIglF+FASk0CX8MduCGiRNRAMrH2PYB7U/c9bRfmEk9fJhYO/eGSB48tCnyhnnw/4H4SJZ2Y97QMfWmNnM3sgdT7rpwaI8BNhoZrj9T9Xg2a4a01QDCdeTfnwMu820L5Z7MVOn4kiL3nVJkhF22BAhO0ZN5eLAzGIKeb6Wwi/1yvnDZB6ySNwlwbvJyOYiTiNFR7jXt480=', 17697 paymentStep: '0', 17698 orderCode: '', 17699 contentId: '267', 17700 contentTitle: 'Ayakkabı', 17701 contentType: 'category', 17702 priceRounding: { 17703 active: false, 17704 type: '1', 17705 direction: '0' 17706 }, 17707 currency: { 17708 name: 'Türk Lirası', 17709 symbol: 'TL', 17710 code: 'TRY', 17711 decimal: '2', 17712 displayType: '0' 17713 }, 17714 listPriceRule: { 17715 active: false, 17716 limit: '15' 17717 }, 17718 analytics: { 17719 mode: 'production', 17720 sessionInterval: '1800', 17721 liveVisitInterval: '600', 17722 cookieSettings: 'Secure; SameSite=None; path=/;', 17723 apiUrl: 'https://analytics.qs-apps.com/', 17724 trackingId: '4377112946590', 17725 visitorDetails: 'eyJkb21haW4iOiJ2ZXp6YWx1eC5jb20iLCJpc19ib3QiOmZhbHNlLCJ1c2VyX2FnZW50IjoiTW96aWxsYVwvNS4wIEFwcGxlV2ViS2l0XC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvOyBjb21wYXRpYmxlOyBQYWdlU291cmNlU2VhcmNoQm90XC8xLjA7IGh0dHBzOlwvXC9wYWdlc291cmNlc2VhcmNoLmNvbVwvYm90KSBDaHJvbWVcLzEyOC4wLjAuMCBTYWZhcmlcLzUzNy4zNiIsInV0bV9zb3VyY2UiOmZhbHNlLCJ1dG1fbWVkaXVtIjpmYWxzZSwidXRtX2NhbXBhaWduIjpmYWxzZSwidXRtX3Rlcm0iOmZhbHNlLCJ1dG1fY29udGVudCI6ZmFsc2UsImNoYW5uZWwiOjAsInRyYWZmaWNfc291cmNlIjpmYWxzZSwic2VhcmNoX2tleXdvcmQiOmZhbHNlLCJub3RpZmljYXRpb25fY2FtcGFpZ25fY29kZSI6ZmFsc2UsImFmZmlsaWF0ZV9pbmZsdWVuY2VyX2NvZGUiOmZhbHNlLCJ1c2VyX2NvbGxlY3Rpb25fY29kZSI6ZmFsc2V9', 17726 namespace: { 17727 localCurrentSession: 'qanalytcs_session_', 17728 localDailyVisit: 'qanalytcs_uniquev', 17729 localLiveVisits: 'qanalytcs_activities', 17730 localTimeSpent: 'qanalytcs_lstra', 17731 cookieTest: 'qanalytcs_test', 17732 cookieTimeSpent: 'qanalytcs_tts', 17733 cookieScreenWidth: 'qanalytcs_scrnwdth' 17734 } 17735 }, 17736 datepicker: { 17737 load: false, 17738 css: 'https://www.vezzalux.com/template/smart/default/assets/plugins/datepicker/datepicker.css?v=1673397887', 17739 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/datepicker/datepicker.js?v=1673398008', 17740 }, 17741 simplebar: { 17742 load: false, 17743 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/simplebar/simplebar.js?v=1673398960', 17744 }, 17745 fancybox: { 17746 load: false, 17747 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/fancybox/fancybox.js?v=1673399778', 17748 }, 17749 imageupload: { 17750 load: false, 17751 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/imageupload/upload.js?v=1687644019', 17752 }, 17753 croppie: { 17754 load: false, 17755 css: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/croppie.css?v=1684160415', 17756 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/croppie.js?v=1684193487', 17757 js2: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/exif.js?v=1684160405', 17758 }, 17759 tweenmax: { 17760 load: false, 17761 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/tweenmax/TweenMax.min.js?v=1690415568', 17762 }, 17763 form: { 17764 load: false, 17765 js: 'https://www.vezzalux.com/template/smart/default/assets/form.js?v=1790058138', 17766 }, 17767 mask: { 17768 load: false, 17769 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/inputmask/jquery.inputmask.min.js?v=1771941751', 17770 }, 17771 print: { 17772 load: false, 17773 js: 'https://www.vezzalux.com/template/smart/default/assets/print.js?v=1790058138', 17774 }, 17775 }; 17776 var LANG_HELPER = {"success":"Ba\u015far\u0131l\u0131!","alert":"Uyar\u0131!","error":"Hata!","ok":"Tamam","errorMsg":"\u0130\u015flem ger\u00e7ekle\u015ftirilirken bir hata olu\u015ftu!","login":"Giri\u015f Yap","variantMsg":"Sepete eklemek i\u00e7in l\u00fctfen \"{%x%}\" se\u00e7in.","specialFieldMsg":"Sepete eklemek i\u00e7in l\u00fctfen \"{%x%}\" alan\u0131n\u0131 doldurun.","keepShopping":"Al\u0131\u015fveri\u015fe Devam Et","goCart":"Sepete Git","select":"Se\u00e7in","priceAlertVariantMsg":"Fiyat alarm\u0131 olu\u015fturmak i\u00e7in l\u00fctfen \"{%x%}
17776\" se\u00e7in.","selectProduct":"L\u00fctfen bir \u00fcr\u00fcn se\u00e7in.","copySuccess":"Kopyaland\u0131!","fillInRequiredFields":"L\u00fctfen zorunlu alanlar\u0131 doldurun.","areYouSureToDelete":"Silmek istedi\u011finize emin misin?","cancel":"Vazge\u00e7","deleteIt":"Eminim, Sil!"}; 17777 </script>
17777<script type="text/javascript" src="https://www.vezzalux.com/template/smart/default/assets/plugins/bootstrap.js?v=1774571286" /></script>
17777<script type="text/javascript" src="https://www.vezzalux.com/template/smart/default/assets/scripts.min.js?v=1790058138" /></script>
17777<link type="text/css" href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet"><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/template/smart/default/assets/plugins/bootstrap.helper.min.css?v=1721165315" /><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/template/smart/default/assets/plugins/fontawesome/css/all.min.css?v=1665957357" /><link rel="stylesheet" type="text/css" href="https://www.vezzalux.com/template/smart/default/assets/plugins/flagicon/all.min.css?v=1577975374"><div class="addons-mobile-menu amm-desktop-0 amm-mobile-1"><ul><li class="amm-li-0"><a href="https://www.vezzalux.com"><span class="icon"><i class="coreicon-home-4"></i></span><span class="title">Anasayfa</span></a></li><li class="amm-li-1"><a href="https://www.vezzalux.com/tumu-c-0"><span class="icon"><i class="coreicon-search-1"></i></span><span class="title">Ãrünler</span></a></li><li class="amm-li-2"><a href="https://www.vezzalux.com/sepet"><span class="icon"><i class="coreicon-bag-2"></i></span><span class="title">Sepetim</span><span class="count" data-cart-quantity>0</span></a></li><li class="amm-li-3"><a href="https://www.vezzalux.com/hesabim/favori-listem"><span class="icon"><i class="coreicon-heart-1"></i></span><span class="title">Favorilerim</span></a></li><li class="amm-li-4"><a href="https://www.vezzalux.com/hesabim"><span class="icon"><i class="coreicon-user-1"></i></span><span class="title">Hesabım</span></a></li></ul></div><style type="text/css"> 17778 .addons-mobile-menu { 17779 height: 65px; 17780 background: #ffffff; 17781 border-top: 1px solid #cfcfcf; 17782 } 17783 .addons-mobile-menu ul li a .icon { 17784 color: #333333; 17785 font-size: 15px; 17786 } 17787 .addons-mobile-menu ul li a .title { 17788 color: #333333; 17789 font-size: 12px; 17790 } 17791 @media (max-width: 991px) { 17792 body { 17793 padding-bottom: 65px; 17794 } 17795 } 17796</style><div class="addons-whatsapp-widget aww-direction-0 aww-size-1 aww-title-0 aww-desktop-1 aww-mobile-1" 17797 style="padding: 10px;"><div class="wp-title"> 17798 Size nasıl yardımcı olabiliriz? 17799 </div><a target="_blank" href="https://api.whatsapp.com/send?phone=https://wa.me/5336563444&text=Ãrünleriniz hakkında detaylı bilgi almak istiyorum"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" 17800 style="enable-background:new 0 0 512 512;" xml:space="preserve"><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="0" y1="256" x2="512" y2="256"><stop offset="0" style="stop-color:#F9F9F9"></stop><stop offset="1" style="stop-color:#FFFFFF"></stop></linearGradient><path style="fill:url(#SVGID_1_);" d="M0,512l35.31-128C12.359,344.276,0,300.138,0,254.234C0,114.759,114.759,0,255.117,0 17801 S512,114.759,512,254.234S395.476,512,255.117,512c-44.138,0-86.51-14.124-124.469-35.31L0,512z"></path><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="100.2171" y1="477.1111" x2="376.9547" y2="81.8889"><stop offset="0" style="stop-color:#20B038"></stop><stop offset="1" style="stop-color:#60D66A"></stop></linearGradient><path style="fill:url(#SVGID_2_);" d="M137.71,430.786l7.945,4.414c32.662,20.303,70.621,32.662,110.345,32.662 17802 c115.641,0,211.862-96.221,211.862-213.628S371.641,44.138,255.117,44.138S44.138,137.71,44.138,254.234 17803 c0,40.607,11.476,80.331,32.662,113.876l5.297,7.945l-20.303,74.152L137.71,430.786z"></path><path style="fill:#FEFEFE;" d="M187.145,135.945l-16.772-0.883c-5.297,0-10.593,1.766-14.124,5.297 17804 c-7.945,7.062-21.186,20.303-24.717,37.959c-6.179,26.483,3.531,58.262,26.483,90.041s67.09,82.979,144.772,105.048 17805 c24.717,7.062,44.138,2.648,60.028-7.062c12.359-7.945,20.303-20.303,22.952-33.545l2.648-12.359 17806 c0.883-3.531-0.883-7.945-4.414-9.71l-55.614-25.6c-3.531-1.766-7.945-0.883-10.593,2.648l-22.069,28.248 17807 c-1.766,1.766-4.414,2.648-7.062,1.766c-15.007-5.297-65.324-26.483-92.69-79.448c-0.883-2.648-0.883-5.297,0.883-7.062 17808 l21.186-23.834c1.766-2.648,2.648-6.179,1.766-8.828l-25.6-57.379C193.324,138.593,190.676,135.945,187.145,135.945"></path></svg></a></div><style type="text/css"> 17809 17810 @media (max-width: 991px) { 17811 .addons-whatsapp-widget { 17812 margin-bottom: 70px 17813 } 17814 } 17815 </style>
17815<script src="https://apis.google.com/js/platform.js" async defer></script>
17815<div class="google-review-badge gwb-footer gwb-hide-desktop gwb-hide-mobile"><g:ratingbadge merchant_id="5772617662"></g:ratingbadge></div>
17815<script> 17816 window.___gcfg = { 17817 lang: 'tr' 17818 }; 17819 </script>
17819<script type="text/javascript"> 17820 browserAlert("VEZZALUX | Lüksün Dijital Dünyası "); 17821</script>
17821<div class="qk-app-sticky-discount" tabindex="-1" 17822 data-position-type="fixed" 17823 data-position-element="" 17824 data-position-element-location="after" 17825 data-desktop="true" 17826 data-mobile="true"><div class="sticky-button"> 17827 %60 a Varan İndirim 17828 <i class="fa fa-angle-double-left"></i></div><div class="sticky-contents" style="display: none"><div class="item-custom"><span class="text-1" style="font-weight: 600; font-size: 19px; color: #ffffff"> 17829 Seçili Ãrünlerde %60 a Varan İndirim 17830 </span><span class="text-2" style="font-size: 14px; color: #ffffff"></span><span class="text-3" style="font-weight: 500; font-size: 15px; color: #ffffff"></span></div><span class="button-close"><i class="fa fa-times"></i></span></div></div><style type="text/css"> 17831 .qk-app-sticky-discount { 17832 display: none; 17833 position: fixed; 17834 z-index: 9; 17835 } 17836 .qk-app-sticky-discount.active { 17837 z-index: 9999 17838 } 17839 .qk-app-sticky-discount .sticky-button { 17840 cursor: pointer; 17841 position: relative; 17842 display: flex; 17843 justify-content: center; 17844 align-items: center; 17845 text-align: center; 17846 background: #4a0e0e; 17847 width: 210px; 17848 height: 41.4px; 17849 color: #ffffff; 17850 font-size: 18px; 17851 font-weight: 500; 17852 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17853 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17854 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17855 } 17856 .qk-app-sticky-discount .sticky-button i { 17857 font-size: 13px; 17858 margin: 0 0 -2px 10px; 17859 } 17860 .qk-app-sticky-discount .sticky-contents { 17861 display: flex; 17862 width: 210px; 17863 height: 230px; 17864 background: #4a0e0e; 17865 position: absolute; 17866 flex-direction: column; 17867 justify-content: center; 17868 align-items: center; 17869 text-align: center; 17870 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17871 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17872 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17873 overflow-y: auto; 17874 overflow-x: hidden; 17875 } 17876 .qk-app-sticky-discount .sticky-contents .button-close { 17877 cursor: pointer; 17878 background: rgba(0, 0, 0, .5); 17879 color: #fff; 17880 position: absolute; 17881 right: 3px; 17882 top: 3px; 17883 font-size: 11px; 17884 width: 23px; 17885 height: 23px; 17886 padding-top: 3px; 17887 } 17888 .qk-app-sticky-discount .sticky-contents .item-custom { 17889 display: flex; 17890 flex-direction: column; 17891 justify-content: center; 17892 align-items: center; 17893 text-align: center; 17894 height: 100%; 17895 width: 100%; 17896 padding: 15px 17897 } 17898 .qk-app-sticky-discount .sticky-contents span, 17899 .qk-app-sticky-discount .sticky-contents a { 17900 display: block; 17901 margin: 5px 0 17902 } 17903 .qk-app-sticky-discount .sticky-contents a { 17904 color: #fff; 17905 width: 100%; 17906 padding: 10px 5px; 17907 border-radius: 5px; 17908 font-weight: 500; 17909 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17910 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17911 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17912 } 17913 .qk-app-sticky-discount .sticky-contents a:hover { 17914 opacity: 0.9; 17915 } 17916 17917 .qk-app-sticky-discount .sticky-button { 17918 position: absolute; 17919 width: 41.4px; 17920 height: 230px; 17921 writing-mode: vertical-lr; 17922 transform: scale(-1); 17923 } 17924 .qk-app-sticky-discount .sticky-button i { 17925 margin: 10px 0 0 -2px; 17926 } 17927 .qk-app-sticky-discount .sticky-button, 17928 .qk-app-sticky-discount .sticky-contents { 17929 left: 0; 17930 } 17931 17932 @media (min-width: 992px){ 17933 .qk-app-sticky-discount { 17934 left: 0px;right: auto;top: calc(50% - 115px);bottom: auto;transform: scale(1);transform-origin: left ;margin: 0px; 17935 } 17936 } 17937 @media (max-width: 992px){ 17938 .qk-app-sticky-discount { 17939 left: 0px;right: auto;top: calc(50% - 115px);bottom: auto;transform: scale(0.7);transform-origin: left ;margin: 0px; 17940 } 17941 } 17942</style>
17942<script type="text/javascript"> 17943 $( window ).on("load", function() { 17944 customAppEffects({"trigger_click_button_label":"","trigger_custom_event_value":"","trigger_scroll_type":"percentage","trigger_scroll_value":"5","trigger_status":"1","trigger_time_on_page_value":"1","trigger_type":"page_load"}, function () { 17945 let element = '.qk-app-sticky-discount'; 17946 17947 // check current screen sizes 17948 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 17949 if ((screen_width >= 992 && !$(element).data('desktop')) || 17950 (screen_width < 992 && !$(element).data('mobile'))){ 17951 return 17952 } 17953 17954 customAppScreenPosition(element); 17955 17956 // click campaign icon to show gifts 17957 $(element).find('.sticky-button').on('click', function (){ 17958 $(element).find('.sticky-contents').fadeToggle(250); 17959 $(element).toggleClass('active'); 17960 }) 17961 17962 // click outside gifts box to hide 17963 $(element).on('focusout', function () { 17964 $(element).find('.sticky-contents').fadeOut(250); 17965 $(element).removeClass('active'); 17966 }); 17967 17968 // close button 17969 $(element+ ' .button-close').on('click', function () { 17970 $(element).find('.sticky-contents').fadeOut(250); 17971 $(element).removeClass('active'); 17972 }); 17973 17974 }); 17975 }); 17976</script>
17976<div class="qk-app-dropdown-products" tabindex="-1" 17977 data-position-type="fixed" 17978 data-position-element="" 17979 data-position-element-location="after" 17980 data-desktop="true" 17981 data-mobile="true"><div class="sticky-button"><i class="fas fa-list"></i><span>Son Gezilenler</span></div><div class="sticky-contents" style="display: none"><div class="bar"><span class="title">Son Gezilen Ãrünler</span><span class="button-close"><i class="fa fa-times"></i></span></div><div class="items"></div></div></div><style type="text/css"> 17982 .qk-app-dropdown-products { 17983 display: none; 17984 position: fixed; 17985 z-index: 9; 17986 } 17987 .qk-app-dropdown-products.active { 17988 z-index: 9999 17989 } 17990 .qk-app-dropdown-products .sticky-button { 17991 cursor: pointer; 17992 position: relative; 17993 display: flex; 17994 justify-content: center; 17995 align-items: center; 17996 text-align: center; 17997 background: #ffffff; 17998 width: 140px; 17999 height: 50px; 18000 color: #222222; 18001 font-size: 14px; 18002 border: 1px solid #dddddd; 18003 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18004 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18005 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18006 } 18007 .qk-app-dropdown-products .sticky-button i { 18008 color: #222222; 18009 font-size: 14px; 18010 margin-right: 10px 18011 } 18012 .qk-app-dropdown-products .sticky-button { 18013 position: absolute; 18014 width: 50px; 18015 height: 140px; 18016 writing-mode: vertical-lr; 18017 transform: scale(-1); 18018 } 18019 .qk-app-dropdown-products .sticky-button i { 18020 margin: 0 0 10px -2px; 18021 } 18022 .qk-app-dropdown-products .sticky-button, 18023 .qk-app-dropdown-products .sticky-contents { 18024 right: 0; 18025 } 18026 .qk-app-dropdown-products .sticky-contents { 18027 right: 0; 18028 } 18029 18030 .qk-app-dropdown-products .sticky-contents { 18031 display: flex; 18032 width: 300px; 18033 min-height: 200px; 18034 height: auto; 18035 max-height: 520px; 18036 background: #fff; 18037 position: absolute; 18038 flex-direction: column; 18039 justify-content: center; 18040 align-items: center; 18041 text-align: center; 18042 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18043 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18044 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18045 } 18046 .qk-app-dropdown-products .sticky-contents .bar { 18047 width: 100%; 18048 height: 60px; 18049 display: flex; 18050 justify-content: flex-start; 18051 align-items: center; 18052 padding: 0 15px; 18053 position: relative; 18054 color: #222222; 18055 font-size: 17px; 18056 border: 1px solid rgba(0,0,0,.1); 18057 font-weight: 500; 18058 } 18059 .qk-app-dropdown-products .sticky-contents .bar .button-close { 18060 cursor: pointer; 18061 color: #777; 18062 position: absolute; 18063 right: 13px; 18064 top: 12px; 18065 font-size: 17px; 18066 width: 25px; 18067 height: 25px; 18068 padding-top: 4px; 18069 border-radius: 5px; 18070 } 18071 .qk-app-dropdown-products .sticky-contents .items { 18072 flex: 1; 18073 max-height: 460px; 18074 width: 100%; 18075 padding-right: 10px 18076 } 18077 .qk-app-dropdown-products .sticky-contents .items .alert-message { 18078 padding: 10px 0; 18079 } 18080 .qk-app-dropdown-products .sticky-contents .items .item { 18081 display: flex; 18082 justify-content: flex-start; 18083 align-items: flex-start; 18084 border-bottom: 1px solid #ebebeb; 18085 padding: 10px; 18086 height: 115px; 18087 color: #333 18088 } 18089 .qk-app-dropdown-products .sticky-contents .items .item .image { 18090 flex: 1 18091 } 18092 .qk-app-dropdown-products .sticky-contents .items .item .image img { 18093 max-height: 90px; 18094 max-width: 90px; 18095 } 18096 .qk-app-dropdown-products .sticky-contents .items .item .info { 18097 flex: 2; 18098 height: 100%; 18099 display: flex; 18100 flex-direction: column; 18101 align-items: flex-start; 18102 margin-left: 10px; 18103 text-align: left; 18104 } 18105 .qk-app-dropdown-products .sticky-contents .items .item .info .title { 18106 font-size: 13px; 18107 margin-bottom: 6px 18108 } 18109 .qk-app-dropdown-products .sticky-contents .items .item .info .list-price { 18110 font-size: 12px; 18111 color: #555; 18112 text-decoration: line-through; 18113 margin-bottom: 6px 18114 } 18115 .qk-app-dropdown-products .sticky-contents .items .item .info .sale-price { 18116 font-size: 15px; 18117 font-weight: 600; 18118 color: #d21c1c; 18119 margin-bottom: 6px 18120 } 18121 18122 @media (min-width: 992px){ 18123 .qk-app-dropdown-products { 18124 left: auto;right: 10px;top: calc(50% - 25px);bottom: auto;transform: scale(1);transform-origin: right ;margin: 0px; 18125 } 18126 } 18127 @media (max-width: 992px){ 18128 .qk-app-dropdown-products { 18129 left: auto;right: 10px;top: calc(50% - 25px);bottom: auto;transform: scale(0.85);transform-origin: right ;margin: 0px; 18130 } 18131 } 18132</style>
18132<script type="text/javascript"> 18133 $( window ).on("load", function() { 18134 customAppEffects({"trigger_click_button_label":"","trigger_custom_event_value":"","trigger_scroll_type":"percentage","trigger_scroll_value":"5","trigger_status":"0","trigger_time_on_page_value":"1","trigger_type":"page_load"}, function () { 18135 let element = '.qk-app-dropdown-products'; 18136 18137 // check current screen sizes 18138 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18139 if ((screen_width >= 992 && !$(element).data('desktop')) || 18140 (screen_width < 992 && !$(element).data('mobile'))){ 18141 return 18142 } 18143 18144 customAppScreenPosition(element); 18145 18146 // click campaign icon to show gifts 18147 var fetch_products = false; 18148 $(element).find('.sticky-button').on('click', function (){ 18149 $(element).find('.sticky-contents').fadeToggle(150); 18150 $(element).toggleClass('active'); 18151 if (!fetch_products){ 18152 fetch_products = true; 18153 customAppDropDownFetchProducts(element); 18154 } 18155 }) 18156 18157 // click outside gifts box to hide 18158 $(element).on('focusout', function () { 18159 $(element).find('.sticky-contents').fadeOut(150); 18160 $(element).removeClass('active'); 18161 }); 18162 18163 // close button 18164 $(element+ ' .button-close').on('click', function () { 18165 $(element).find('.sticky-contents').fadeOut(150); 18166 $(element).removeClass('active'); 18167 }); 18168 18169 }); 18170 }); 18171 function customAppDropDownFetchProducts(element) 18172 { 18173 var data = [ 18174 {name: "type", value: 'visited'}, 18175 {name: "limit", value: '4'}, 18176 ] 18177 18178 ajaxFormGate( 18179 'POST', 'Category', 'getSimpleProducts', data, false, function(result){ 18180 if (result.length == 0){ 18181 $(element+ ' .sticky-contents').find('.items').html('<div class="alert-message">Ãrün bulunamadı.</div>') 18182 }else{ 18183 $(element+ ' .sticky-contents').find('.items').html(' ') 18184 let item = '', html = ''; 18185 for(let i = 0; i < result.length; i++){ 18186 item = result[i]; 18187 html = ''; 18188 html = html + '<a class="item" href="'+ item.link +'">'; 18189 html = html + '<div class="image">'; 18190 html = html + '<img src="'+ item.resim +'" alt="" />'; 18191 html = html + '</div>'; 18192 html = html + '<div class="info">'; 18193 html = html + '<span class="title">'+ item.adi +'</span>'; 18194 if (item.indirim){ 18195 html = html + '<span class="list-price">'+ item.piyasa_fiyati +'</span>'; 18196 } 18197 html = html + '<span class="sale-price">'+ item.fiyat +'</span>'; 18198 html = html + '</div>'; 18199 html = html + '</a>'; 18200 $(element + ' .sticky-contents .items').append(html) 18201 } 18202 } 18203 }, 18204 false 18205 ) 18206 } 18207</script>
18207<div class="qk-app-popup-products" tabindex="-1" 18208 data-position-type="fixed" 18209 data-position-element="" 18210 data-position-element-location="after" 18211 data-desktop="true" 18212 data-mobile="true"><div class="wrapper-showcase"><div class="bar"><span class="title">BeÄendiÄiniz Ãrün Sizi Bekliyor</span><span class="sub-title">Tüm Ãrünlerde Sepette %20 İndirim, Ãcretsiz Aynı Gün Kargo Fırsatıyla SipariÅinizi Tamamlayın.</span><span class="button-close"><i class="fa fa-times"></i></span></div><div class="owl-wrapper"><div class="owl-carousel items qk-app-popup-products-items"></div><div class="owl-single-button owl-single-button-prev qk-app-popup-products-items-prev"><button type="button" class="btn btn-owl" aria-label="left"><i class="fas fa-angle-left"></i></button></div><div class="owl-single-button owl-single-button-next qk-app-popup-products-items-next"><button type="button" class="btn btn-owl" aria-label="right"><i class="fas fa-angle-right"></i></button></div></div></div></div><style type="text/css"> 18213 .qk-app-popup-products { 18214 display: none; 18215 position: fixed; 18216 z-index: 999999; 18217 left: 0; 18218 right: 0; 18219 top: 0; 18220 bottom: 0; 18221 background: rgba(0, 0, 0, .6); 18222 } 18223 .qk-app-popup-products .wrapper-showcase { 18224 position: fixed; 18225 background: #ffffff; 18226 width: 750px; 18227 height: 460px; 18228 padding: 30px; 18229 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18230 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18231 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18232 } 18233 .qk-app-popup-products .wrapper-showcase .bar { 18234 display: flex; 18235 flex-direction: column; 18236 text-align: center; 18237 justify-content: center; 18238 align-items: center; 18239 } 18240 .qk-app-popup-products .wrapper-showcase .bar .title { 18241 color: #222222; 18242 font-size: 17px; 18243 margin-bottom: 5px; 18244 font-weight: 500 18245 } 18246 .qk-app-popup-products .wrapper-showcase .bar .sub-title { 18247 color: #222222; 18248 font-size: 14px; 18249 } 18250 .qk-app-popup-products .wrapper-showcase .bar .button-close { 18251 cursor: pointer; 18252 color: #555; 18253 position: absolute; 18254 right: 5px; 18255 top: 5px; 18256 font-size: 20px; 18257 width: 23px; 18258 height: 23px; 18259 padding-top: 3px; 18260 } 18261 .qk-app-popup-products .wrapper-showcase .items { 18262 width: 100%; 18263 margin-top: 20px 18264 } 18265 .qk-app-popup-products .wrapper-showcase .items .item { 18266 padding: 10px; 18267 color: #333 18268 } 18269 .qk-app-popup-products .wrapper-showcase .items .item .image { 18270 flex: 1; 18271 text-align: center; 18272 justify-content: center; 18273 align-items: center; 18274 display: flex; 18275 } 18276 .qk-app-popup-products .wrapper-showcase .items .item .image img { 18277 max-height: 200px; 18278 max-width: 200px; 18279 width: auto; 18280 height: auto; 18281 } 18282 .qk-app-popup-products .wrapper-showcase .items .item .info { 18283 display: flex; 18284 flex-direction: column; 18285 align-items: flex-start; 18286 margin-top: 10px; 18287 text-align: left; 18288 } 18289 .qk-app-popup-products .wrapper-showcase .items .item .info .title { 18290 font-size: 13px; 18291 margin-bottom: 6px 18292 } 18293 .qk-app-popup-products .wrapper-showcase .items .item .info .list-price { 18294 font-size: 12px; 18295 color: #555; 18296 text-decoration: line-through; 18297 margin-top: 6px 18298 } 18299 .qk-app-popup-products .wrapper-showcase .items .item .info .sale-price { 18300 font-size: 15px; 18301 font-weight: 600; 18302 color: #d21c1c; 18303 margin-top: 6px 18304 } 18305 18306 @media (min-width: 992px){ 18307 .qk-app-popup-products { 18308 } 18309 .qk-app-popup-products .wrapper-showcase { 18310 left: calc(50% - 375px);right: auto;top: calc(50% - 230px);bottom: auto;transform: scale(1);transform-origin: center ;margin: 0px; 18311 } 18312 } 18313 @media (max-width: 992px){ 18314 .qk-app-popup-products { 18315 } 18316 .qk-app-popup-products .wrapper-showcase { 18317 left: calc(50% - 375px);right: auto;top: calc(50% - 230px);bottom: auto;transform: scale(0.95);transform-origin: center ;margin: 0px; 18318 width: 100% !important; 18319 left: 0 !important; 18320 right: 0 !important; 18321 } 18322 } 18323</style>
18323<script type="text/javascript"> 18324 $( window ).on("load", function() { 18325 customAppEffects({"trigger_click_button_label":"","trigger_custom_event_value":"","trigger_scroll_type":"percentage","trigger_scroll_value":"5","trigger_status":"1","trigger_time_on_page_value":"180","trigger_type":"time_on_page"}, function () { 18326 let element = '.qk-app-popup-products'; 18327 18328 // check current screen sizes 18329 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18330 if ((screen_width >= 992 && !$(element).data('desktop')) || 18331 (screen_width < 992 && !$(element).data('mobile'))){ 18332 return 18333 } 18334 18335 customAppScreenPosition(element); 18336 18337 // close button 18338 $(element+ ' .button-close').on('click', function () { 18339 $(element).remove(); 18340 }); 18341 18342 // fetch products 18343 var data = [ 18344 {name: "type", value: 'visited'}, 18345 {name: "limit", value: '10'}, 18346 ]; 18347 18348 ajaxFormGate( 18349 'POST', 'Category', 'getSimpleProducts', data, false, function(result){ 18350 if (result.length == 0){ 18351 $(element).remove(); 18352 }else{ 18353 $(element).find('.items').html(' ') 18354 let item = '', html = ''; 18355 for(let i = 0; i < result.length; i++){ 18356 item = result[i]; 18357 html = ''; 18358 html = html + '<a class="owl-carousel-item item" href="'+ item.link +'">'; 18359 html = html + '<div class="image">'; 18360 html = html + '<img src="'+ item.resim +'" alt="" />'; 18361 html = html + '</div>'; 18362 html = html + '<div class="info">'; 18363 html = html + '<span class="title">'+ item.adi +'</span>'; 18364 if (item.indirim){ 18365 html = html + '<span class="list-price">'+ item.piyasa_fiyati +'</span>'; 18366 } 18367 html = html + '<span class="sale-price">'+ item.fiyat +'</span>'; 18368 html = html + '</div>'; 18369 html = html + '</a>'; 18370 $(element).find('.items').append(html) 18371 } 18372 createOwlCarousel('qk-app-popup-products-items', {"0":{"items":2},"992":{"items":3}}); 18373 } 18374 }, 18375 false 18376 ) 18377 18378 }); 18379 }); 18380</script>
18380<div class="cookie-agreement-module" 18381 tabindex="-1" 18382 data-desktop="true" 18383 data-mobile="true"><div class="cam-contents"><div class="items"><div class="title">Ãerez Kullanımı</div><div class="description"><p class="cookie-bar__text">Size en iyi alıÅveriÅ deneyimini sunabilmek adına sitemizde çerez (cookie) kullanılmaktadır. Detaylı bilgi için <a href="/cerez-politikasi">Çerez Politikası</a> ve <a href="/gizlilik-sozlesmesi">Gizlilik SözleÅmesi</a>'ni inceleyebilirsiniz.</p></div></div><button type="button" onclick="cookieAgreement()" class="cam-btn"> 18384 Kabul Ediyorum 18385 </button></div></div><style type="text/css"> 18386 .cookie-agreement-module { 18387 z-index: 9999999; 18388 position: fixed; 18389 background: rgba(0, 0, 0, 0.97); 18390 border-radius: 35px; 18391 } 18392 .cookie-agreement-module .cam-contents { 18393 position: relative; 18394 display: flex; 18395 justify-content: center; 18396 align-items: center; 18397 min-height: 110px; 18398 width: 100%; 18399 padding: 5px 15px; 18400 max-width: 360px; 18401 margin: 0 auto; 18402 } 18403 .cookie-agreement-module .items { 18404 flex: 1; 18405 text-align: left; 18406 } 18407 .cookie-agreement-module .items .title { 18408 color: #ffffff !important; 18409 font-size: 14px !important; 18410 margin-bottom: 5px; 18411 font-weight: 500; 18412 } 18413 .cookie-agreement-module .items .description { 18414 color: #ffffff !important; 18415 font-size: 13px !important; 18416 } 18417 .cookie-agreement-module .items .description a { 18418 color: #ffffff !important; 18419 font-size: 13px !important; 18420 text-decoration: none !important; 18421 } 18422 .cookie-agreement-module .cam-btn { 18423 border: 0 !important; 18424 border-radius: 3px !important; 18425 display: inline-block !important; 18426 padding: 7px 10px; 18427 font-weight: 600; 18428 background: #ffffff; 18429 color: #000000; 18430 font-size: 13px; 18431 margin-left: 10px; 18432 } 18433 .cookie-agreement-module .button-close { 18434 cursor: pointer; 18435 font-size: 13px; 18436 color: #000000; 18437 margin-left: 10px; 18438 } 18439 @media (min-width: 992px){ 18440 .cookie-agreement-module { 18441 left: calc(50% - 180px);right: auto;top: auto;bottom: 15px;transform: scale(0.75);transform-origin: bottom;margin: 0px; 18442 left: 0 !important; 18443 right: 0 !important; 18444 } 18445 .cookie-agreement-module .cam-contents { 18446 max-width: initial; 18447 } 18448 } 18449 @media (max-width: 992px){ 18450 .cookie-agreement-module { 18451 left: calc(50% - 180px);right: auto;top: auto;bottom: 5px;transform: scale(0.95);transform-origin: bottom;margin: 0px; 18452 left: 0 !important; 18453 right: 0 !important; 18454 } 18455 .cookie-agreement-module .cam-contents { 18456 padding: 8px; 18457 flex-direction: column; 18458 align-items: flex-start; 18459 } 18460 .cookie-agreement-module .cam-btn { 18461 margin: 10px auto 0 auto; 18462 } 18463 } 18464</style>
18464<script type="text/javascript"> 18465 $( window ).on("load", function() { 18466 let element = '.cookie-agreement-module'; 18467 // check current screen sizes 18468 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18469 if ((screen_width >= 992 && !$(element).data('desktop')) || 18470 (screen_width < 992 && !$(element).data('mobile'))){ 18471 return 18472 } 18473 18474 customAppScreenPosition(element); 18475 }); 18476 18477 function cookieAgreement(){ 18478 ajaxFormGate( 18479 'POST', 'Visitor', 'cookieAgreement', [], false, function(result){ 18480 $('.cookie-agreement-module').remove(); 18481 }, 18482 false 18483 ); 18484 } 18485</script>
18485<div class="overlay d-none"><div class="spinner-border spin" role="status"><span class="sr-only">Yükleniyor...</span></div></div><div class="op-black-2"></div>
18485<script type="text/javascript"> 18486 var swal_alert_timer = 10; 18487 </script>
18487<script type="text/javascript" src="https://www.vezzalux.com/theme/___sirius/assets/scripts.js?v=1653353722" /></script>
18487<script type="text/javascript"> 18488 $(function () { 18489 $('.addons-marquee-bar').marquee({ 18490 pauseOnHover: true, 18491 direction: 'left', 18492 duration: 60000, 18493 duplicated: true, 18494 startVisible: true, 18495 delayBeforeStart: 0 18496 }); 18497 }); 18498 </script>
18498<style> 18499body.lux-size-filter-active #luxNativePagination, 18500.lux-category-products-area.is-lux-filter-active + #luxNativePagination { 18501 display: none !important; 18502} 18503 18504.lux-custom-empty { 18505 padding: 40px 10px; 18506 text-align: center; 18507 color: #999; 18508 font-size: 14px; 18509} 18510 18511.lux-custom-pagination { 18512 display: flex; 18513 justify-content: center; 18514 align-items: center; 18515 gap: 6px; 18516 flex-wrap: wrap; 18517 margin: 34px 0 20px; 18518 padding: 0; 18519 list-style: none; 18520} 18521 18522.lux-custom-pagination button, 18523.lux-custom-pagination span { 18524 min-width: 38px; 18525 height: 38px; 18526 padding: 0 12px; 18527 border: 1px solid #ddd; 18528 background: #fff; 18529 color: #333; 18530 font-size: 13px; 18531 font-weight: 500; 18532 cursor: pointer; 18533 border-radius: 2px; 18534 transition: all .2s ease; 18535} 18536 18537.lux-custom-pagination button:hover { 18538 border-color: #111; 18539 color: #111; 18540} 18541 18542.lux-custom-pagination button.is-active { 18543 background: #111; 18544 border-color: #111; 18545 color: #fff; 18546 cursor: default; 18547} 18548 18549.lux-custom-pagination button:disabled { 18550 opacity: .45; 18551 cursor: not-allowed; 18552} 18553 18554.lux-custom-pagination span { 18555 display: inline-flex; 18556 align-items: center; 18557 justify-content: center; 18558 border: none; 18559 color: #aaa; 18560 cursor: default; 18561} 18562</style>
18562<script type="text/javascript"> 18563const CATEGORY_PAGE_DATA = { 18564 k: '', 18565 url: 'https://www.vezzalux.com/e-ayakkabi', 18566 filtreleme: 'bd80ad94fd2a696434eb9b254e2bd412OktpoC6pg7TqedcowYbu/3qxiN85Mgw+Y5Rl+r5uZgI7MR69DRB1yt71ODJq9ZolP4JfQFhj/KSQuht5D2LqhwyI76XOdMd5k4qv1IV1xuti8ubuxXfpNF8WeACc1U+mEI2sesey70jPCRJhpOO9nbYFiQ8njKlakPRIPHVony+FQ1D57aUVroOBf3o/rfswJ2XLKcN6+7TxYl+msYrVYh7WSZwmwQrMsrg2647NJAu9xaQCN5s5PVv/aoBi+AepwfH+U3740zS4pdR7VKGVqE/es2XInVhASDgHxkviJO3/LxUERd4c6PQILblhBIYKVTdVf+G8mYw7QeCn5DVtD7MikIPK6tWeMY7hM4aXxbeZQsqS90Z4aAkAmaOaqlAR3qkSF2cNHgOV5qqtrJlsom7hQBNy5phILZNoSADqxVnHP7XR6iQg+I80B14U9MOxf4krli2COIhfDBn5DLPqfQNz0+ehQGqZMqG4Qprs6EG07KNNbsPnXdr6jC2W/ToiBEGFH2ibUqoKH4t1Vy18GV2RoBcItJlm3JFEkdaGnWXmKYYiUTfl7dOO9Vm9TEqoDf3Ge3mNst07cQDunEzPDchMFtYn3EqnCNux9tnUZ5tWpsd7teaL4iSQ5atOhqqtdjfZ3riZqWoqduwzp43MycqwybWt6rUaqioKWcRWw1KPxQ+hm0Ik/duQL0TTdqZL4AWBE+HrxZg4XMqCazTbR3M1M7J04CXPQ6E2ha8tMcAgl4EStp9CPXLg5BpB4dsd1+bsgVFZK1oXpGz752jxeotl2vVBoGd03G4baLcD52y6PWhkhrhIMv5W3vGPEIhNZkpXjcz/8jluwKIt8+stYcfjvzz2nR0lRgdOC2tCDF2j/vYMPtzFTVlZw/KKnlwdaV7Z4fQUpBceDvhFvMO/iGKZ7NIohsw8/cyP6e8ge656pXe7mRgB9mriYg0SfMQRhe+SBclgrI8zbHEgRirGgaZEkxOHRerbuie9KBJ91XK2ZKkT2R58vEnfcqIQHQ7sTGETukbq+4iwaW/r5rPoXNO+UWtuI8+mdeCjyloN+Gff5l6pWOTlwvvt/EwaklbDn6Zt8vQ28pEKSfelv4n1onXwYLFgn+8Gtufur0tH1HoV3LeOKoMdnF15R9AnEyxbUUOADetEElCZ6zIqd5MEEg+tpL6aP7CS6ggSAPsOZN3POg==' 18567}; 18568 18569$(function(){ 18570 smartCategoryFilters(CATEGORY_PAGE_DATA); 18571 18572 if (localStorage.getItem('category-view-type') == 2){ 18573 categoryViewType(6, 6, 2); 18574 } else if (localStorage.getItem('category-view-type') == 3){ 18575 categoryViewType(4, 4, 3); 18576 } else if (localStorage.getItem('category-view-type') == 4){ 18577 categoryViewType(4, 3, 4); 18578 } 18579}); 18580 18581function categoryViewType(cls1, cls2, type){ 18582 $(".p-g-mod-t-20 .col-list-p-v-1, #luxProductGrid .col-list-p-v-1").removeClass() 18583 .addClass("col-6 col-sm-6 col-md-6 col-lg-"+cls1+" col-xl-"+cls2+" col-list-p-v-1"); 18584 18585 localStorage.setItem('category-view-type', type); 18586} 18587 18588if (localStorage.getItem('category-view-type') == 2){ 18589 $(".two-view").addClass("active"); 18590} else if (localStorage.getItem('category-view-type') == 3){ 18591 $(".three-view").addClass("active"); 18592} else if (localStorage.getItem('category-view-type') == 4){ 18593 $(".four-view").addClass("active"); 18594} 18595 18596$(".two-view").click(function(){ 18597 $(".product-view-select a").removeClass("active"); 18598 $(".two-view").addClass("active"); 18599}); 18600 18601$(".three-view").click(function(){ 18602 $(".product-view-select a").removeClass("active"); 18603 $(".three-view").addClass("active"); 18604}); 18605 18606$(".four-view").click(function(){ 18607 $(".product-view-select a").removeClass("active"); 18608 $(".four-view").addClass("active"); 18609}); 18610 18611function catFilterOrder(element){ 18612 $("#cat-filter-order-"+$(element).val()).prop('checked', true).click(); 18613} 18614</script>
18614<style type="text/css"> 18615 .swal-modal { 18616 background: #fff !important; 18617 border-radius: 10px !important; 18618 padding: 0 !important; 18619 } 18620 .swal-footer { 18621 background: #F1F1F1 !important; 18622 border-radius: 0 0 10px 10px; 18623 padding: 10px; 18624 text-align: center; 18625 } 18626 .swal-footer .swal-button:focus { 18627 box-shadow: none; 18628 } 18629 .swal-title { 18630 font-size: 20px!important; 18631 margin-top: 15px!important; 18632 margin-bottom: 10px!important; 18633 } 18634 .swal-text { 18635 font-size: 15px!important; 18636 font-weight: 500!important; 18637 color: #555!important; 18638 padding: 0 10px!important; 18639 } 18640 .swal-icon { 18641 margin: 5px auto 18642 } 18643 .swal-icon--success { 18644 color: #fff !important; 18645 } 18646 .swal-icon--success__ring { 18647 background: #a5dc86; 18648 z-index: 1 18649 } 18650 .swal-icon--success__hide-corners { 18651 background: transparent; 18652 } 18653 .swal-icon--success__line { 18654 background: #fff; 18655 } 18656 .swal-icon--error { 18657 background: #f27474; 18658 } 18659 .swal-icon--error__line { 18660 background: #fff; 18661 } 18662 </style>
18662<script type="text/javascript"> 18663 18664 $(function(){ 18665 18666 18667 submitMarketingEvents([{"platform":"google","event_name":"view_item_list","event_id":"","encrypted_data":"","params":{"item_list_id":"267","item_list_name":"ERKEK > Ayakkab\u0131","items":[{"item_id":"10731","item_name":"Cl 1302 Ye\u015fil Loafer Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":0,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10741","item_name":"Bottega 1314 Kahverengi S\u00fcet Loafer Erkek Ayakkab\u0131","item_brand":"Bottega Veneta","price":13500,"index":1,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10329","item_name":"Lora 1008 Haki Erkek Ayakkab\u0131","item_brand":"Lora piana","price":6499,"index":2,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Bot"},{"item_id":"10215","item_name":"Lv 872 Turkuaz Erkek Ayakkab\u0131","item_brand":"Louis Vuitton","price":6499,"index":3,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"9791","item_name":"Fendi 922 Bej Loafer Erkek Ayakkab\u0131","item_brand":"Fendi","price":6499,"index":4,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10306","item_name":"Mcq 983 Full Beyaz Desenli Erkek Ayakkab\u0131","item_brand":"Alexander Mcqueen","price":6499,"index":5,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10162","item_name":"Gg 805 Arkas\u0131 K\u0131rm\u0131z\u0131 Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":6499,"index":6,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10262","item_name":"Fendi 931 Siyah Sar\u0131 Beyaz Erkek Ayakkab\u0131","item_brand":"Fendi","price":6499,"index":7,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10733","item_name":"Cl 1301 Gri Loafer Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":8,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10452","item_name":"Cl 1169 Siyah Sneaker Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":9,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10201","item_name":"Gg 856 Arkas\u0131 Gold Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":6499,"index":10,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10289","item_name":"Prada 962 Deri Siyah T\u0131rnakl\u0131 Erkek Ayakkab\u0131","item_brand":"Prada","price":6499,"index":11,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10250","item_name":"Lora 914 Krem Bo\u011fazl\u0131 Erkek Ayakkab\u0131","item_brand":"Lora piana","price":6499,"index":12,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Bot"},{"item_id":"10236","item_name":"Dg 894 Siyah Gri Erkek Ayakkab\u0131","item_brand":"Dolce Gabbana","price":6499,"index":13,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10454","item_name":"Prada 1171 Krem Loafer S\u00fcet Erkek Ayakkab\u0131","item_brand":"Prada","price":12500,"index":14,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10334","item_name":"Dior 1015 Full Gri Beyaz Taban Erkek Ayakkab\u0131","item_brand":"Dior","price":6499,"index":15,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10177","item_name":"Amiri 823 Siyah Erkek Ayakkab\u0131","item_brand":"Amiri","price":6499,"index":16,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10273","item_name":"Dior 943 Siyah Logosu Kuma\u015f Erkek Ayakkab\u0131","item_brand":"Dior","price":6499,"index":17,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10164","item_name":"Gg 807 Siyah Bo\u011fazl\u0131 Beyaz Y\u0131ld\u0131z Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":6499,"index":18,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Bo\u011fazl\u0131 Sneaker"},{"item_id":"10305","item_name":"Mcq 982 Ful Beyaz Arkas\u0131 Fermarl\u0131 Erkek Ayakkab\u0131","item_brand":"Alexander Mcqueen","price":6499,"index":19,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10158","item_name":"Gg 799 Arkas\u0131 G\u00fcm\u00fc\u015f Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":6499,"index":20,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10261","item_name":"Fendi 930 Siyah Sar\u0131 Erkek Ayakkab\u0131","item_brand":"Fendi","price":6499,"index":21,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10451","item_name":"Cl 1168 Gri Sneaker Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":22,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10200","item_name":"Gg 855 Beyaz T\u00fcyl\u00fc Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":6499,"index":23,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"}]}},{"platform":"facebook","event_name":"ViewContent","event_id":"","encrypted_data":"","params":{"content_name":"ERKEK > Ayakkab\u0131","content_type":"product","content_ids":["10731","10741","10329","10215","9791","10306","10162","10262","10733","10452","10201","10289","10250","10236","10454","10334","10177","10273","10164","10305","10158","10261","10451","10200"]}}]); 18668 18669 }); 18670 </script>
18670<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"972563036cf44d718609e76697e7f07c","r":1,"spa":2}' crossorigin="anonymous"></script>
18670 18671</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.