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 TÃM ÃRÃNLERDE %20 İNDİRİM! SON GÃN! 92 </a><a href="javascript:;" class="item" style="color: #ffffff"> 93 TÃM ÃRÃNLERDE %20 İNDİRİM! SON GÃN! 94 </a><a href="javascript:;" class="item" style="color: #ffffff"> 95 TÃM ÃRÃNLERDE %20 İNDİRİM! SON GÃN! 96 </a><a href="javascript:;" class="item" style="color: #ffffff"> 97 TÃM ÃRÃNLERDE %20 İNDİRİM! SON GÃN! 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-283"><a href="https://www.vezzalux.com/tek-kalanlar" data-id="283"><span class="name ">KADIN TEK KALANLAR</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 ">ERKEK TEK KALANLAR</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#6d04030b022d1b0817170c011815430e0200"><i class="coreicon-envelope-1 mr-2"></i><span>
156 <span class="__cf_email__" data-cfemail="1970777f76596f7c636378756c61377a7674">[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/tek-kalanlar"> 287 KADIN TEK KALANLAR 288 </a></li><li><a href="https://www.vezzalux.com/erkek-tek-kalanlar"> 289 ERKEK TEK KALANLAR 290 </a></li><li class="menu-markalar-item"><input type="checkbox" id="sub-markalar" class="submenu-toggle"><label class="submenu-label" for="sub-markalar"> 291 Markalar 292 </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 293 </label></strong></li><li class="menu-sub-all-link"><a href="https://www.vezzalux.com/markalar"><i class="fas fa-th"></i> 294 Tümünü Gör (Markalar) 295 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/adidas"> 296 Adidas 297 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/alaia"> 298 Alaia 299 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/alexander-mcqueen"> 300 Alexander Mcqueen 301 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/amina-muaddi"> 302 Amina Muaddi 303 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/amiri"> 304 Amiri 305 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/aquazzura"> 306 Aquazzura 307 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/balenciaga"> 308 Balenciaga 309 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/balmain"> 310 Balmain 311 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/bottega-veneta"> 312 Bottega Veneta 313 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/brunnella-cucinelli"> 314 Brunnella Cucinelli 315 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/celine"> 316 Celine 317 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/chanel"> 318 Chanel 319 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/chloe"> 320 Chloe 321 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/christian-louboutin"> 322 Christian Louboutin 323 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dior"> 324 Dior 325 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dolce-gabbana"> 326 Dolce Gabbana 327 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/dsq2"> 328 Dsq2 329 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/fendi"> 330 Fendi 331 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ferragamo"> 332 Ferragamo 333 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/givenchy"> 334 Givenchy 335 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/golden-goose"> 336 Golden Goose 337 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/goyard"> 338 Goyard 339 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/gucci"> 340 Gucci 341 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/hermes"> 342 Hermes 343 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/jimmy-choo"> 344 Jimmy Choo 345 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/loewe"> 346 Loewe 347 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/lora-piana"> 348 Lora piana 349 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/louis-vuitton"> 350 Louis Vuitton 351 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/mach-mach"> 352 Mach Mach 353 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/miu-miu"> 354 Miu Miu 355 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/moncler"> 356 Moncler 357 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/montblanc"> 358 Montblanc 359 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/off-white"> 360 Off White 361 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/prada"> 362 Prada 363 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/premiata"> 364 Premiata 365 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/stella-c"> 366 Stella C. 367 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/the-row"> 368 The Row 369 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ugg"> 370 Ugg 371 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/valentino"> 372 Valentino 373 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/versace"> 374 Versace 375 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/ysl"> 376 Ysl 377 </a></li><li class="menu-marka-item"><a href="https://www.vezzalux.com/zegna"> 378 Zegna 379 </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"> 380 Alt Kategoriler 381 </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"> 382 Markalar 383 </div></div></div><div class="p-g-mod-body "><style> 384.lux-size-global-filter-module { 385 display: block !important; 386 width: 100%; 387} 388 389.lux-size-filter-group { 390 display: block; 391 width: 100%; 392 margin-bottom: 24px; 393} 394 395.lux-size-filter-title { 396 display: block; 397 margin-bottom: 12px; 398 font-size: 12px; 399 font-weight: 700; 400 color: #111; 401 letter-spacing: .8px; 402 text-transform: uppercase; 403} 404 405.lux-size-filter-group .category-filter-list { 406 display: block !important; 407 width: 100%; 408 visibility: visible !important; 409 opacity: 1 !important; 410} 411 412.lux-size-button-list { 413 display: flex; 414 flex-wrap: wrap; 415 gap: 8px; 416} 417 418.lux-size-btn { 419 display: inline-flex; 420 align-items: center; 421 justify-content: center; 422 min-height: 34px; 423 min-width: 42px; 424 padding: 7px 14px; 425 border: 1px solid #ddd; 426 border-radius: 20px; 427 background: #fff; 428 color: #111; 429 font-size: 13px; 430 font-weight: 500; 431 line-height: 1; 432 cursor: pointer; 433 margin: 0; 434 transition: all .2s ease; 435 text-decoration: none !important; 436} 437 438.lux-size-btn:hover { 439 border-color: #111; 440 color: #111; 441} 442 443.lux-size-btn.is-active { 444 background: #111; 445 border-color: #111; 446 color: #fff !important; 447} 448 449.lux-size-loading { 450 display: none; 451 font-size: 12px; 452 color: #999; 453 padding: 6px 0; 454} 455</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=""> 456 Tümü 457 </a><a href="javascript:;" 458 class="lux-size-btn" 459 data-size-filter="36"> 460 36 461 </a><a href="javascript:;" 462 class="lux-size-btn" 463 data-size-filter="37"> 464 37 465 </a><a href="javascript:;" 466 class="lux-size-btn" 467 data-size-filter="38"> 468 38 469 </a><a href="javascript:;" 470 class="lux-size-btn" 471 data-size-filter="39"> 472 39 473 </a><a href="javascript:;" 474 class="lux-size-btn" 475 data-size-filter="40"> 476 40 477 </a><a href="javascript:;" 478 class="lux-size-btn" 479 data-size-filter="41"> 480 41 481 </a><a href="javascript:;" 482 class="lux-size-btn" 483 data-size-filter="42"> 484 42 485 </a><a href="javascript:;" 486 class="lux-size-btn" 487 data-size-filter="43"> 488 43 489 </a><a href="javascript:;" 490 class="lux-size-btn" 491 data-size-filter="44"> 492 44 493 </a><a href="javascript:;" 494 class="lux-size-btn" 495 data-size-filter="45"> 496 45 497 </a><a href="javascript:;" 498 class="lux-size-btn" 499 data-size-filter="46"> 500 46 501 </a></div><div class="lux-size-loading" id="luxSizeLoading"> 502 Ãrünler filtreleniyor... 503 </div></div>
vendor: 108 bytes, line 503
503<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
503<script> 504document.addEventListener('DOMContentLoaded', function(){ 505 506 var filterBox = document.getElementById('luxSizeGlobalFilter'); 507 if(!filterBox) return; 508 509 var loadingEl = document.getElementById('luxSizeLoading'); 510 511 var PRODUCTS_PER_PAGE = 24; 512 var PAGE_CONCURRENT_LIMIT = 4; 513 var VARIANT_CONCURRENT_LIMIT = 8; 514 var MAX_PAGES_SAFE = 120; 515 516 var productMap = {}; 517 var productQueue = []; 518 var activeSizes = []; 519 var currentCustomPage = 1; 520 var allPagesLoaded = false; 521 var variantsLoaded = false; 522 var requestRunning = false; 523 524 function clean(v){ 525 return String(v || '').replace(/\s+/g, ' ').trim(); 526 } 527 528 function norm(v){ 529 return clean(v).toLocaleUpperCase('tr-TR'); 530 } 531 532 function getUrlSizes(){ 533 var url = new URL(window.location.href); 534 var raw = url.searchParams.get('bedenler') || ''; 535 536 if(!raw) return []; 537 538 return raw.split(',') 539 .map(function(v){ return norm(v); }) 540 .filter(function(v){ return v !== ''; }); 541 } 542 543 function setUrlSizes(sizes){ 544 var url = new URL(window.location.href); 545 546 if(sizes && sizes.length){ 547 url.searchParams.set('bedenler', sizes.join(',')); 548 } else { 549 url.searchParams.delete('bedenler'); 550 } 551 552 url.searchParams.delete('sayfa'); 553 url.searchParams.delete('page'); 554 555 window.history.replaceState({}, '', url.toString()); 556 } 557 558 function getGrid(){ 559 return document.getElementById('luxProductGrid'); 560 } 561 562 function getProductsArea(){ 563 return document.getElementById('luxCategoryProductsArea'); 564 } 565 566 function getNativePagination(){ 567 return document.getElementById('luxNativePagination'); 568 } 569 570 function getCustomPagination(){ 571 return document.getElementById('luxCustomPagination'); 572 } 573 574 function getCustomEmpty(){ 575 return document.getElementById('luxCustomEmpty'); 576 } 577 578 function getPerPage(){ 579 var area = getProductsArea(); 580 var value = area ? parseInt(area.getAttribute('data-lux-per-page') || '', 10) : 0; 581 582 if(!isNaN(value) && value > 0){ 583 return value; 584 } 585 586 return PRODUCTS_PER_PAGE; 587 } 588 589 function activateLuxImages(scope){ 590 scope = scope || document; 591 592 scope.querySelectorAll('img').forEach(function(img){ 593 var dataSrc = 594 img.getAttribute('data-src') || 595 img.getAttribute('data-original') || 596 img.getAttribute('data-lazy') || 597 img.getAttribute('data-lazy-src') || 598 img.getAttribute('data-echo'); 599 600 var dataSrcset = img.getAttribute('data-srcset'); 601 602 if(dataSrcset){ 603 img.setAttribute('srcset', dataSrcset); 604 img.removeAttribute('data-srcset'); 605 } 606 607 if(dataSrc){ 608 img.setAttribute('src', dataSrc); 609 610 img.removeAttribute('data-src'); 611 img.removeAttribute('data-original'); 612 img.removeAttribute('data-lazy'); 613 img.removeAttribute('data-lazy-src'); 614 img.removeAttribute('data-echo'); 615 616 img.classList.remove('lazyload'); 617 img.classList.remove('lazy'); 618 img.classList.add('lazyloaded'); 619 } 620 621 if(img.getAttribute('loading') === 'lazy'){ 622 img.setAttribute('loading', 'eager'); 623 } 624 }); 625 626 if(window.lazyLoadInstance && typeof window.lazyLoadInstance.update === 'function'){ 627 try { 628 window.lazyLoadInstance.update(); 629 } catch(e){} 630 } 631 632 if(typeof LazyLoad !== 'undefined'){ 633 try { 634 new LazyLoad(); 635 } catch(e){} 636 } 637 638 if(typeof lazyLoadInstance !== 'undefined' && lazyLoadInstance.update){ 639 try { 640 lazyLoadInstance.update(); 641 } catch(e){} 642 } 643 } 644 645 function getCacheKey(link){ 646 return 'lux_global_size_cache_v2_' + encodeURIComponent(link); 647 } 648 649 function getCachedSizes(link){ 650 try { 651 var raw = sessionStorage.getItem(getCacheKey(link)); 652 if(!raw) return null; 653 654 var data = JSON.parse(raw); 655 if(!data || !data.time || !data.sizes) return null; 656 657 var ttl = 30 * 60 * 1000; 658 659 if(Date.now() - data.time > ttl) return null; 660 661 return data.sizes; 662 } catch(e){ 663 return null; 664 } 665 } 666
667 function setCachedSizes(link, sizes){ 668 try { 669 sessionStorage.setItem(getCacheKey(link), JSON.stringify({ 670 time: Date.now(), 671 sizes: sizes 672 })); 673 } catch(e){} 674 } 675 676 function isSoldOut(el){ 677 if(!el) return false; 678 679 var cls = String(el.className || '').toLowerCase(); 680 681 if(cls.indexOf('sold-out') !== -1) return true; 682 if(cls.indexOf('soldout') !== -1) return true; 683 if(cls.indexOf('sold_out') !== -1) return true; 684 if(cls.indexOf('disabled') !== -1) return true; 685 if(cls.indexOf('stoksuz') !== -1) return true; 686 if(cls.indexOf('out-of-stock') !== -1) return true; 687 if(cls.indexOf('outstock') !== -1) return true; 688 if(cls.indexOf('stok-yok') !== -1) return true; 689 if(cls.indexOf('pasif') !== -1) return true; 690 if(cls.indexOf('passive') !== -1) return true; 691 692 if(el.hasAttribute('disabled')) return true; 693 if(el.getAttribute('aria-disabled') === 'true') return true; 694 if(el.getAttribute('data-in-stock') === '0') return true; 695 if(el.getAttribute('data-in-stock') === 'false') return true; 696 if(el.getAttribute('data-stokta-var-mi') === '0') return true; 697 if(el.getAttribute('data-stokta-var-mi') === 'false') return true; 698 699 return false; 700 } 701 702 function isSizeTitle(v){ 703 v = norm(v); 704 705 return ( 706 v === 'BEDEN' || 707 v === 'BEDENLER' || 708 v === 'NUMARA' || 709 v === 'SIZE' || 710 v.indexOf('BEDEN') !== -1 || 711 v.indexOf('NUMARA') !== -1 || 712 v.indexOf('SIZE') !== -1 713 ); 714 } 715 716 function getProductWrapper(card){ 717 return card.closest('[data-lux-product-shell="1"]') || 718 card.closest('.col-list-p-v-1') || 719 card.closest('[class*="col-"]') || 720 card.parentElement; 721 } 722 723 function registerCard(card){ 724 var productId = clean(card.getAttribute('data-lux-card-id')); 725 var link = clean(card.getAttribute('data-lux-product-link')); 726 727 if(!productId || !link) return; 728 if(productMap[productId]) return; 729 730 var wrapper = getProductWrapper(card); 731 732 productMap[productId] = { 733 id: productId, 734 link: link, 735 card: card, 736 wrapper: wrapper, 737 sizes: [], 738 loaded: false 739 }; 740 741 productQueue.push({ 742 id: productId, 743 link: link 744 }); 745 } 746 747 function collectCurrentProducts(){ 748 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){ 749 registerCard(card); 750 }); 751 } 752 753 function buildPageUrl(pageNo){ 754 var url = new URL(window.location.href); 755 756 url.searchParams.set('sayfa', pageNo); 757 url.searchParams.delete('page'); 758 url.searchParams.delete('bedenler'); 759 760 return url.toString(); 761 } 762 763 function fetchPage(pageNo){ 764 return fetch(buildPageUrl(pageNo), { 765 method: 'GET', 766 credentials: 'same-origin', 767 headers: { 768 'Accept': 'text/html' 769 } 770 }) 771 .then(function(r){ 772 return r.text(); 773 }) 774 .then(function(html){ 775 var doc = new DOMParser().parseFromString(html, 'text/html'); 776 var shells = doc.querySelectorAll('#luxProductGrid [data-lux-product-shell="1"]'); 777 778 if(!shells.length){ 779 shells = doc.querySelectorAll('.col-list-p-v-1'); 780 } 781 782 if(!shells.length) return 0; 783 784 var grid = getGrid(); 785 if(!grid) return 0; 786 787 var frag = document.createDocumentFragment(); 788 var added = 0; 789 790 shells.forEach(function(shell){ 791 var card = shell.querySelector('.card-product[data-lux-card-id][data-lux-product-link]'); 792 if(!card) return; 793 794 var productId = clean(card.getAttribute('data-lux-card-id')); 795 if(!productId || productMap[productId]) return; 796 797 var clone = shell.cloneNode(true); 798 799 clone.style.display = 'none'; 800 clone.setAttribute('data-lux-product-shell', '1'); 801 clone.setAttribute('data-lux-added-page', pageNo); 802 803 frag.appendChild(clone); 804 added++; 805 }); 806 807 if(frag.childNodes.length){ 808 grid.appendChild(frag); 809 810 grid.querySelectorAll('[data-lux-added-page="' + pageNo + '"]').forEach(function(shell){ 811 activateLuxImages(shell); 812 }); 813 814 grid.querySelectorAll('[data-lux-added-page="' + pageNo + '"] .card-product[data-lux-card-id][data-lux-product-link]').forEach(function(card){ 815 registerCard(card); 816 }); 817 } 818 819 return added; 820 }) 821 .catch(function(){ 822 return 0; 823 }); 824 } 825 826 function runLimited(items, limit, worker, done){ 827 var index = 0; 828 var active = 0; 829 var finished = 0; 830 var total = items.length; 831 832 if(total === 0){ 833 done(); 834 return; 835 } 836 837 function next(){ 838 while(active < limit && index < total){ 839 var item = items[index++]; 840 active++; 841 842 worker(item).then(function(){ 843 active--; 844 finished++; 845 846 if(finished >= total){ 847 done(); 848 } else { 849 next(); 850 } 851 }); 852 } 853 } 854 855 next(); 856 } 857 858 function fetchAllPages(done){ 859 if(allPagesLoaded){ 860 done(); 861 return; 862 } 863 864 var area = getProductsArea(); 865 var twigTotalPage = area ? parseInt(area.getAttribute('data-lux-total-page') || '1', 10) : 1; 866 867 if(!isNaN(twigTotalPage) && twigTotalPage > 1){ 868 var pages = []; 869 870 for(var p = 2; p <= twigTotalPage; p++){ 871 pages.push(p); 872 } 873 874 runLimited(pages, PAGE_CONCURRENT_LIMIT, fetchPage, function(){ 875 allPagesLoaded = true; 876 done(); 877 }); 878 879 return; 880 } 881 882 var nextPage = 2; 883 var stop = false;
884 885 function batch(){ 886 if(stop || nextPage > MAX_PAGES_SAFE){ 887 allPagesLoaded = true; 888 done(); 889 return; 890 } 891 892 var pages = []; 893 894 for(var i = 0; i < PAGE_CONCURRENT_LIMIT; i++){ 895 pages.push(nextPage); 896 nextPage++; 897 } 898 899 Promise.all(pages.map(fetchPage)).then(function(results){ 900 var added = 0; 901 902 results.forEach(function(count){ 903 added += parseInt(count || 0, 10); 904 }); 905 906 if(added <= 0){ 907 stop = true; 908 allPagesLoaded = true; 909 done(); 910 } else { 911 batch(); 912 } 913 }).catch(function(){ 914 allPagesLoaded = true; 915 done(); 916 }); 917 } 918 919 batch(); 920 } 921 922 function parseSizesFromHtml(html){ 923 var doc = new DOMParser().parseFromString(html, 'text/html'); 924 var sizes = []; 925 926 var variantBox = doc.querySelector('.variant-box'); 927 if(!variantBox) return sizes; 928 929 var variants = variantBox.querySelectorAll('.variant, li[data-variant-baslik], [data-variant-baslik]'); 930
931 variants.forEach(function(li, index){ 932 var title = ''; 933 934 var nameEl = li.querySelector('.name'); 935 936 if(nameEl){ 937 title = clean(nameEl.textContent.replace(':', '')); 938 } 939 940 if(!title){ 941 title = clean( 942 li.getAttribute('data-variant-baslik') || 943 li.getAttribute('data-variant-name') || 944 li.getAttribute('data-variant-title') || 945 '' 946 ); 947 } 948 949 var shouldRead = isSizeTitle(title); 950 951 if(!shouldRead && index === 0){ 952 shouldRead = true; 953 } 954 955 if(!shouldRead) return; 956 957 var optionLinks = li.querySelectorAll('.options a[data-variant-value], .options a, a[data-variant-value]'); 958 959 if(optionLinks.length > 0){ 960 optionLinks.forEach(function(a){ 961 if(isSoldOut(a)) return; 962 963 var val = clean( 964 a.getAttribute('data-variant-value') || 965 a.getAttribute('data-value') || 966 a.textContent 967 ); 968 969 if(val && sizes.indexOf(val) === -1){ 970 sizes.push(val); 971 } 972 }); 973 } else { 974 var select = li.querySelector('select'); 975 976 if(select){ 977 select.querySelectorAll('option').forEach(function(opt){ 978 if(!opt.value) return; 979 if(isSoldOut(opt)) return; 980 981 var val = clean( 982 opt.getAttribute('data-variant-value') || 983 opt.value || 984 opt.textContent 985 ); 986 987 if(val && sizes.indexOf(val) === -1){ 988 sizes.push(val); 989 } 990 }); 991 } 992 } 993 }); 994 995 return sizes; 996 } 997 998 function fetchProductSizes(item){ 999 var product = productMap[item.id]; 1000 1001 if(!product){ 1002 return Promise.resolve([]); 1003 } 1004 1005 if(product.loaded){ 1006 return Promise.resolve(product.sizes); 1007 } 1008 1009 var cached = getCachedSizes(item.link); 1010 1011 if(cached){ 1012 product.sizes = cached; 1013 product.loaded = true; 1014 product.card.setAttribute('data-lux-stock-sizes', cached.join('|')); 1015 1016 return Promise.resolve(cached); 1017 } 1018 1019 return fetch(item.link, { 1020 method: 'GET', 1021 credentials: 'same-origin', 1022 headers: { 1023 'Accept': 'text/html' 1024 } 1025 }) 1026 .then(function(r){ 1027 return r.text(); 1028 }) 1029 .then(function(html){ 1030 var sizes = parseSizesFromHtml(html); 1031 1032 product.sizes = sizes; 1033 product.loaded = true; 1034 product.card.setAttribute('data-lux-stock-sizes', sizes.join('|')); 1035 1036 setCachedSizes(item.link, sizes); 1037 1038 return sizes; 1039 }) 1040 .catch(function(){ 1041 product.sizes = []; 1042 product.loaded = true; 1043 product.card.setAttribute('data-lux-stock-sizes', ''); 1044 1045 return []; 1046 }); 1047 } 1048 1049 function fetchAllVariants(done){ 1050 if(variantsLoaded){ 1051 done(); 1052 return; 1053 } 1054 1055 var unique = []; 1056 var seen = {}; 1057 1058 productQueue.forEach(function(item){ 1059 if(!seen[item.id]){ 1060 seen[item.id] = true; 1061 unique.push(item); 1062 } 1063 }); 1064 1065 productQueue = unique; 1066 1067 runLimited(productQueue, VARIANT_CONCURRENT_LIMIT, fetchProductSizes, function(){ 1068 variantsLoaded = true; 1069 done(); 1070 }); 1071 } 1072 1073 function getFilteredProducts(){ 1074 var list = []; 1075 1076 Object.keys(productMap).forEach(function(productId){ 1077 var product = productMap[productId]; 1078 1079 if(!activeSizes.length){ 1080 list.push(product); 1081 return; 1082 } 1083 1084 var hasSize = false;
1085 1086 product.sizes.forEach(function(size){ 1087 if(activeSizes.indexOf(norm(size)) !== -1){ 1088 hasSize = true; 1089 } 1090 }); 1091 1092 if(hasSize){ 1093 list.push(product); 1094 } 1095 }); 1096 1097 return list; 1098 } 1099 1100 function setPaginationMode(){ 1101 var area = getProductsArea(); 1102 var nativePagination = getNativePagination(); 1103 var customPagination = getCustomPagination(); 1104 1105 if(activeSizes.length){ 1106 document.body.classList.add('lux-size-filter-active'); 1107 1108 if(area){ 1109 area.classList.add('is-lux-filter-active'); 1110 } 1111 1112 if(nativePagination){ 1113 nativePagination.style.display = 'none'; 1114 } 1115 1116 if(customPagination){ 1117 customPagination.style.display = 'flex'; 1118 } 1119 } else { 1120 document.body.classList.remove('lux-size-filter-active'); 1121 1122 if(area){ 1123 area.classList.remove('is-lux-filter-active'); 1124 } 1125 1126 if(nativePagination){ 1127 nativePagination.style.display = ''; 1128 } 1129 1130 if(customPagination){ 1131 customPagination.style.display = 'none'; 1132 customPagination.innerHTML = ''; 1133 } 1134 } 1135 } 1136 1137 function resetToNativeMode(){ 1138 setPaginationMode(); 1139 1140 Object.keys(productMap).forEach(function(productId){ 1141 var product = productMap[productId]; 1142 1143 if(!product.wrapper) return; 1144 1145 if(product.wrapper.getAttribute('data-lux-added-page')){ 1146 product.wrapper.style.display = 'none'; 1147 } else { 1148 product.wrapper.style.display = ''; 1149 activateLuxImages(product.wrapper); 1150 } 1151 }); 1152 1153 var emptyBox = getCustomEmpty(); 1154 1155 if(emptyBox){ 1156 emptyBox.style.display = 'none'; 1157 } 1158 } 1159 1160 function renderFilteredProducts(){ 1161 setPaginationMode(); 1162 1163 if(!activeSizes.length){ 1164 resetToNativeMode(); 1165 return; 1166 } 1167 1168 var products = getFilteredProducts(); 1169 var total = products.length; 1170 var perPage = getPerPage(); 1171 var totalPages = Math.max(1, Math.ceil(total / perPage)); 1172 var emptyBox = getCustomEmpty(); 1173 1174 if(currentCustomPage < 1){ 1175 currentCustomPage = 1; 1176 } 1177 1178 if(currentCustomPage > totalPages){ 1179 currentCustomPage = totalPages; 1180 } 1181 1182 Object.keys(productMap).forEach(function(productId){ 1183 var product = productMap[productId]; 1184 1185 if(product.wrapper){ 1186 product.wrapper.style.display = 'none'; 1187 } 1188 }); 1189 1190 if(total === 0){ 1191 if(emptyBox){ 1192 emptyBox.style.display = 'block'; 1193 } 1194 1195 renderCustomPagination(totalPages); 1196 return; 1197 } 1198 1199 if(emptyBox){ 1200 emptyBox.style.display = 'none'; 1201 } 1202 1203 var start = (currentCustomPage - 1) * perPage; 1204 var end = start + perPage; 1205 1206 products.slice(start, end).forEach(function(product){ 1207 if(product.wrapper){ 1208 product.wrapper.style.display = ''; 1209 activateLuxImages(product.wrapper); 1210 } 1211 }); 1212 1213 renderCustomPagination(totalPages); 1214 } 1215 1216 function paginationNumbers(current, total){ 1217 var arr = []; 1218 var delta = 2; 1219 1220 if(total <= 7){ 1221 for(var i = 1; i <= total; i++){ 1222 arr.push(i); 1223 } 1224 1225 return arr; 1226 } 1227 1228 arr.push(1); 1229 1230 if(current - delta > 2){ 1231 arr.push('...'); 1232 } 1233 1234 for(var j = Math.max(2, current - delta); j <= Math.min(total - 1, current + delta); j++){ 1235 arr.push(j); 1236 } 1237 1238 if(current + delta < total - 1){ 1239 arr.push('...'); 1240 } 1241 1242 arr.push(total); 1243 1244 return arr; 1245 } 1246 1247 function renderCustomPagination(totalPages){ 1248 var pagination = getCustomPagination(); 1249 1250 if(!pagination) return; 1251 1252 pagination.innerHTML = ''; 1253 1254 if(!activeSizes.length || totalPages <= 1){ 1255 pagination.style.display = 'none'; 1256 return; 1257 } 1258 1259 pagination.style.display = 'flex'; 1260 1261 function makeButton(label, disabled, active, callback){ 1262 var btn = document.createElement('button'); 1263 1264 btn.type = 'button'; 1265 btn.innerHTML = label; 1266 btn.disabled = !!disabled; 1267 1268 if(active){ 1269 btn.classList.add('is-active'); 1270 } 1271 1272 if(!disabled && typeof callback === 'function'){ 1273 btn.addEventListener('click', callback); 1274 } 1275 1276 return btn; 1277 } 1278 1279 pagination.appendChild(makeButton('â¹', currentCustomPage <= 1, false, function(){ 1280 currentCustomPage--; 1281 renderFilteredProducts(); 1282 scrollToProducts(); 1283 })); 1284
1285 paginationNumbers(currentCustomPage, totalPages).forEach(function(page){ 1286 if(page === '...'){ 1287 var span = document.createElement('span'); 1288 span.textContent = '...'; 1289 pagination.appendChild(span); 1290 } else { 1291 pagination.appendChild(makeButton(page, false, page === currentCustomPage, function(){ 1292 currentCustomPage = page; 1293 renderFilteredProducts(); 1294 scrollToProducts(); 1295 })); 1296 } 1297 }); 1298 1299 pagination.appendChild(makeButton('âº', currentCustomPage >= totalPages, false, function(){ 1300 currentCustomPage++; 1301 renderFilteredProducts(); 1302 scrollToProducts(); 1303 })); 1304 } 1305 1306 function scrollToProducts(){ 1307 var grid = getGrid(); 1308 1309 if(grid){ 1310 grid.scrollIntoView({ 1311 behavior: 'smooth', 1312 block: 'start' 1313 }); 1314 } 1315 } 1316 1317 function updateButtons(){ 1318 document.querySelectorAll('.lux-size-btn').forEach(function(btn){ 1319 var size = norm(btn.getAttribute('data-size-filter') || ''); 1320 1321 if(size === ''){ 1322 btn.classList.toggle('is-active', activeSizes.length === 0); 1323 } else { 1324 btn.classList.toggle('is-active', activeSizes.indexOf(size) !== -1); 1325 } 1326 }); 1327 } 1328 1329 function startGlobalFilter(){ 1330 if(requestRunning) return; 1331 1332 if(!activeSizes.length){ 1333 resetToNativeMode(); 1334 return; 1335 } 1336 1337 requestRunning = true; 1338 1339 if(loadingEl){ 1340 loadingEl.style.display = 'block'; 1341 } 1342 1343 collectCurrentProducts(); 1344 1345 fetchAllPages(function(){ 1346 fetchAllVariants(function(){ 1347 requestRunning = false; 1348 1349 if(loadingEl){ 1350 loadingEl.style.display = 'none'; 1351 } 1352 1353 renderFilteredProducts(); 1354 }); 1355 }); 1356 } 1357 1358 function bindButtons(){ 1359 document.querySelectorAll('.lux-size-btn').forEach(function(btn){ 1360 btn.onclick = function(e){ 1361 e.preventDefault(); 1362 1363 if(requestRunning) return; 1364 1365 var selected = norm(this.getAttribute('data-size-filter') || ''); 1366 1367 if(selected === ''){ 1368 activeSizes = []; 1369 } else { 1370 var index = activeSizes.indexOf(selected); 1371 1372 if(index === -1){ 1373 activeSizes.push(selected); 1374 } else { 1375 activeSizes.splice(index, 1); 1376 } 1377 } 1378 1379 currentCustomPage = 1; 1380 1381 setUrlSizes(activeSizes); 1382 updateButtons(); 1383 startGlobalFilter(); 1384 }; 1385 }); 1386 } 1387 1388 function init(){ 1389 activeSizes = getUrlSizes(); 1390 1391 collectCurrentProducts(); 1392 bindButtons(); 1393 updateButtons(); 1394 activateLuxImages(document); 1395 1396 if(activeSizes.length){ 1397 startGlobalFilter(); 1398 } else { 1399 resetToNativeMode(); 1400 } 1401 } 1402 1403 init(); 1404 1405}); 1406</script>
1406</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"> 1407 Fiyat Aralıkları 1408 </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" 1409 data-smart-cat-search="1" placeholder="En Az" 1410 value="" /><span class="seperator">-</span><input class="form-control number-input" name="smart-cat-max-price" 1411 data-smart-cat-search="1" placeholder="En Ãok" 1412 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"> 1413 Listeleme 1414 </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> 1415.cat-lux-action-module { 1416 display: block !important; 1417 visibility: visible !important; 1418 opacity: 1 !important; 1419} 1420 1421.cat-lux-filter-actions { 1422 width: 100%; 1423 display: flex !important; 1424 align-items: center; 1425 justify-content: space-between; 1426 gap: 10px; 1427 padding: 14px 0; 1428 margin: 10px 0 16px; 1429 position: relative; 1430 z-index: 50; 1431 visibility: visible !important; 1432 opacity: 1 !important; 1433} 1434 1435.cat-lux-filter-btn { 1436 min-height: 42px; 1437 padding: 11px 18px; 1438 border-radius: 4px; 1439 border: 1px solid #111; 1440 font-size: 13px; 1441 font-weight: 600; 1442 line-height: 1.2; 1443 text-decoration: none !important; 1444 display: inline-flex !important; 1445 align-items: center; 1446 justify-content: center; 1447 gap: 8px; 1448 cursor: pointer; 1449 font-family: inherit; 1450 transition: all .2s ease; 1451 visibility: visible !important; 1452 opacity: 1 !important; 1453 white-space: nowrap; 1454} 1455 1456.cat-lux-filter-btn-clear { 1457 background: #fff; 1458 color: #111 !important; 1459} 1460 1461.cat-lux-filter-btn-clear:hover { 1462 background: #111; 1463 color: #fff !important; 1464} 1465 1466.cat-lux-filter-btn-show { 1467 background: #111; 1468 color: #fff !important; 1469} 1470 1471.cat-lux-filter-btn-show:hover { 1472 background: #333; 1473 color: #fff !important; 1474} 1475 1476.cat-lux-filter-btn svg { 1477 width: 15px; 1478 height: 15px; 1479 stroke: currentColor; 1480 fill: none; 1481 stroke-width: 2; 1482} 1483 1484@media (min-width: 992px) { 1485 .cat-lux-filter-btn-show { 1486 display: none !important; 1487 } 1488 1489 .cat-lux-filter-actions { 1490 justify-content: flex-start; 1491 } 1492} 1493 1494@media (max-width: 991px) { 1495 .cat-lux-filter-actions { 1496 position: sticky; 1497 bottom: 0; 1498 left: 0; 1499 right: 0; 1500 background: #fff; 1501 padding: 12px; 1502 margin: 0; 1503 z-index: 9999; 1504 box-shadow: 0 -8px 24px rgba(0,0,0,.08); 1505 border-top: 1px solid #eee; 1506 } 1507 1508 .cat-lux-filter-btn { 1509 flex: 1; 1510 width: 50%; 1511 min-height: 46px; 1512 font-size: 13px; 1513 } 1514} 1515</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">
1515<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> 1516 Seçimleri Temizle 1517 </a><a href="javascript:;" 1518 onclick="if(typeof hideSmartCategoryPopup === 'function'){ hideSmartCategoryPopup(); } return false;" 1519 class="cat-lux-filter-btn cat-lux-filter-btn-show"> 1520 Ãrünleri Listele 1521 <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"> 1522 Ayakkabı 1523 </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" 1524 onchange="catFilterOrder(this)"><option selected value="cok-satanlar"> 1525 En çok satanlar 1526 </option><option value="en-yeniler"> 1527 En yeniler 1528 </option><option value="a-z"> 1529 Ãrün adı (A-Z) 1530 </option><option value="z-a"> 1531 Ãrün adı (Z-A) 1532 </option><option value="en-dusuk-fiyat"> 1533 En düÅük fiyat 1534 </option><option value="en-yuksek-fiyat"> 1535 En yüksek fiyat 1536 </option><option value="en-cok-oylanan"> 1537 En çok oylananlar 1538 </option></select><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1539 id="cat-filter-order-cok-satanlar" 1540 name="smart-cat-siralama" 1541 value="cok-satanlar" 1542 data-search-value="cok-satanlar" 1543 data-smart-cat-search="1" 1544 type="radio" 1545 checked 1546 ><label for="cat-filter-order-cok-satanlar"> 1547 En çok satanlar 1548 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1549 id="cat-filter-order-en-yeniler" 1550 name="smart-cat-siralama" 1551 value="en-yeniler" 1552 data-search-value="en-yeniler" 1553 data-smart-cat-search="1" 1554 type="radio" 1555 1556 ><label for="cat-filter-order-en-yeniler"> 1557 En yeniler 1558 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1559 id="cat-filter-order-a-z" 1560 name="smart-cat-siralama" 1561 value="a-z" 1562 data-search-value="a-z" 1563 data-smart-cat-search="1" 1564 type="radio" 1565 1566 ><label for="cat-filter-order-a-z"> 1567 Ãrün adı (A-Z) 1568 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1569 id="cat-filter-order-z-a" 1570 name="smart-cat-siralama" 1571 value="z-a" 1572 data-search-value="z-a" 1573 data-smart-cat-search="1" 1574 type="radio" 1575 1576 ><label for="cat-filter-order-z-a"> 1577 Ãrün adı (Z-A) 1578 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1579 id="cat-filter-order-en-dusuk-fiyat" 1580 name="smart-cat-siralama" 1581 value="en-dusuk-fiyat" 1582 data-search-value="en-dusuk-fiyat" 1583 data-smart-cat-search="1" 1584 type="radio" 1585 1586 ><label for="cat-filter-order-en-dusuk-fiyat"> 1587 En düÅük fiyat 1588 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1589 id="cat-filter-order-en-yuksek-fiyat" 1590 name="smart-cat-siralama" 1591 value="en-yuksek-fiyat" 1592 data-search-value="en-yuksek-fiyat" 1593 data-smart-cat-search="1" 1594 type="radio" 1595 1596 ><label for="cat-filter-order-en-yuksek-fiyat"> 1597 En yüksek fiyat 1598 </label></div></li><li class="category-filter-order-mobile"><div class="lag-checkbox"><input 1599 id="cat-filter-order-en-cok-oylanan" 1600 name="smart-cat-siralama" 1601 value="en-cok-oylanan" 1602 data-search-value="en-cok-oylanan" 1603 data-smart-cat-search="1" 1604 type="radio" 1605 1606 ><label for="cat-filter-order-en-cok-oylanan"> 1607 En çok oylananlar 1608 </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" 1609 id="luxCategoryProductsArea" 1610 data-lux-base-url="https://www.vezzalux.com/e-ayakkabi" 1611 data-lux-total-page="7" 1612 data-lux-per-page="24"><div class="row" id="luxProductGrid">
1612<div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 1613 data-lux-product-shell="1" 1614 data-lux-page="1"><style> 1615@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 1616 1617/* ===== VEZZA LUX CARD ===== */ 1618.card-product{ 1619 font-family:'Poppins',sans-serif; 1620 background:#fff !important; 1621 position:relative; 1622} 1623.card-product-inner{ 1624 background:transparent !important; 1625 position:relative; 1626} 1627.card-product .c-p-i-link, 1628.card-product a{ 1629 background:transparent !important; 1630} 1631.card-product-inner > div{ 1632 background:transparent !important; 1633} 1634.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 1635 background:transparent !important; 1636} 1637.card-product .card-product-content, 1638.card-product .price-group, 1639.card-product .prices{ 1640 background:transparent !important; 1641} 1642[class*="skeleton"], 1643[class*="placeholder"], 1644[class*="loading"]{ 1645 background:transparent !important; 1646} 1647 1648/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 1649.image-wrapper{ 1650 position:relative; 1651 width:100%; 1652 aspect-ratio:1/1; 1653 overflow:hidden; 1654 background:#fff !important; 1655} 1656 1657.image{ 1658 position:relative; 1659 width:100%; 1660 height:100%; 1661} 1662 1663.image-wrapper img{ 1664 width:100% !important; 1665 height:100% !important; 1666 object-fit:cover !important; 1667 object-position:center center !important; 1668 display:block; 1669 transition:transform .35s ease; 1670} 1671 1672/* ===== DISCOUNT ===== */ 1673.discount{ 1674 position:absolute; 1675 top:12px; 1676 left:12px; 1677 width:28px; 1678 height:48px; 1679 background:#e10b0b; 1680 color:#fff; 1681 font-size:12px; 1682 font-weight:600; 1683 display:flex; 1684 align-items:center; 1685 justify-content:center; 1686 writing-mode:vertical-rl; 1687 transform:rotate(180deg); 1688 letter-spacing:.5px; 1689 z-index:7; 1690} 1691 1692/* ===== FAV ===== */ 1693.lux-fav{ 1694 position:absolute; 1695 top:12px; 1696 right:12px; 1697 z-index:7; 1698} 1699.lux-fav a, 1700.lux-fav button{ 1701 background:transparent !important; 1702 border:0 !important; 1703 padding:0 !important; 1704 cursor:pointer; 1705 display:inline-flex; 1706 align-items:center; 1707 justify-content:center; 1708} 1709 1710/* ===== SEPET IKON ===== */ 1711.lux-bag{ 1712 position:absolute; 1713 bottom:12px; 1714 right:12px; 1715 z-index:7; 1716 width:34px; 1717 height:34px; 1718 display:inline-flex; 1719 align-items:center; 1720 justify-content:center; 1721 background:rgba(255,255,255,.92); 1722 border:1px solid rgba(0,0,0,.10); 1723 border-radius:10px; 1724 cursor:pointer; 1725 transition:.2s ease; 1726} 1727.lux-bag:hover{ 1728 background:#fff; 1729 border-color:rgba(0,0,0,.25); 1730} 1731.lux-bag.is-loading{ 1732 opacity:.6; 1733 cursor:wait; 1734} 1735.lux-bag.is-success{ 1736 background:#2e7d32 !important; 1737 border-color:#2e7d32 !important; 1738 color:#fff !important; 1739} 1740.card-product.sizes-open .lux-bag{ 1741 opacity:0; 1742 pointer-events:none; 1743} 1744 1745/* Loading spinner */ 1746.lux-bag.is-loading i::before{ 1747 content:"â³"; 1748} 1749 1750/* ===== SIZE STRIP ===== */ 1751.size-strip{ 1752 width:100%; 1753 max-height:0; 1754 overflow:hidden; 1755 background:#fff; 1756 display:flex; 1757 flex-wrap:wrap; 1758 transition:max-height .3s ease, border-color .3s ease; 1759 border-top:1px solid transparent; 1760 border-bottom:1px solid transparent; 1761} 1762.size-strip.open{ 1763 max-height:200px; 1764 border-top-color:rgba(0,0,0,.08); 1765 border-bottom-color:rgba(0,0,0,.08); 1766} 1767.size-item{ 1768 flex:1 0 auto; 1769 min-width:38px; 1770 height:42px; 1771 display:flex; 1772 align-items:center; 1773 justify-content:center; 1774 font-size:13px; 1775 font-weight:500; 1776 color:#111 !important; 1777 cursor:pointer; 1778 user-select:none; 1779 background:transparent; 1780 transition:background .15s ease, color .15s ease; 1781 border-right:1px solid rgba(0,0,0,.08); 1782} 1783.size-item:last-child{ border-right:0; } 1784.size-item:hover:not(.disabled):not(.adding){ 1785 background:#000 !important; 1786 color:#fff !important; 1787} 1788.size-item.disabled{ 1789 color:#111 !important; 1790 text-decoration:line-through !important; 1791 opacity:.30 !important; 1792 cursor:not-allowed; 1793} 1794.size-item.adding{ 1795 background:#2e7d32 !important; 1796 color:#fff !important; 1797 cursor:wait; 1798} 1799 1800/* ===== META ===== */ 1801.lux-meta{ 1802 padding:12px 6px 6px; 1803 background:transparent !important; 1804} 1805.lux-brand{ 1806 font-size:16px; 1807 font-weight:600; 1808 color:#111; 1809 margin-bottom:2px; 1810} 1811.lux-title{ 1812 font-size:14px; 1813 font-weight:400; 1814 line-height:1.45; 1815 color:#111; 1816 margin:0; 1817} 1818.lux-price{ 1819 margin-top:10px; 1820 display:flex; 1821 gap:10px; 1822 align-items:baseline; 1823 background:transparent !important; 1824} 1825.lux-price .list-price{ 1826 font-size:14px; 1827 font-weight:400; 1828 color:#111; 1829 text-decoration:line-through; 1830} 1831.lux-price .sale-price{ 1832 font-size:16px; 1833 font-weight:600; 1834 color:#e10b0b; 1835} 1836 1837.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
1838.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 1839</style><div class="card-product" 1840 id="card-10741" 1841 data-lux-card-id="10741" 1842 data-lux-product-link="https://www.vezzalux.com/bottega-1314-kahverengi-loafer-erkek-ayakkabi" 1843 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" 1844 onclick="userProductFavourite('add', 10741)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 1845 id="lux-bag-10741" 1846 onclick="return luxBagClick(event, 10741);" 1847 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>
1847<script> 1848(function(){ 1849 1850 /* Bir kez kur */ 1851 if(window.__luxCardInit) return; 1852 window.__luxCardInit = true; 1853 1854 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 1855 window.__luxVariantCache = window.__luxVariantCache || {}; 1856 1857 function closeAll(){ 1858 document.querySelectorAll('.size-strip.open').forEach(function(s){ 1859 s.classList.remove('open'); 1860 }); 1861 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 1862 c.classList.remove('sizes-open'); 1863 }); 1864 } 1865 1866 function flashSuccess(productId){ 1867 var bag = document.getElementById('lux-bag-' + productId); 1868 if(!bag) return; 1869 bag.classList.add('is-success'); 1870 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 1871 } 1872 1873 /* DıŠtıklama - kapat */ 1874 document.addEventListener('click', function(e){ 1875 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 1876 if(!inside) closeAll(); 1877 }); 1878 1879 document.addEventListener('keydown', function(e){ 1880 if(e.key === 'Escape') closeAll(); 1881 }); 1882 1883 1884 /* ============================================ 1885 MODAL KILLER - yedek güvence 1886 ============================================ */ 1887 var LUX_MODAL_KILL_ACTIVE = false; 1888 1889 function killVisibleModals(){ 1890 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 1891 modals.forEach(function(m){ 1892 var id = (m.id || '').toLowerCase(); 1893 var txt = (m.textContent || '').toLowerCase(); 1894 var isCartModal = id.indexOf('cart') > -1 1895 || id.indexOf('variant') > -1 1896 || id.indexOf('fast') > -1 1897 || id.indexOf('urun') > -1 1898 || txt.indexOf('lütfen seçin') > -1; 1899 1900 if(isCartModal){ 1901 if(typeof jQuery !== 'undefined'){ 1902 try { jQuery(m).modal('hide'); } catch(e){} 1903 } 1904 m.classList.remove('show','in'); 1905 m.style.display = 'none'; 1906 } 1907 }); 1908 1909 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 1910 document.body.classList.remove('modal-open'); 1911 document.body.style.overflow = ''; 1912 document.body.style.paddingRight = ''; 1913 } 1914 1915 function startModalKill(durationMs){ 1916 if(LUX_MODAL_KILL_ACTIVE) return; 1917 LUX_MODAL_KILL_ACTIVE = true; 1918 killVisibleModals(); 1919 var interval = setInterval(killVisibleModals, 50); 1920 setTimeout(function(){ 1921 clearInterval(interval); 1922 LUX_MODAL_KILL_ACTIVE = false; 1923 }, durationMs || 2000); 1924 } 1925 1926 1927 /* ============================================ 1928 AJAX: Varyantları detay sayfasından çek 1929 ============================================ 1930 Ãrün detay sayfasının tam HTML'ini indir, 1931 DOMParser ile parse et, varyantları bul 1932 ============================================ */ 1933 function fetchVariants(productId, productLink, callback){ 1934 1935 /* Cache'te varsa hemen döndür */ 1936 if(window.__luxVariantCache[productId]){ 1937 callback(window.__luxVariantCache[productId]); 1938 return; 1939 } 1940 1941 fetch(productLink, { 1942 method: 'GET', 1943 credentials: 'same-origin', 1944 headers: { 'Accept': 'text/html' } 1945 }) 1946 .then(function(r){ return r.text(); }) 1947 .then(function(html){ 1948 var parser = new DOMParser(); 1949 var doc = parser.parseFromString(html, 'text/html'); 1950 1951 /* Detay sayfasındaki .variant-box'ı bul */ 1952 var variantBox = doc.querySelector('.variant-box'); 1953 if(!variantBox){ 1954 callback({ variants: [], error: 'no_variant_box' }); 1955 return; 1956 } 1957 1958 /* Her varyant grubu için select'leri ve option'ları oku */ 1959 var variants = []; 1960 var variantLis = variantBox.querySelectorAll('.variant'); 1961 1962 variantLis.forEach(function(li, idx){ 1963 var nameEl = li.querySelector('.name'); 1964 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 1965 1966 var values = []; 1967 1968 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 1969 var optLinks = li.querySelectorAll('.options a'); 1970 1971 if(optLinks.length > 0){ 1972 optLinks.forEach(function(a){ 1973 /* Beden/renk deÄerini doÄru attribute'tan oku
1974 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 1975 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 1976 - textContent: fallback */ 1977 var deger = a.getAttribute('data-variant-value') 1978 || a.textContent.trim(); 1979 1980 /* Stok kontrolü - birden fazla yoldan kontrol et */ 1981 var isSoldOut = a.classList.contains('sold-out') 1982 || a.classList.contains('sold_out') 1983 || a.classList.contains('disabled') 1984 || a.classList.contains('stoksuz') 1985 || a.classList.contains('out-of-stock') 1986 || a.hasAttribute('disabled') 1987 || a.getAttribute('data-in-stock') === '0' 1988 || a.getAttribute('data-in-stock') === 'false' 1989 || a.getAttribute('data-stokta-var-mi') === '0' 1990 || a.getAttribute('data-stokta-var-mi') === 'false'; 1991 1992 values.push({ 1993 deger: deger, 1994 inStock: !isSoldOut 1995 }); 1996 }); 1997 } else { 1998 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 1999 var select = li.querySelector('select'); 2000 if(select){ 2001 var opts = select.querySelectorAll('option'); 2002 opts.forEach(function(o){ 2003 if(!o.value) return; 2004 values.push({ 2005 deger: o.value, 2006 inStock: !o.disabled 2007 }); 2008 }); 2009 } 2010 } 2011 2012 variants.push({ 2013 index: idx, 2014 baslik: name, 2015 values: values 2016 }); 2017 }); 2018 2019 var result = { variants: variants }; 2020 window.__luxVariantCache[productId] = result; 2021 callback(result); 2022 }) 2023 .catch(function(err){ 2024 console.error('Varyant çekme hatası:', err); 2025 callback({ variants: [], error: 'fetch_failed' }); 2026 }); 2027 } 2028 2029 2030 /* ============================================ 2031 Beden Åeridini ve gizli variant-box'ı oluÅtur 2032 ============================================ */ 2033 function buildVariantUI(productId, data){ 2034 var card = document.getElementById('card-' + productId); 2035 if(!card) return false; 2036 2037 var holder = card.querySelector('.lux-variant-box'); 2038 var strip = document.getElementById('size-strip-' + productId); 2039 if(!holder || !strip) return false; 2040 2041 if(!data.variants || data.variants.length === 0){ 2042 /* Varyant yok */ 2043 return false; 2044 } 2045 2046 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 2047 var displayVariant = null;
2048 data.variants.forEach(function(v){ 2049 if(!displayVariant && v.values.length > 1){ 2050 displayVariant = v; 2051 } 2052 }); 2053 2054 /* Gizli variant-box HTML */ 2055 var html = '<div class="variant-box"><ul>'; 2056 data.variants.forEach(function(v){ 2057 html += '<li class="variant">'; 2058 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 2059 2060 if(v.values.length > 1){ 2061 html += '<option value="">Lütfen seçin</option>'; 2062 } 2063 2064 v.values.forEach(function(val, i){ 2065 var selected = (v.values.length === 1) ? ' selected' : ''; 2066 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 2067 }); 2068 2069 html += '</select></li>'; 2070 }); 2071 html += '</ul></div>'; 2072 2073 holder.innerHTML = html; 2074 holder.style.display = ''; 2075 2076 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 2077 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 2078 if(displayVariant){ 2079 var stripHtml = ''; 2080 var inStockCount = 0; 2081 2082 /* DEBUG - console'da gör */ 2083 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 2084 2085 displayVariant.values.forEach(function(val){ 2086 /* SADECE stokta olanları ekle */ 2087 if(val.inStock === true){ 2088 stripHtml += '<div class="size-item" ' 2089 + 'data-urun-id="' + productId + '" ' 2090 + 'data-varyant-deger="' + val.deger + '" ' 2091 + 'onclick="return luxAddVariant(event, this);">' 2092 + val.deger + '</div>'; 2093 inStockCount++; 2094 } 2095 }); 2096 2097 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 2098 if(inStockCount === 0){ 2099 strip.setAttribute('data-loaded', '1'); 2100 strip.setAttribute('data-has-variants', '0'); 2101 return false; 2102 } 2103
2104 strip.innerHTML = stripHtml; 2105 strip.setAttribute('data-loaded', '1'); 2106 strip.setAttribute('data-has-variants', '1'); 2107 return true; 2108 } else { 2109 strip.setAttribute('data-loaded', '1'); 2110 strip.setAttribute('data-has-variants', '0'); 2111 return false; 2112 } 2113 } 2114 2115 2116 /* ============================================ 2117 SEPET IKONU TIKLAMASI 2118 ============================================ */ 2119 window.luxBagClick = function(ev, productId){ 2120 ev.preventDefault(); 2121 ev.stopPropagation(); 2122 2123 var card = document.getElementById('card-' + productId); 2124 var strip = document.getElementById('size-strip-' + productId); 2125 var bag = document.getElementById('lux-bag-' + productId); 2126 if(!card || !strip) return false; 2127 2128 /* Strip zaten yüklenmiÅse direkt davran */ 2129 if(strip.getAttribute('data-loaded') === '1'){ 2130 if(strip.getAttribute('data-has-variants') === '1'){ 2131 toggleStrip(productId); 2132 } else { 2133 addToCartSmart(productId); 2134 } 2135 return false; 2136 } 2137 2138 /* İlk tıklama - AJAX ile varyantları çek */ 2139 bag.classList.add('is-loading'); 2140 var productLink = card.getAttribute('data-lux-product-link'); 2141 2142 fetchVariants(productId, productLink, function(data){ 2143 bag.classList.remove('is-loading'); 2144 2145 var hasVariants = buildVariantUI(productId, data); 2146 2147 if(hasVariants){ 2148 /* Bedenler var - Åeridi aç */ 2149 toggleStrip(productId); 2150 } else { 2151 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 2152 addToCartSmart(productId); 2153 } 2154 }); 2155 2156 return false; 2157 }; 2158 2159 function toggleStrip(productId){ 2160 var strip = document.getElementById('size-strip-' + productId); 2161 var card = document.getElementById('card-' + productId); 2162 if(!strip) return; 2163 2164 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2165 if(s !== strip) s.classList.remove('open'); 2166 }); 2167 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2168 if(c !== card) c.classList.remove('sizes-open'); 2169 }); 2170 2171 strip.classList.toggle('open'); 2172 if(card) card.classList.toggle('sizes-open'); 2173 } 2174 2175 2176 /* ============================================ 2177 BEDEN TIKLAMASI 2178 ============================================ */ 2179 window.luxAddVariant = function(ev, elem){ 2180 ev.preventDefault(); 2181 ev.stopPropagation(); 2182 2183 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 2184 2185 var productId = elem.getAttribute('data-urun-id'); 2186 var varyantDeger = elem.getAttribute('data-varyant-deger'); 2187 2188 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2189 if(!holder) return false; 2190 2191 /* Seçilen bedeni ilk select'e yaz */ 2192 var firstSelect = holder.querySelector('select[data-variant="0"]'); 2193 if(firstSelect){ 2194 firstSelect.value = varyantDeger; 2195 if(typeof jQuery !== "undefined"){ 2196 jQuery(firstSelect).val(varyantDeger).trigger('change'); 2197 } 2198 } 2199 2200 /* DiÄer select'lere ilk geçerli deÄeri koy */ 2201 var allSelects = holder.querySelectorAll('select[data-variant]'); 2202 allSelects.forEach(function(sel, idx){ 2203 if(idx === 0) return; 2204 if(sel.value) return; 2205 var options = sel.querySelectorAll('option'); 2206 for(var i = 0; i < options.length; i++){ 2207 if(options[i].value){ 2208 sel.value = options[i].value; 2209 if(typeof jQuery !== "undefined"){ 2210 jQuery(sel).val(options[i].value).trigger('change'); 2211 } 2212 break; 2213 } 2214 } 2215 }); 2216 2217 /* Görsel feedback */ 2218 elem.classList.add('adding'); 2219 var originalText = elem.textContent; 2220 elem.textContent = 'â'; 2221 2222 /* Sepete ekle */ 2223 addToCartSmart(productId, { 2224 checkVariant: true, 2225 variantCount: allSelects.length, 2226 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 2227 }); 2228 2229 setTimeout(function(){ 2230 elem.textContent = originalText; 2231 elem.classList.remove('adding'); 2232 closeAll(); 2233 }, 800); 2234 2235 return false; 2236 }; 2237 2238 2239 /* ============================================ 2240 SEPETE EKLE - Modal killer ile 2241 ============================================ */ 2242 function addToCartSmart(productId, extraOptions){ 2243 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2244 2245 var options = { 2246 quantity: 1, 2247 hideNativeModal: 'lux-card-' + productId 2248 }; 2249 2250 if(extraOptions){
2251 Object.keys(extraOptions).forEach(function(k){ 2252 options[k] = extraOptions[k]; 2253 }); 2254 } else if(holder){ 2255 var selects = holder.querySelectorAll('select[data-variant]'); 2256 if(selects.length > 0){ 2257 options.checkVariant = true; 2258 options.variantCount = selects.length; 2259 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 2260 } 2261 } 2262 2263 startModalKill(2000); 2264 2265 if(typeof addCart === "function"){ 2266 try { 2267 addCart(productId, 'card', options); 2268 flashSuccess(productId); 2269 } catch(err){ 2270 console.error('Sepete ekleme hatası:', err); 2271 } 2272 } 2273 } 2274 2275})(); 2276</script>
2276</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 2277 data-lux-product-shell="1" 2278 data-lux-page="1"><style> 2279@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 2280 2281/* ===== VEZZA LUX CARD ===== */ 2282.card-product{ 2283 font-family:'Poppins',sans-serif; 2284 background:#fff !important; 2285 position:relative; 2286} 2287.card-product-inner{ 2288 background:transparent !important; 2289 position:relative; 2290} 2291.card-product .c-p-i-link, 2292.card-product a{ 2293 background:transparent !important; 2294} 2295.card-product-inner > div{ 2296 background:transparent !important; 2297} 2298.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 2299 background:transparent !important; 2300} 2301.card-product .card-product-content, 2302.card-product .price-group, 2303.card-product .prices{ 2304 background:transparent !important; 2305} 2306[class*="skeleton"], 2307[class*="placeholder"], 2308[class*="loading"]{ 2309 background:transparent !important; 2310} 2311 2312/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 2313.image-wrapper{ 2314 position:relative; 2315 width:100%; 2316 aspect-ratio:1/1; 2317 overflow:hidden; 2318 background:#fff !important; 2319} 2320 2321.image{ 2322 position:relative; 2323 width:100%; 2324 height:100%; 2325} 2326 2327.image-wrapper img{ 2328 width:100% !important; 2329 height:100% !important; 2330 object-fit:cover !important; 2331 object-position:center center !important; 2332 display:block; 2333 transition:transform .35s ease; 2334} 2335 2336/* ===== DISCOUNT ===== */ 2337.discount{ 2338 position:absolute; 2339 top:12px; 2340 left:12px; 2341 width:28px; 2342 height:48px; 2343 background:#e10b0b; 2344 color:#fff; 2345 font-size:12px; 2346 font-weight:600; 2347 display:flex; 2348 align-items:center; 2349 justify-content:center; 2350 writing-mode:vertical-rl; 2351 transform:rotate(180deg); 2352 letter-spacing:.5px; 2353 z-index:7; 2354} 2355 2356/* ===== FAV ===== */ 2357.lux-fav{ 2358 position:absolute; 2359 top:12px; 2360 right:12px; 2361 z-index:7; 2362} 2363.lux-fav a, 2364.lux-fav button{ 2365 background:transparent !important; 2366 border:0 !important; 2367 padding:0 !important; 2368 cursor:pointer; 2369 display:inline-flex; 2370 align-items:center; 2371 justify-content:center; 2372} 2373 2374/* ===== SEPET IKON ===== */ 2375.lux-bag{ 2376 position:absolute; 2377 bottom:12px; 2378 right:12px; 2379 z-index:7; 2380 width:34px; 2381 height:34px; 2382 display:inline-flex; 2383 align-items:center; 2384 justify-content:center; 2385 background:rgba(255,255,255,.92); 2386 border:1px solid rgba(0,0,0,.10); 2387 border-radius:10px; 2388 cursor:pointer; 2389 transition:.2s ease; 2390} 2391.lux-bag:hover{ 2392 background:#fff; 2393 border-color:rgba(0,0,0,.25); 2394} 2395.lux-bag.is-loading{ 2396 opacity:.6; 2397 cursor:wait; 2398} 2399.lux-bag.is-success{ 2400 background:#2e7d32 !important; 2401 border-color:#2e7d32 !important; 2402 color:#fff !important; 2403} 2404.card-product.sizes-open .lux-bag{ 2405 opacity:0; 2406 pointer-events:none; 2407} 2408 2409/* Loading spinner */ 2410.lux-bag.is-loading i::before{ 2411 content:"â³"; 2412} 2413 2414/* ===== SIZE STRIP ===== */ 2415.size-strip{ 2416 width:100%; 2417 max-height:0; 2418 overflow:hidden; 2419 background:#fff; 2420 display:flex; 2421 flex-wrap:wrap; 2422 transition:max-height .3s ease, border-color .3s ease; 2423 border-top:1px solid transparent; 2424 border-bottom:1px solid transparent; 2425} 2426.size-strip.open{ 2427 max-height:200px; 2428 border-top-color:rgba(0,0,0,.08); 2429 border-bottom-color:rgba(0,0,0,.08); 2430} 2431.size-item{ 2432 flex:1 0 auto; 2433 min-width:38px; 2434 height:42px; 2435 display:flex; 2436 align-items:center; 2437 justify-content:center; 2438 font-size:13px; 2439 font-weight:500; 2440 color:#111 !important; 2441 cursor:pointer; 2442 user-select:none; 2443 background:transparent; 2444 transition:background .15s ease, color .15s ease; 2445 border-right:1px solid rgba(0,0,0,.08); 2446} 2447.size-item:last-child{ border-right:0; } 2448.size-item:hover:not(.disabled):not(.adding){ 2449 background:#000 !important; 2450 color:#fff !important; 2451} 2452.size-item.disabled{ 2453 color:#111 !important; 2454 text-decoration:line-through !important; 2455 opacity:.30 !important; 2456 cursor:not-allowed; 2457} 2458.size-item.adding{ 2459 background:#2e7d32 !important; 2460 color:#fff !important; 2461 cursor:wait; 2462} 2463 2464/* ===== META ===== */ 2465.lux-meta{ 2466 padding:12px 6px 6px; 2467 background:transparent !important; 2468} 2469.lux-brand{ 2470 font-size:16px; 2471 font-weight:600; 2472 color:#111; 2473 margin-bottom:2px; 2474} 2475.lux-title{ 2476 font-size:14px; 2477 font-weight:400; 2478 line-height:1.45; 2479 color:#111; 2480 margin:0; 2481} 2482.lux-price{ 2483 margin-top:10px; 2484 display:flex; 2485 gap:10px; 2486 align-items:baseline; 2487 background:transparent !important; 2488} 2489.lux-price .list-price{ 2490 font-size:14px; 2491 font-weight:400; 2492 color:#111; 2493 text-decoration:line-through; 2494} 2495.lux-price .sale-price{ 2496 font-size:16px; 2497 font-weight:600; 2498 color:#e10b0b; 2499} 2500 2501.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
2502.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 2503</style><div class="card-product" 2504 id="card-10329" 2505 data-lux-card-id="10329" 2506 data-lux-product-link="https://www.vezzalux.com/lora-1008-haki-erkek-ayakkabi" 2507 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><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" 2508 onclick="userProductFavourite('add', 10329)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 2509 id="lux-bag-10329" 2510 onclick="return luxBagClick(event, 10329);" 2511 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="sale-price">11.499,00 TL</div></div></div></a></div></div>
2511<script> 2512(function(){ 2513 2514 /* Bir kez kur */ 2515 if(window.__luxCardInit) return; 2516 window.__luxCardInit = true; 2517 2518 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 2519 window.__luxVariantCache = window.__luxVariantCache || {}; 2520 2521 function closeAll(){ 2522 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2523 s.classList.remove('open'); 2524 }); 2525 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2526 c.classList.remove('sizes-open'); 2527 }); 2528 } 2529 2530 function flashSuccess(productId){ 2531 var bag = document.getElementById('lux-bag-' + productId); 2532 if(!bag) return; 2533 bag.classList.add('is-success'); 2534 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 2535 } 2536 2537 /* DıŠtıklama - kapat */ 2538 document.addEventListener('click', function(e){ 2539 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 2540 if(!inside) closeAll(); 2541 }); 2542 2543 document.addEventListener('keydown', function(e){ 2544 if(e.key === 'Escape') closeAll(); 2545 }); 2546 2547 2548 /* ============================================ 2549 MODAL KILLER - yedek güvence 2550 ============================================ */ 2551 var LUX_MODAL_KILL_ACTIVE = false; 2552 2553 function killVisibleModals(){ 2554 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 2555 modals.forEach(function(m){ 2556 var id = (m.id || '').toLowerCase(); 2557 var txt = (m.textContent || '').toLowerCase(); 2558 var isCartModal = id.indexOf('cart') > -1 2559 || id.indexOf('variant') > -1 2560 || id.indexOf('fast') > -1 2561 || id.indexOf('urun') > -1 2562 || txt.indexOf('lütfen seçin') > -1; 2563 2564 if(isCartModal){ 2565 if(typeof jQuery !== 'undefined'){ 2566 try { jQuery(m).modal('hide'); } catch(e){} 2567 } 2568 m.classList.remove('show','in'); 2569 m.style.display = 'none'; 2570 } 2571 }); 2572 2573 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 2574 document.body.classList.remove('modal-open'); 2575 document.body.style.overflow = ''; 2576 document.body.style.paddingRight = ''; 2577 } 2578 2579 function startModalKill(durationMs){ 2580 if(LUX_MODAL_KILL_ACTIVE) return; 2581 LUX_MODAL_KILL_ACTIVE = true; 2582 killVisibleModals(); 2583 var interval = setInterval(killVisibleModals, 50); 2584 setTimeout(function(){ 2585 clearInterval(interval); 2586 LUX_MODAL_KILL_ACTIVE = false; 2587 }, durationMs || 2000); 2588 } 2589 2590 2591 /* ============================================ 2592 AJAX: Varyantları detay sayfasından çek 2593 ============================================ 2594 Ãrün detay sayfasının tam HTML'ini indir, 2595 DOMParser ile parse et, varyantları bul 2596 ============================================ */ 2597 function fetchVariants(productId, productLink, callback){ 2598 2599 /* Cache'te varsa hemen döndür */ 2600 if(window.__luxVariantCache[productId]){ 2601 callback(window.__luxVariantCache[productId]); 2602 return; 2603 } 2604 2605 fetch(productLink, { 2606 method: 'GET', 2607 credentials: 'same-origin', 2608 headers: { 'Accept': 'text/html' } 2609 }) 2610 .then(function(r){ return r.text(); }) 2611 .then(function(html){ 2612 var parser = new DOMParser(); 2613 var doc = parser.parseFromString(html, 'text/html'); 2614 2615 /* Detay sayfasındaki .variant-box'ı bul */ 2616 var variantBox = doc.querySelector('.variant-box'); 2617 if(!variantBox){ 2618 callback({ variants: [], error: 'no_variant_box' }); 2619 return; 2620 } 2621 2622 /* Her varyant grubu için select'leri ve option'ları oku */ 2623 var variants = []; 2624 var variantLis = variantBox.querySelectorAll('.variant'); 2625 2626 variantLis.forEach(function(li, idx){ 2627 var nameEl = li.querySelector('.name'); 2628 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 2629 2630 var values = []; 2631 2632 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 2633 var optLinks = li.querySelectorAll('.options a'); 2634 2635 if(optLinks.length > 0){ 2636 optLinks.forEach(function(a){ 2637 /* Beden/renk deÄerini doÄru attribute'tan oku
2638 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 2639 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 2640 - textContent: fallback */ 2641 var deger = a.getAttribute('data-variant-value') 2642 || a.textContent.trim(); 2643 2644 /* Stok kontrolü - birden fazla yoldan kontrol et */ 2645 var isSoldOut = a.classList.contains('sold-out') 2646 || a.classList.contains('sold_out') 2647 || a.classList.contains('disabled') 2648 || a.classList.contains('stoksuz') 2649 || a.classList.contains('out-of-stock') 2650 || a.hasAttribute('disabled') 2651 || a.getAttribute('data-in-stock') === '0' 2652 || a.getAttribute('data-in-stock') === 'false' 2653 || a.getAttribute('data-stokta-var-mi') === '0' 2654 || a.getAttribute('data-stokta-var-mi') === 'false'; 2655 2656 values.push({ 2657 deger: deger, 2658 inStock: !isSoldOut 2659 }); 2660 }); 2661 } else { 2662 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 2663 var select = li.querySelector('select'); 2664 if(select){ 2665 var opts = select.querySelectorAll('option'); 2666 opts.forEach(function(o){ 2667 if(!o.value) return; 2668 values.push({ 2669 deger: o.value, 2670 inStock: !o.disabled 2671 }); 2672 }); 2673 } 2674 } 2675 2676 variants.push({ 2677 index: idx, 2678 baslik: name, 2679 values: values 2680 }); 2681 }); 2682 2683 var result = { variants: variants }; 2684 window.__luxVariantCache[productId] = result; 2685 callback(result); 2686 }) 2687 .catch(function(err){ 2688 console.error('Varyant çekme hatası:', err); 2689 callback({ variants: [], error: 'fetch_failed' }); 2690 }); 2691 } 2692 2693 2694 /* ============================================ 2695 Beden Åeridini ve gizli variant-box'ı oluÅtur 2696 ============================================ */ 2697 function buildVariantUI(productId, data){ 2698 var card = document.getElementById('card-' + productId); 2699 if(!card) return false; 2700 2701 var holder = card.querySelector('.lux-variant-box'); 2702 var strip = document.getElementById('size-strip-' + productId); 2703 if(!holder || !strip) return false; 2704 2705 if(!data.variants || data.variants.length === 0){ 2706 /* Varyant yok */ 2707 return false; 2708 } 2709 2710 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 2711 var displayVariant = null;
2712 data.variants.forEach(function(v){ 2713 if(!displayVariant && v.values.length > 1){ 2714 displayVariant = v; 2715 } 2716 }); 2717 2718 /* Gizli variant-box HTML */ 2719 var html = '<div class="variant-box"><ul>'; 2720 data.variants.forEach(function(v){ 2721 html += '<li class="variant">'; 2722 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 2723 2724 if(v.values.length > 1){ 2725 html += '<option value="">Lütfen seçin</option>'; 2726 } 2727 2728 v.values.forEach(function(val, i){ 2729 var selected = (v.values.length === 1) ? ' selected' : ''; 2730 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 2731 }); 2732 2733 html += '</select></li>'; 2734 }); 2735 html += '</ul></div>'; 2736 2737 holder.innerHTML = html; 2738 holder.style.display = ''; 2739 2740 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 2741 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 2742 if(displayVariant){ 2743 var stripHtml = ''; 2744 var inStockCount = 0; 2745 2746 /* DEBUG - console'da gör */ 2747 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 2748 2749 displayVariant.values.forEach(function(val){ 2750 /* SADECE stokta olanları ekle */ 2751 if(val.inStock === true){ 2752 stripHtml += '<div class="size-item" ' 2753 + 'data-urun-id="' + productId + '" ' 2754 + 'data-varyant-deger="' + val.deger + '" ' 2755 + 'onclick="return luxAddVariant(event, this);">' 2756 + val.deger + '</div>'; 2757 inStockCount++; 2758 } 2759 }); 2760 2761 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 2762 if(inStockCount === 0){ 2763 strip.setAttribute('data-loaded', '1'); 2764 strip.setAttribute('data-has-variants', '0'); 2765 return false; 2766 } 2767
2768 strip.innerHTML = stripHtml; 2769 strip.setAttribute('data-loaded', '1'); 2770 strip.setAttribute('data-has-variants', '1'); 2771 return true; 2772 } else { 2773 strip.setAttribute('data-loaded', '1'); 2774 strip.setAttribute('data-has-variants', '0'); 2775 return false; 2776 } 2777 } 2778 2779 2780 /* ============================================ 2781 SEPET IKONU TIKLAMASI 2782 ============================================ */ 2783 window.luxBagClick = function(ev, productId){ 2784 ev.preventDefault(); 2785 ev.stopPropagation(); 2786 2787 var card = document.getElementById('card-' + productId); 2788 var strip = document.getElementById('size-strip-' + productId); 2789 var bag = document.getElementById('lux-bag-' + productId); 2790 if(!card || !strip) return false; 2791 2792 /* Strip zaten yüklenmiÅse direkt davran */ 2793 if(strip.getAttribute('data-loaded') === '1'){ 2794 if(strip.getAttribute('data-has-variants') === '1'){ 2795 toggleStrip(productId); 2796 } else { 2797 addToCartSmart(productId); 2798 } 2799 return false; 2800 } 2801 2802 /* İlk tıklama - AJAX ile varyantları çek */ 2803 bag.classList.add('is-loading'); 2804 var productLink = card.getAttribute('data-lux-product-link'); 2805 2806 fetchVariants(productId, productLink, function(data){ 2807 bag.classList.remove('is-loading'); 2808 2809 var hasVariants = buildVariantUI(productId, data); 2810 2811 if(hasVariants){ 2812 /* Bedenler var - Åeridi aç */ 2813 toggleStrip(productId); 2814 } else { 2815 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 2816 addToCartSmart(productId); 2817 } 2818 }); 2819 2820 return false; 2821 }; 2822 2823 function toggleStrip(productId){ 2824 var strip = document.getElementById('size-strip-' + productId); 2825 var card = document.getElementById('card-' + productId); 2826 if(!strip) return; 2827 2828 document.querySelectorAll('.size-strip.open').forEach(function(s){ 2829 if(s !== strip) s.classList.remove('open'); 2830 }); 2831 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 2832 if(c !== card) c.classList.remove('sizes-open'); 2833 }); 2834 2835 strip.classList.toggle('open'); 2836 if(card) card.classList.toggle('sizes-open'); 2837 } 2838 2839 2840 /* ============================================ 2841 BEDEN TIKLAMASI 2842 ============================================ */ 2843 window.luxAddVariant = function(ev, elem){ 2844 ev.preventDefault(); 2845 ev.stopPropagation(); 2846 2847 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 2848 2849 var productId = elem.getAttribute('data-urun-id'); 2850 var varyantDeger = elem.getAttribute('data-varyant-deger'); 2851 2852 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2853 if(!holder) return false; 2854 2855 /* Seçilen bedeni ilk select'e yaz */ 2856 var firstSelect = holder.querySelector('select[data-variant="0"]'); 2857 if(firstSelect){ 2858 firstSelect.value = varyantDeger; 2859 if(typeof jQuery !== "undefined"){ 2860 jQuery(firstSelect).val(varyantDeger).trigger('change'); 2861 } 2862 } 2863 2864 /* DiÄer select'lere ilk geçerli deÄeri koy */ 2865 var allSelects = holder.querySelectorAll('select[data-variant]'); 2866 allSelects.forEach(function(sel, idx){ 2867 if(idx === 0) return; 2868 if(sel.value) return; 2869 var options = sel.querySelectorAll('option'); 2870 for(var i = 0; i < options.length; i++){ 2871 if(options[i].value){ 2872 sel.value = options[i].value; 2873 if(typeof jQuery !== "undefined"){ 2874 jQuery(sel).val(options[i].value).trigger('change'); 2875 } 2876 break; 2877 } 2878 } 2879 }); 2880 2881 /* Görsel feedback */ 2882 elem.classList.add('adding'); 2883 var originalText = elem.textContent; 2884 elem.textContent = 'â'; 2885 2886 /* Sepete ekle */ 2887 addToCartSmart(productId, { 2888 checkVariant: true, 2889 variantCount: allSelects.length, 2890 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 2891 }); 2892 2893 setTimeout(function(){ 2894 elem.textContent = originalText; 2895 elem.classList.remove('adding'); 2896 closeAll(); 2897 }, 800); 2898 2899 return false; 2900 }; 2901 2902 2903 /* ============================================ 2904 SEPETE EKLE - Modal killer ile 2905 ============================================ */ 2906 function addToCartSmart(productId, extraOptions){ 2907 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 2908 2909 var options = { 2910 quantity: 1, 2911 hideNativeModal: 'lux-card-' + productId 2912 }; 2913 2914 if(extraOptions){
2915 Object.keys(extraOptions).forEach(function(k){ 2916 options[k] = extraOptions[k]; 2917 }); 2918 } else if(holder){ 2919 var selects = holder.querySelectorAll('select[data-variant]'); 2920 if(selects.length > 0){ 2921 options.checkVariant = true; 2922 options.variantCount = selects.length; 2923 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 2924 } 2925 } 2926 2927 startModalKill(2000); 2928 2929 if(typeof addCart === "function"){ 2930 try { 2931 addCart(productId, 'card', options); 2932 flashSuccess(productId); 2933 } catch(err){ 2934 console.error('Sepete ekleme hatası:', err); 2935 } 2936 } 2937 } 2938 2939})(); 2940</script>
2940</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 2941 data-lux-product-shell="1" 2942 data-lux-page="1"><style> 2943@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 2944 2945/* ===== VEZZA LUX CARD ===== */ 2946.card-product{ 2947 font-family:'Poppins',sans-serif; 2948 background:#fff !important; 2949 position:relative; 2950} 2951.card-product-inner{ 2952 background:transparent !important; 2953 position:relative; 2954} 2955.card-product .c-p-i-link, 2956.card-product a{ 2957 background:transparent !important; 2958} 2959.card-product-inner > div{ 2960 background:transparent !important; 2961} 2962.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 2963 background:transparent !important; 2964} 2965.card-product .card-product-content, 2966.card-product .price-group, 2967.card-product .prices{ 2968 background:transparent !important; 2969} 2970[class*="skeleton"], 2971[class*="placeholder"], 2972[class*="loading"]{ 2973 background:transparent !important; 2974} 2975 2976/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 2977.image-wrapper{ 2978 position:relative; 2979 width:100%; 2980 aspect-ratio:1/1; 2981 overflow:hidden; 2982 background:#fff !important; 2983} 2984 2985.image{ 2986 position:relative; 2987 width:100%; 2988 height:100%; 2989} 2990 2991.image-wrapper img{ 2992 width:100% !important; 2993 height:100% !important; 2994 object-fit:cover !important; 2995 object-position:center center !important; 2996 display:block; 2997 transition:transform .35s ease; 2998} 2999 3000/* ===== DISCOUNT ===== */ 3001.discount{ 3002 position:absolute; 3003 top:12px; 3004 left:12px; 3005 width:28px; 3006 height:48px; 3007 background:#e10b0b; 3008 color:#fff; 3009 font-size:12px; 3010 font-weight:600; 3011 display:flex; 3012 align-items:center; 3013 justify-content:center; 3014 writing-mode:vertical-rl; 3015 transform:rotate(180deg); 3016 letter-spacing:.5px; 3017 z-index:7; 3018} 3019 3020/* ===== FAV ===== */ 3021.lux-fav{ 3022 position:absolute; 3023 top:12px; 3024 right:12px; 3025 z-index:7; 3026} 3027.lux-fav a, 3028.lux-fav button{ 3029 background:transparent !important; 3030 border:0 !important; 3031 padding:0 !important; 3032 cursor:pointer; 3033 display:inline-flex; 3034 align-items:center; 3035 justify-content:center; 3036} 3037 3038/* ===== SEPET IKON ===== */ 3039.lux-bag{ 3040 position:absolute; 3041 bottom:12px; 3042 right:12px; 3043 z-index:7; 3044 width:34px; 3045 height:34px; 3046 display:inline-flex; 3047 align-items:center; 3048 justify-content:center; 3049 background:rgba(255,255,255,.92); 3050 border:1px solid rgba(0,0,0,.10); 3051 border-radius:10px; 3052 cursor:pointer; 3053 transition:.2s ease; 3054} 3055.lux-bag:hover{ 3056 background:#fff; 3057 border-color:rgba(0,0,0,.25); 3058} 3059.lux-bag.is-loading{ 3060 opacity:.6; 3061 cursor:wait; 3062} 3063.lux-bag.is-success{ 3064 background:#2e7d32 !important; 3065 border-color:#2e7d32 !important; 3066 color:#fff !important; 3067} 3068.card-product.sizes-open .lux-bag{ 3069 opacity:0; 3070 pointer-events:none; 3071} 3072 3073/* Loading spinner */ 3074.lux-bag.is-loading i::before{ 3075 content:"â³"; 3076} 3077 3078/* ===== SIZE STRIP ===== */ 3079.size-strip{ 3080 width:100%; 3081 max-height:0; 3082 overflow:hidden; 3083 background:#fff; 3084 display:flex; 3085 flex-wrap:wrap; 3086 transition:max-height .3s ease, border-color .3s ease; 3087 border-top:1px solid transparent; 3088 border-bottom:1px solid transparent; 3089} 3090.size-strip.open{ 3091 max-height:200px; 3092 border-top-color:rgba(0,0,0,.08); 3093 border-bottom-color:rgba(0,0,0,.08); 3094} 3095.size-item{ 3096 flex:1 0 auto; 3097 min-width:38px; 3098 height:42px; 3099 display:flex; 3100 align-items:center; 3101 justify-content:center; 3102 font-size:13px; 3103 font-weight:500; 3104 color:#111 !important; 3105 cursor:pointer; 3106 user-select:none; 3107 background:transparent; 3108 transition:background .15s ease, color .15s ease; 3109 border-right:1px solid rgba(0,0,0,.08); 3110} 3111.size-item:last-child{ border-right:0; } 3112.size-item:hover:not(.disabled):not(.adding){ 3113 background:#000 !important; 3114 color:#fff !important; 3115} 3116.size-item.disabled{ 3117 color:#111 !important; 3118 text-decoration:line-through !important; 3119 opacity:.30 !important; 3120 cursor:not-allowed; 3121} 3122.size-item.adding{ 3123 background:#2e7d32 !important; 3124 color:#fff !important; 3125 cursor:wait; 3126} 3127 3128/* ===== META ===== */ 3129.lux-meta{ 3130 padding:12px 6px 6px; 3131 background:transparent !important; 3132} 3133.lux-brand{ 3134 font-size:16px; 3135 font-weight:600; 3136 color:#111; 3137 margin-bottom:2px; 3138} 3139.lux-title{ 3140 font-size:14px; 3141 font-weight:400; 3142 line-height:1.45; 3143 color:#111; 3144 margin:0; 3145} 3146.lux-price{ 3147 margin-top:10px; 3148 display:flex; 3149 gap:10px; 3150 align-items:baseline; 3151 background:transparent !important; 3152} 3153.lux-price .list-price{ 3154 font-size:14px; 3155 font-weight:400; 3156 color:#111; 3157 text-decoration:line-through; 3158} 3159.lux-price .sale-price{ 3160 font-size:16px; 3161 font-weight:600; 3162 color:#e10b0b; 3163} 3164 3165.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
3166.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 3167</style><div class="card-product" 3168 id="card-10731" 3169 data-lux-card-id="10731" 3170 data-lux-product-link="https://www.vezzalux.com/cl-1302-yesil-loafer-erkek-ayakkabi" 3171 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" 3172 onclick="userProductFavourite('add', 10731)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 3173 id="lux-bag-10731" 3174 onclick="return luxBagClick(event, 10731);" 3175 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>
3175<script> 3176(function(){ 3177 3178 /* Bir kez kur */ 3179 if(window.__luxCardInit) return; 3180 window.__luxCardInit = true; 3181 3182 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 3183 window.__luxVariantCache = window.__luxVariantCache || {}; 3184 3185 function closeAll(){ 3186 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3187 s.classList.remove('open'); 3188 }); 3189 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3190 c.classList.remove('sizes-open'); 3191 }); 3192 } 3193 3194 function flashSuccess(productId){ 3195 var bag = document.getElementById('lux-bag-' + productId); 3196 if(!bag) return; 3197 bag.classList.add('is-success'); 3198 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 3199 } 3200 3201 /* DıŠtıklama - kapat */ 3202 document.addEventListener('click', function(e){ 3203 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 3204 if(!inside) closeAll(); 3205 }); 3206 3207 document.addEventListener('keydown', function(e){ 3208 if(e.key === 'Escape') closeAll(); 3209 }); 3210 3211 3212 /* ============================================ 3213 MODAL KILLER - yedek güvence 3214 ============================================ */ 3215 var LUX_MODAL_KILL_ACTIVE = false; 3216 3217 function killVisibleModals(){ 3218 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 3219 modals.forEach(function(m){ 3220 var id = (m.id || '').toLowerCase(); 3221 var txt = (m.textContent || '').toLowerCase(); 3222 var isCartModal = id.indexOf('cart') > -1 3223 || id.indexOf('variant') > -1 3224 || id.indexOf('fast') > -1 3225 || id.indexOf('urun') > -1 3226 || txt.indexOf('lütfen seçin') > -1; 3227 3228 if(isCartModal){ 3229 if(typeof jQuery !== 'undefined'){ 3230 try { jQuery(m).modal('hide'); } catch(e){} 3231 } 3232 m.classList.remove('show','in'); 3233 m.style.display = 'none'; 3234 } 3235 }); 3236 3237 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 3238 document.body.classList.remove('modal-open'); 3239 document.body.style.overflow = ''; 3240 document.body.style.paddingRight = ''; 3241 } 3242 3243 function startModalKill(durationMs){ 3244 if(LUX_MODAL_KILL_ACTIVE) return; 3245 LUX_MODAL_KILL_ACTIVE = true; 3246 killVisibleModals(); 3247 var interval = setInterval(killVisibleModals, 50); 3248 setTimeout(function(){ 3249 clearInterval(interval); 3250 LUX_MODAL_KILL_ACTIVE = false; 3251 }, durationMs || 2000); 3252 } 3253 3254 3255 /* ============================================ 3256 AJAX: Varyantları detay sayfasından çek 3257 ============================================ 3258 Ãrün detay sayfasının tam HTML'ini indir, 3259 DOMParser ile parse et, varyantları bul 3260 ============================================ */ 3261 function fetchVariants(productId, productLink, callback){ 3262 3263 /* Cache'te varsa hemen döndür */ 3264 if(window.__luxVariantCache[productId]){ 3265 callback(window.__luxVariantCache[productId]); 3266 return; 3267 } 3268 3269 fetch(productLink, { 3270 method: 'GET', 3271 credentials: 'same-origin', 3272 headers: { 'Accept': 'text/html' } 3273 }) 3274 .then(function(r){ return r.text(); }) 3275 .then(function(html){ 3276 var parser = new DOMParser(); 3277 var doc = parser.parseFromString(html, 'text/html'); 3278 3279 /* Detay sayfasındaki .variant-box'ı bul */ 3280 var variantBox = doc.querySelector('.variant-box'); 3281 if(!variantBox){ 3282 callback({ variants: [], error: 'no_variant_box' }); 3283 return; 3284 } 3285 3286 /* Her varyant grubu için select'leri ve option'ları oku */ 3287 var variants = []; 3288 var variantLis = variantBox.querySelectorAll('.variant'); 3289 3290 variantLis.forEach(function(li, idx){ 3291 var nameEl = li.querySelector('.name'); 3292 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 3293 3294 var values = []; 3295 3296 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 3297 var optLinks = li.querySelectorAll('.options a'); 3298 3299 if(optLinks.length > 0){ 3300 optLinks.forEach(function(a){ 3301 /* Beden/renk deÄerini doÄru attribute'tan oku
3302 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 3303 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 3304 - textContent: fallback */ 3305 var deger = a.getAttribute('data-variant-value') 3306 || a.textContent.trim(); 3307 3308 /* Stok kontrolü - birden fazla yoldan kontrol et */ 3309 var isSoldOut = a.classList.contains('sold-out') 3310 || a.classList.contains('sold_out') 3311 || a.classList.contains('disabled') 3312 || a.classList.contains('stoksuz') 3313 || a.classList.contains('out-of-stock') 3314 || a.hasAttribute('disabled') 3315 || a.getAttribute('data-in-stock') === '0' 3316 || a.getAttribute('data-in-stock') === 'false' 3317 || a.getAttribute('data-stokta-var-mi') === '0' 3318 || a.getAttribute('data-stokta-var-mi') === 'false'; 3319 3320 values.push({ 3321 deger: deger, 3322 inStock: !isSoldOut 3323 }); 3324 }); 3325 } else { 3326 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 3327 var select = li.querySelector('select'); 3328 if(select){ 3329 var opts = select.querySelectorAll('option'); 3330 opts.forEach(function(o){ 3331 if(!o.value) return; 3332 values.push({ 3333 deger: o.value, 3334 inStock: !o.disabled 3335 }); 3336 }); 3337 } 3338 } 3339 3340 variants.push({ 3341 index: idx, 3342 baslik: name, 3343 values: values 3344 }); 3345 }); 3346 3347 var result = { variants: variants }; 3348 window.__luxVariantCache[productId] = result; 3349 callback(result); 3350 }) 3351 .catch(function(err){ 3352 console.error('Varyant çekme hatası:', err); 3353 callback({ variants: [], error: 'fetch_failed' }); 3354 }); 3355 } 3356 3357 3358 /* ============================================ 3359 Beden Åeridini ve gizli variant-box'ı oluÅtur 3360 ============================================ */ 3361 function buildVariantUI(productId, data){ 3362 var card = document.getElementById('card-' + productId); 3363 if(!card) return false; 3364 3365 var holder = card.querySelector('.lux-variant-box'); 3366 var strip = document.getElementById('size-strip-' + productId); 3367 if(!holder || !strip) return false; 3368 3369 if(!data.variants || data.variants.length === 0){ 3370 /* Varyant yok */ 3371 return false; 3372 } 3373 3374 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 3375 var displayVariant = null;
3376 data.variants.forEach(function(v){ 3377 if(!displayVariant && v.values.length > 1){ 3378 displayVariant = v; 3379 } 3380 }); 3381 3382 /* Gizli variant-box HTML */ 3383 var html = '<div class="variant-box"><ul>'; 3384 data.variants.forEach(function(v){ 3385 html += '<li class="variant">'; 3386 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 3387 3388 if(v.values.length > 1){ 3389 html += '<option value="">Lütfen seçin</option>'; 3390 } 3391 3392 v.values.forEach(function(val, i){ 3393 var selected = (v.values.length === 1) ? ' selected' : ''; 3394 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 3395 }); 3396 3397 html += '</select></li>'; 3398 }); 3399 html += '</ul></div>'; 3400 3401 holder.innerHTML = html; 3402 holder.style.display = ''; 3403 3404 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 3405 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 3406 if(displayVariant){ 3407 var stripHtml = ''; 3408 var inStockCount = 0; 3409 3410 /* DEBUG - console'da gör */ 3411 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 3412 3413 displayVariant.values.forEach(function(val){ 3414 /* SADECE stokta olanları ekle */ 3415 if(val.inStock === true){ 3416 stripHtml += '<div class="size-item" ' 3417 + 'data-urun-id="' + productId + '" ' 3418 + 'data-varyant-deger="' + val.deger + '" ' 3419 + 'onclick="return luxAddVariant(event, this);">' 3420 + val.deger + '</div>'; 3421 inStockCount++; 3422 } 3423 }); 3424 3425 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 3426 if(inStockCount === 0){ 3427 strip.setAttribute('data-loaded', '1'); 3428 strip.setAttribute('data-has-variants', '0'); 3429 return false; 3430 } 3431
3432 strip.innerHTML = stripHtml; 3433 strip.setAttribute('data-loaded', '1'); 3434 strip.setAttribute('data-has-variants', '1'); 3435 return true; 3436 } else { 3437 strip.setAttribute('data-loaded', '1'); 3438 strip.setAttribute('data-has-variants', '0'); 3439 return false; 3440 } 3441 } 3442 3443 3444 /* ============================================ 3445 SEPET IKONU TIKLAMASI 3446 ============================================ */ 3447 window.luxBagClick = function(ev, productId){ 3448 ev.preventDefault(); 3449 ev.stopPropagation(); 3450 3451 var card = document.getElementById('card-' + productId); 3452 var strip = document.getElementById('size-strip-' + productId); 3453 var bag = document.getElementById('lux-bag-' + productId); 3454 if(!card || !strip) return false; 3455 3456 /* Strip zaten yüklenmiÅse direkt davran */ 3457 if(strip.getAttribute('data-loaded') === '1'){ 3458 if(strip.getAttribute('data-has-variants') === '1'){ 3459 toggleStrip(productId); 3460 } else { 3461 addToCartSmart(productId); 3462 } 3463 return false; 3464 } 3465 3466 /* İlk tıklama - AJAX ile varyantları çek */ 3467 bag.classList.add('is-loading'); 3468 var productLink = card.getAttribute('data-lux-product-link'); 3469 3470 fetchVariants(productId, productLink, function(data){ 3471 bag.classList.remove('is-loading'); 3472 3473 var hasVariants = buildVariantUI(productId, data); 3474 3475 if(hasVariants){ 3476 /* Bedenler var - Åeridi aç */ 3477 toggleStrip(productId); 3478 } else { 3479 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 3480 addToCartSmart(productId); 3481 } 3482 }); 3483 3484 return false; 3485 }; 3486 3487 function toggleStrip(productId){ 3488 var strip = document.getElementById('size-strip-' + productId); 3489 var card = document.getElementById('card-' + productId); 3490 if(!strip) return; 3491 3492 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3493 if(s !== strip) s.classList.remove('open'); 3494 }); 3495 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3496 if(c !== card) c.classList.remove('sizes-open'); 3497 }); 3498 3499 strip.classList.toggle('open'); 3500 if(card) card.classList.toggle('sizes-open'); 3501 } 3502 3503 3504 /* ============================================ 3505 BEDEN TIKLAMASI 3506 ============================================ */ 3507 window.luxAddVariant = function(ev, elem){ 3508 ev.preventDefault(); 3509 ev.stopPropagation(); 3510 3511 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 3512 3513 var productId = elem.getAttribute('data-urun-id'); 3514 var varyantDeger = elem.getAttribute('data-varyant-deger'); 3515 3516 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 3517 if(!holder) return false; 3518 3519 /* Seçilen bedeni ilk select'e yaz */ 3520 var firstSelect = holder.querySelector('select[data-variant="0"]'); 3521 if(firstSelect){ 3522 firstSelect.value = varyantDeger; 3523 if(typeof jQuery !== "undefined"){ 3524 jQuery(firstSelect).val(varyantDeger).trigger('change'); 3525 } 3526 } 3527 3528 /* DiÄer select'lere ilk geçerli deÄeri koy */ 3529 var allSelects = holder.querySelectorAll('select[data-variant]'); 3530 allSelects.forEach(function(sel, idx){ 3531 if(idx === 0) return; 3532 if(sel.value) return; 3533 var options = sel.querySelectorAll('option'); 3534 for(var i = 0; i < options.length; i++){ 3535 if(options[i].value){ 3536 sel.value = options[i].value; 3537 if(typeof jQuery !== "undefined"){ 3538 jQuery(sel).val(options[i].value).trigger('change'); 3539 } 3540 break; 3541 } 3542 } 3543 }); 3544 3545 /* Görsel feedback */ 3546 elem.classList.add('adding'); 3547 var originalText = elem.textContent; 3548 elem.textContent = 'â'; 3549 3550 /* Sepete ekle */ 3551 addToCartSmart(productId, { 3552 checkVariant: true, 3553 variantCount: allSelects.length, 3554 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 3555 }); 3556 3557 setTimeout(function(){ 3558 elem.textContent = originalText; 3559 elem.classList.remove('adding'); 3560 closeAll(); 3561 }, 800); 3562 3563 return false; 3564 }; 3565 3566 3567 /* ============================================ 3568 SEPETE EKLE - Modal killer ile 3569 ============================================ */ 3570 function addToCartSmart(productId, extraOptions){ 3571 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 3572 3573 var options = { 3574 quantity: 1, 3575 hideNativeModal: 'lux-card-' + productId 3576 }; 3577 3578 if(extraOptions){
3579 Object.keys(extraOptions).forEach(function(k){ 3580 options[k] = extraOptions[k]; 3581 }); 3582 } else if(holder){ 3583 var selects = holder.querySelectorAll('select[data-variant]'); 3584 if(selects.length > 0){ 3585 options.checkVariant = true; 3586 options.variantCount = selects.length; 3587 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 3588 } 3589 } 3590 3591 startModalKill(2000); 3592 3593 if(typeof addCart === "function"){ 3594 try { 3595 addCart(productId, 'card', options); 3596 flashSuccess(productId); 3597 } catch(err){ 3598 console.error('Sepete ekleme hatası:', err); 3599 } 3600 } 3601 } 3602 3603})(); 3604</script>
3604</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 3605 data-lux-product-shell="1" 3606 data-lux-page="1"><style> 3607@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 3608 3609/* ===== VEZZA LUX CARD ===== */ 3610.card-product{ 3611 font-family:'Poppins',sans-serif; 3612 background:#fff !important; 3613 position:relative; 3614} 3615.card-product-inner{ 3616 background:transparent !important; 3617 position:relative; 3618} 3619.card-product .c-p-i-link, 3620.card-product a{ 3621 background:transparent !important; 3622} 3623.card-product-inner > div{ 3624 background:transparent !important; 3625} 3626.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 3627 background:transparent !important; 3628} 3629.card-product .card-product-content, 3630.card-product .price-group, 3631.card-product .prices{ 3632 background:transparent !important; 3633} 3634[class*="skeleton"], 3635[class*="placeholder"], 3636[class*="loading"]{ 3637 background:transparent !important; 3638} 3639 3640/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 3641.image-wrapper{ 3642 position:relative; 3643 width:100%; 3644 aspect-ratio:1/1; 3645 overflow:hidden; 3646 background:#fff !important; 3647} 3648 3649.image{ 3650 position:relative; 3651 width:100%; 3652 height:100%; 3653} 3654 3655.image-wrapper img{ 3656 width:100% !important; 3657 height:100% !important; 3658 object-fit:cover !important; 3659 object-position:center center !important; 3660 display:block; 3661 transition:transform .35s ease; 3662} 3663 3664/* ===== DISCOUNT ===== */ 3665.discount{ 3666 position:absolute; 3667 top:12px; 3668 left:12px; 3669 width:28px; 3670 height:48px; 3671 background:#e10b0b; 3672 color:#fff; 3673 font-size:12px; 3674 font-weight:600; 3675 display:flex; 3676 align-items:center; 3677 justify-content:center; 3678 writing-mode:vertical-rl; 3679 transform:rotate(180deg); 3680 letter-spacing:.5px; 3681 z-index:7; 3682} 3683 3684/* ===== FAV ===== */ 3685.lux-fav{ 3686 position:absolute; 3687 top:12px; 3688 right:12px; 3689 z-index:7; 3690} 3691.lux-fav a, 3692.lux-fav button{ 3693 background:transparent !important; 3694 border:0 !important; 3695 padding:0 !important; 3696 cursor:pointer; 3697 display:inline-flex; 3698 align-items:center; 3699 justify-content:center; 3700} 3701 3702/* ===== SEPET IKON ===== */ 3703.lux-bag{ 3704 position:absolute; 3705 bottom:12px; 3706 right:12px; 3707 z-index:7; 3708 width:34px; 3709 height:34px; 3710 display:inline-flex; 3711 align-items:center; 3712 justify-content:center; 3713 background:rgba(255,255,255,.92); 3714 border:1px solid rgba(0,0,0,.10); 3715 border-radius:10px; 3716 cursor:pointer; 3717 transition:.2s ease; 3718} 3719.lux-bag:hover{ 3720 background:#fff; 3721 border-color:rgba(0,0,0,.25); 3722} 3723.lux-bag.is-loading{ 3724 opacity:.6; 3725 cursor:wait; 3726} 3727.lux-bag.is-success{ 3728 background:#2e7d32 !important; 3729 border-color:#2e7d32 !important; 3730 color:#fff !important; 3731} 3732.card-product.sizes-open .lux-bag{ 3733 opacity:0; 3734 pointer-events:none; 3735} 3736 3737/* Loading spinner */ 3738.lux-bag.is-loading i::before{ 3739 content:"â³"; 3740} 3741 3742/* ===== SIZE STRIP ===== */ 3743.size-strip{ 3744 width:100%; 3745 max-height:0; 3746 overflow:hidden; 3747 background:#fff; 3748 display:flex; 3749 flex-wrap:wrap; 3750 transition:max-height .3s ease, border-color .3s ease; 3751 border-top:1px solid transparent; 3752 border-bottom:1px solid transparent; 3753} 3754.size-strip.open{ 3755 max-height:200px; 3756 border-top-color:rgba(0,0,0,.08); 3757 border-bottom-color:rgba(0,0,0,.08); 3758} 3759.size-item{ 3760 flex:1 0 auto; 3761 min-width:38px; 3762 height:42px; 3763 display:flex; 3764 align-items:center; 3765 justify-content:center; 3766 font-size:13px; 3767 font-weight:500; 3768 color:#111 !important; 3769 cursor:pointer; 3770 user-select:none; 3771 background:transparent; 3772 transition:background .15s ease, color .15s ease; 3773 border-right:1px solid rgba(0,0,0,.08); 3774} 3775.size-item:last-child{ border-right:0; } 3776.size-item:hover:not(.disabled):not(.adding){ 3777 background:#000 !important; 3778 color:#fff !important; 3779} 3780.size-item.disabled{ 3781 color:#111 !important; 3782 text-decoration:line-through !important; 3783 opacity:.30 !important; 3784 cursor:not-allowed; 3785} 3786.size-item.adding{ 3787 background:#2e7d32 !important; 3788 color:#fff !important; 3789 cursor:wait; 3790} 3791 3792/* ===== META ===== */ 3793.lux-meta{ 3794 padding:12px 6px 6px; 3795 background:transparent !important; 3796} 3797.lux-brand{ 3798 font-size:16px; 3799 font-weight:600; 3800 color:#111; 3801 margin-bottom:2px; 3802} 3803.lux-title{ 3804 font-size:14px; 3805 font-weight:400; 3806 line-height:1.45; 3807 color:#111; 3808 margin:0; 3809} 3810.lux-price{ 3811 margin-top:10px; 3812 display:flex; 3813 gap:10px; 3814 align-items:baseline; 3815 background:transparent !important; 3816} 3817.lux-price .list-price{ 3818 font-size:14px; 3819 font-weight:400; 3820 color:#111; 3821 text-decoration:line-through; 3822} 3823.lux-price .sale-price{ 3824 font-size:16px; 3825 font-weight:600; 3826 color:#e10b0b; 3827} 3828 3829.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
3830.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 3831</style><div class="card-product" 3832 id="card-10185" 3833 data-lux-card-id="10185" 3834 data-lux-product-link="https://www.vezzalux.com/mcq-831-parlak-gri-erkek-ayakkabi" 3835 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/mcq-831-parlak-gri-erkek-ayakkabi" class="c-p-i-link" title="Mcq 831 Parlak Gri Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c788c3b0a-16915648-sw1200sh1200.webp" alt="Mcq 831 Parlak Gri Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c788c3b0a-16915648-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c78530c3f-52573170-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" 3836 onclick="userProductFavourite('add', 10185)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 3837 id="lux-bag-10185" 3838 onclick="return luxBagClick(event, 10185);" 3839 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10185" style="display:none;"></div><div class="size-strip" id="size-strip-10185" data-loaded="0"></div><a href="https://www.vezzalux.com/mcq-831-parlak-gri-erkek-ayakkabi" class="c-p-i-link" title="Mcq 831 Parlak Gri Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Alexander Mcqueen</div><div class="lux-title">Mcq 831 Parlak Gri Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
3839<script> 3840(function(){ 3841 3842 /* Bir kez kur */ 3843 if(window.__luxCardInit) return; 3844 window.__luxCardInit = true; 3845 3846 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 3847 window.__luxVariantCache = window.__luxVariantCache || {}; 3848 3849 function closeAll(){ 3850 document.querySelectorAll('.size-strip.open').forEach(function(s){ 3851 s.classList.remove('open'); 3852 }); 3853 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 3854 c.classList.remove('sizes-open'); 3855 }); 3856 } 3857 3858 function flashSuccess(productId){ 3859 var bag = document.getElementById('lux-bag-' + productId); 3860 if(!bag) return; 3861 bag.classList.add('is-success'); 3862 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 3863 } 3864 3865 /* DıŠtıklama - kapat */ 3866 document.addEventListener('click', function(e){ 3867 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 3868 if(!inside) closeAll(); 3869 }); 3870 3871 document.addEventListener('keydown', function(e){ 3872 if(e.key === 'Escape') closeAll(); 3873 }); 3874 3875 3876 /* ============================================ 3877 MODAL KILLER - yedek güvence 3878 ============================================ */ 3879 var LUX_MODAL_KILL_ACTIVE = false; 3880 3881 function killVisibleModals(){ 3882 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 3883 modals.forEach(function(m){ 3884 var id = (m.id || '').toLowerCase(); 3885 var txt = (m.textContent || '').toLowerCase(); 3886 var isCartModal = id.indexOf('cart') > -1 3887 || id.indexOf('variant') > -1 3888 || id.indexOf('fast') > -1 3889 || id.indexOf('urun') > -1 3890 || txt.indexOf('lütfen seçin') > -1; 3891 3892 if(isCartModal){ 3893 if(typeof jQuery !== 'undefined'){ 3894 try { jQuery(m).modal('hide'); } catch(e){} 3895 } 3896 m.classList.remove('show','in'); 3897 m.style.display = 'none'; 3898 } 3899 }); 3900 3901 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 3902 document.body.classList.remove('modal-open'); 3903 document.body.style.overflow = ''; 3904 document.body.style.paddingRight = ''; 3905 } 3906 3907 function startModalKill(durationMs){ 3908 if(LUX_MODAL_KILL_ACTIVE) return; 3909 LUX_MODAL_KILL_ACTIVE = true; 3910 killVisibleModals(); 3911 var interval = setInterval(killVisibleModals, 50); 3912 setTimeout(function(){ 3913 clearInterval(interval); 3914 LUX_MODAL_KILL_ACTIVE = false; 3915 }, durationMs || 2000); 3916 } 3917 3918 3919 /* ============================================ 3920 AJAX: Varyantları detay sayfasından çek 3921 ============================================ 3922 Ãrün detay sayfasının tam HTML'ini indir, 3923 DOMParser ile parse et, varyantları bul 3924 ============================================ */ 3925 function fetchVariants(productId, productLink, callback){ 3926 3927 /* Cache'te varsa hemen döndür */ 3928 if(window.__luxVariantCache[productId]){ 3929 callback(window.__luxVariantCache[productId]); 3930 return; 3931 } 3932 3933 fetch(productLink, { 3934 method: 'GET', 3935 credentials: 'same-origin', 3936 headers: { 'Accept': 'text/html' } 3937 }) 3938 .then(function(r){ return r.text(); }) 3939 .then(function(html){ 3940 var parser = new DOMParser(); 3941 var doc = parser.parseFromString(html, 'text/html'); 3942 3943 /* Detay sayfasındaki .variant-box'ı bul */ 3944 var variantBox = doc.querySelector('.variant-box'); 3945 if(!variantBox){ 3946 callback({ variants: [], error: 'no_variant_box' }); 3947 return; 3948 } 3949 3950 /* Her varyant grubu için select'leri ve option'ları oku */ 3951 var variants = []; 3952 var variantLis = variantBox.querySelectorAll('.variant'); 3953 3954 variantLis.forEach(function(li, idx){ 3955 var nameEl = li.querySelector('.name'); 3956 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 3957 3958 var values = []; 3959 3960 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 3961 var optLinks = li.querySelectorAll('.options a'); 3962 3963 if(optLinks.length > 0){ 3964 optLinks.forEach(function(a){ 3965 /* Beden/renk deÄerini doÄru attribute'tan oku
3966 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 3967 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 3968 - textContent: fallback */ 3969 var deger = a.getAttribute('data-variant-value') 3970 || a.textContent.trim(); 3971 3972 /* Stok kontrolü - birden fazla yoldan kontrol et */ 3973 var isSoldOut = a.classList.contains('sold-out') 3974 || a.classList.contains('sold_out') 3975 || a.classList.contains('disabled') 3976 || a.classList.contains('stoksuz') 3977 || a.classList.contains('out-of-stock') 3978 || a.hasAttribute('disabled') 3979 || a.getAttribute('data-in-stock') === '0' 3980 || a.getAttribute('data-in-stock') === 'false' 3981 || a.getAttribute('data-stokta-var-mi') === '0' 3982 || a.getAttribute('data-stokta-var-mi') === 'false'; 3983 3984 values.push({ 3985 deger: deger, 3986 inStock: !isSoldOut 3987 }); 3988 }); 3989 } else { 3990 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 3991 var select = li.querySelector('select'); 3992 if(select){ 3993 var opts = select.querySelectorAll('option'); 3994 opts.forEach(function(o){ 3995 if(!o.value) return; 3996 values.push({ 3997 deger: o.value, 3998 inStock: !o.disabled 3999 }); 4000 }); 4001 } 4002 } 4003 4004 variants.push({ 4005 index: idx, 4006 baslik: name, 4007 values: values 4008 }); 4009 }); 4010 4011 var result = { variants: variants }; 4012 window.__luxVariantCache[productId] = result; 4013 callback(result); 4014 }) 4015 .catch(function(err){ 4016 console.error('Varyant çekme hatası:', err); 4017 callback({ variants: [], error: 'fetch_failed' }); 4018 }); 4019 } 4020 4021 4022 /* ============================================ 4023 Beden Åeridini ve gizli variant-box'ı oluÅtur 4024 ============================================ */ 4025 function buildVariantUI(productId, data){ 4026 var card = document.getElementById('card-' + productId); 4027 if(!card) return false; 4028 4029 var holder = card.querySelector('.lux-variant-box'); 4030 var strip = document.getElementById('size-strip-' + productId); 4031 if(!holder || !strip) return false; 4032 4033 if(!data.variants || data.variants.length === 0){ 4034 /* Varyant yok */ 4035 return false; 4036 } 4037 4038 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 4039 var displayVariant = null;
4040 data.variants.forEach(function(v){ 4041 if(!displayVariant && v.values.length > 1){ 4042 displayVariant = v; 4043 } 4044 }); 4045 4046 /* Gizli variant-box HTML */ 4047 var html = '<div class="variant-box"><ul>'; 4048 data.variants.forEach(function(v){ 4049 html += '<li class="variant">'; 4050 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 4051 4052 if(v.values.length > 1){ 4053 html += '<option value="">Lütfen seçin</option>'; 4054 } 4055 4056 v.values.forEach(function(val, i){ 4057 var selected = (v.values.length === 1) ? ' selected' : ''; 4058 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 4059 }); 4060 4061 html += '</select></li>'; 4062 }); 4063 html += '</ul></div>'; 4064 4065 holder.innerHTML = html; 4066 holder.style.display = ''; 4067 4068 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 4069 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 4070 if(displayVariant){ 4071 var stripHtml = ''; 4072 var inStockCount = 0; 4073 4074 /* DEBUG - console'da gör */ 4075 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 4076 4077 displayVariant.values.forEach(function(val){ 4078 /* SADECE stokta olanları ekle */ 4079 if(val.inStock === true){ 4080 stripHtml += '<div class="size-item" ' 4081 + 'data-urun-id="' + productId + '" ' 4082 + 'data-varyant-deger="' + val.deger + '" ' 4083 + 'onclick="return luxAddVariant(event, this);">' 4084 + val.deger + '</div>'; 4085 inStockCount++; 4086 } 4087 }); 4088 4089 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 4090 if(inStockCount === 0){ 4091 strip.setAttribute('data-loaded', '1'); 4092 strip.setAttribute('data-has-variants', '0'); 4093 return false; 4094 } 4095
4096 strip.innerHTML = stripHtml; 4097 strip.setAttribute('data-loaded', '1'); 4098 strip.setAttribute('data-has-variants', '1'); 4099 return true; 4100 } else { 4101 strip.setAttribute('data-loaded', '1'); 4102 strip.setAttribute('data-has-variants', '0'); 4103 return false; 4104 } 4105 } 4106 4107 4108 /* ============================================ 4109 SEPET IKONU TIKLAMASI 4110 ============================================ */ 4111 window.luxBagClick = function(ev, productId){ 4112 ev.preventDefault(); 4113 ev.stopPropagation(); 4114 4115 var card = document.getElementById('card-' + productId); 4116 var strip = document.getElementById('size-strip-' + productId); 4117 var bag = document.getElementById('lux-bag-' + productId); 4118 if(!card || !strip) return false; 4119 4120 /* Strip zaten yüklenmiÅse direkt davran */ 4121 if(strip.getAttribute('data-loaded') === '1'){ 4122 if(strip.getAttribute('data-has-variants') === '1'){ 4123 toggleStrip(productId); 4124 } else { 4125 addToCartSmart(productId); 4126 } 4127 return false; 4128 } 4129 4130 /* İlk tıklama - AJAX ile varyantları çek */ 4131 bag.classList.add('is-loading'); 4132 var productLink = card.getAttribute('data-lux-product-link'); 4133 4134 fetchVariants(productId, productLink, function(data){ 4135 bag.classList.remove('is-loading'); 4136 4137 var hasVariants = buildVariantUI(productId, data); 4138 4139 if(hasVariants){ 4140 /* Bedenler var - Åeridi aç */ 4141 toggleStrip(productId); 4142 } else { 4143 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 4144 addToCartSmart(productId); 4145 } 4146 }); 4147 4148 return false; 4149 }; 4150 4151 function toggleStrip(productId){ 4152 var strip = document.getElementById('size-strip-' + productId); 4153 var card = document.getElementById('card-' + productId); 4154 if(!strip) return; 4155 4156 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4157 if(s !== strip) s.classList.remove('open'); 4158 }); 4159 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4160 if(c !== card) c.classList.remove('sizes-open'); 4161 }); 4162 4163 strip.classList.toggle('open'); 4164 if(card) card.classList.toggle('sizes-open'); 4165 } 4166 4167 4168 /* ============================================ 4169 BEDEN TIKLAMASI 4170 ============================================ */ 4171 window.luxAddVariant = function(ev, elem){ 4172 ev.preventDefault(); 4173 ev.stopPropagation(); 4174 4175 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 4176 4177 var productId = elem.getAttribute('data-urun-id'); 4178 var varyantDeger = elem.getAttribute('data-varyant-deger'); 4179 4180 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4181 if(!holder) return false; 4182 4183 /* Seçilen bedeni ilk select'e yaz */ 4184 var firstSelect = holder.querySelector('select[data-variant="0"]'); 4185 if(firstSelect){ 4186 firstSelect.value = varyantDeger; 4187 if(typeof jQuery !== "undefined"){ 4188 jQuery(firstSelect).val(varyantDeger).trigger('change'); 4189 } 4190 } 4191 4192 /* DiÄer select'lere ilk geçerli deÄeri koy */ 4193 var allSelects = holder.querySelectorAll('select[data-variant]'); 4194 allSelects.forEach(function(sel, idx){ 4195 if(idx === 0) return; 4196 if(sel.value) return; 4197 var options = sel.querySelectorAll('option'); 4198 for(var i = 0; i < options.length; i++){ 4199 if(options[i].value){ 4200 sel.value = options[i].value; 4201 if(typeof jQuery !== "undefined"){ 4202 jQuery(sel).val(options[i].value).trigger('change'); 4203 } 4204 break; 4205 } 4206 } 4207 }); 4208 4209 /* Görsel feedback */ 4210 elem.classList.add('adding'); 4211 var originalText = elem.textContent; 4212 elem.textContent = 'â'; 4213 4214 /* Sepete ekle */ 4215 addToCartSmart(productId, { 4216 checkVariant: true, 4217 variantCount: allSelects.length, 4218 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 4219 }); 4220 4221 setTimeout(function(){ 4222 elem.textContent = originalText; 4223 elem.classList.remove('adding'); 4224 closeAll(); 4225 }, 800); 4226 4227 return false; 4228 }; 4229 4230 4231 /* ============================================ 4232 SEPETE EKLE - Modal killer ile 4233 ============================================ */ 4234 function addToCartSmart(productId, extraOptions){ 4235 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4236 4237 var options = { 4238 quantity: 1, 4239 hideNativeModal: 'lux-card-' + productId 4240 }; 4241 4242 if(extraOptions){
4243 Object.keys(extraOptions).forEach(function(k){ 4244 options[k] = extraOptions[k]; 4245 }); 4246 } else if(holder){ 4247 var selects = holder.querySelectorAll('select[data-variant]'); 4248 if(selects.length > 0){ 4249 options.checkVariant = true; 4250 options.variantCount = selects.length; 4251 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 4252 } 4253 } 4254 4255 startModalKill(2000); 4256 4257 if(typeof addCart === "function"){ 4258 try { 4259 addCart(productId, 'card', options); 4260 flashSuccess(productId); 4261 } catch(err){ 4262 console.error('Sepete ekleme hatası:', err); 4263 } 4264 } 4265 } 4266 4267})(); 4268</script>
4268</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 4269 data-lux-product-shell="1" 4270 data-lux-page="1"><style> 4271@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 4272 4273/* ===== VEZZA LUX CARD ===== */ 4274.card-product{ 4275 font-family:'Poppins',sans-serif; 4276 background:#fff !important; 4277 position:relative; 4278} 4279.card-product-inner{ 4280 background:transparent !important; 4281 position:relative; 4282} 4283.card-product .c-p-i-link, 4284.card-product a{ 4285 background:transparent !important; 4286} 4287.card-product-inner > div{ 4288 background:transparent !important; 4289} 4290.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 4291 background:transparent !important; 4292} 4293.card-product .card-product-content, 4294.card-product .price-group, 4295.card-product .prices{ 4296 background:transparent !important; 4297} 4298[class*="skeleton"], 4299[class*="placeholder"], 4300[class*="loading"]{ 4301 background:transparent !important; 4302} 4303 4304/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 4305.image-wrapper{ 4306 position:relative; 4307 width:100%; 4308 aspect-ratio:1/1; 4309 overflow:hidden; 4310 background:#fff !important; 4311} 4312 4313.image{ 4314 position:relative; 4315 width:100%; 4316 height:100%; 4317} 4318 4319.image-wrapper img{ 4320 width:100% !important; 4321 height:100% !important; 4322 object-fit:cover !important; 4323 object-position:center center !important; 4324 display:block; 4325 transition:transform .35s ease; 4326} 4327 4328/* ===== DISCOUNT ===== */ 4329.discount{ 4330 position:absolute; 4331 top:12px; 4332 left:12px; 4333 width:28px; 4334 height:48px; 4335 background:#e10b0b; 4336 color:#fff; 4337 font-size:12px; 4338 font-weight:600; 4339 display:flex; 4340 align-items:center; 4341 justify-content:center; 4342 writing-mode:vertical-rl; 4343 transform:rotate(180deg); 4344 letter-spacing:.5px; 4345 z-index:7; 4346} 4347 4348/* ===== FAV ===== */ 4349.lux-fav{ 4350 position:absolute; 4351 top:12px; 4352 right:12px; 4353 z-index:7; 4354} 4355.lux-fav a, 4356.lux-fav button{ 4357 background:transparent !important; 4358 border:0 !important; 4359 padding:0 !important; 4360 cursor:pointer; 4361 display:inline-flex; 4362 align-items:center; 4363 justify-content:center; 4364} 4365 4366/* ===== SEPET IKON ===== */ 4367.lux-bag{ 4368 position:absolute; 4369 bottom:12px; 4370 right:12px; 4371 z-index:7; 4372 width:34px; 4373 height:34px; 4374 display:inline-flex; 4375 align-items:center; 4376 justify-content:center; 4377 background:rgba(255,255,255,.92); 4378 border:1px solid rgba(0,0,0,.10); 4379 border-radius:10px; 4380 cursor:pointer; 4381 transition:.2s ease; 4382} 4383.lux-bag:hover{ 4384 background:#fff; 4385 border-color:rgba(0,0,0,.25); 4386} 4387.lux-bag.is-loading{ 4388 opacity:.6; 4389 cursor:wait; 4390} 4391.lux-bag.is-success{ 4392 background:#2e7d32 !important; 4393 border-color:#2e7d32 !important; 4394 color:#fff !important; 4395} 4396.card-product.sizes-open .lux-bag{ 4397 opacity:0; 4398 pointer-events:none; 4399} 4400 4401/* Loading spinner */ 4402.lux-bag.is-loading i::before{ 4403 content:"â³"; 4404} 4405 4406/* ===== SIZE STRIP ===== */ 4407.size-strip{ 4408 width:100%; 4409 max-height:0; 4410 overflow:hidden; 4411 background:#fff; 4412 display:flex; 4413 flex-wrap:wrap; 4414 transition:max-height .3s ease, border-color .3s ease; 4415 border-top:1px solid transparent; 4416 border-bottom:1px solid transparent; 4417} 4418.size-strip.open{ 4419 max-height:200px; 4420 border-top-color:rgba(0,0,0,.08); 4421 border-bottom-color:rgba(0,0,0,.08); 4422} 4423.size-item{ 4424 flex:1 0 auto; 4425 min-width:38px; 4426 height:42px; 4427 display:flex; 4428 align-items:center; 4429 justify-content:center; 4430 font-size:13px; 4431 font-weight:500; 4432 color:#111 !important; 4433 cursor:pointer; 4434 user-select:none; 4435 background:transparent; 4436 transition:background .15s ease, color .15s ease; 4437 border-right:1px solid rgba(0,0,0,.08); 4438} 4439.size-item:last-child{ border-right:0; } 4440.size-item:hover:not(.disabled):not(.adding){ 4441 background:#000 !important; 4442 color:#fff !important; 4443} 4444.size-item.disabled{ 4445 color:#111 !important; 4446 text-decoration:line-through !important; 4447 opacity:.30 !important; 4448 cursor:not-allowed; 4449} 4450.size-item.adding{ 4451 background:#2e7d32 !important; 4452 color:#fff !important; 4453 cursor:wait; 4454} 4455 4456/* ===== META ===== */ 4457.lux-meta{ 4458 padding:12px 6px 6px; 4459 background:transparent !important; 4460} 4461.lux-brand{ 4462 font-size:16px; 4463 font-weight:600; 4464 color:#111; 4465 margin-bottom:2px; 4466} 4467.lux-title{ 4468 font-size:14px; 4469 font-weight:400; 4470 line-height:1.45; 4471 color:#111; 4472 margin:0; 4473} 4474.lux-price{ 4475 margin-top:10px; 4476 display:flex; 4477 gap:10px; 4478 align-items:baseline; 4479 background:transparent !important; 4480} 4481.lux-price .list-price{ 4482 font-size:14px; 4483 font-weight:400; 4484 color:#111; 4485 text-decoration:line-through; 4486} 4487.lux-price .sale-price{ 4488 font-size:16px; 4489 font-weight:600; 4490 color:#e10b0b; 4491} 4492 4493.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
4494.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 4495</style><div class="card-product" 4496 id="card-10477" 4497 data-lux-card-id="10477" 4498 data-lux-product-link="https://www.vezzalux.com/vltn-1200-taba-sneaker-erkek-ayakkabi" 4499 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/vltn-1200-taba-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Vltn 1200 Taba Sneaker Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cdca20ef0-36758161-sw1200sh1200.webp" alt="Vltn 1200 Taba Sneaker Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cdca20ef0-36758161-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cdcb6dca2-69071046-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" 4500 onclick="userProductFavourite('add', 10477)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 4501 id="lux-bag-10477" 4502 onclick="return luxBagClick(event, 10477);" 4503 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10477" style="display:none;"></div><div class="size-strip" id="size-strip-10477" data-loaded="0"></div><a href="https://www.vezzalux.com/vltn-1200-taba-sneaker-erkek-ayakkabi" class="c-p-i-link" title="Vltn 1200 Taba Sneaker Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Valentino</div><div class="lux-title">Vltn 1200 Taba Sneaker Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
4503<script> 4504(function(){ 4505 4506 /* Bir kez kur */ 4507 if(window.__luxCardInit) return; 4508 window.__luxCardInit = true; 4509 4510 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 4511 window.__luxVariantCache = window.__luxVariantCache || {}; 4512 4513 function closeAll(){ 4514 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4515 s.classList.remove('open'); 4516 }); 4517 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4518 c.classList.remove('sizes-open'); 4519 }); 4520 } 4521 4522 function flashSuccess(productId){ 4523 var bag = document.getElementById('lux-bag-' + productId); 4524 if(!bag) return; 4525 bag.classList.add('is-success'); 4526 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 4527 } 4528 4529 /* DıŠtıklama - kapat */ 4530 document.addEventListener('click', function(e){ 4531 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 4532 if(!inside) closeAll(); 4533 }); 4534 4535 document.addEventListener('keydown', function(e){ 4536 if(e.key === 'Escape') closeAll(); 4537 }); 4538 4539 4540 /* ============================================ 4541 MODAL KILLER - yedek güvence 4542 ============================================ */ 4543 var LUX_MODAL_KILL_ACTIVE = false; 4544 4545 function killVisibleModals(){ 4546 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 4547 modals.forEach(function(m){ 4548 var id = (m.id || '').toLowerCase(); 4549 var txt = (m.textContent || '').toLowerCase(); 4550 var isCartModal = id.indexOf('cart') > -1 4551 || id.indexOf('variant') > -1 4552 || id.indexOf('fast') > -1 4553 || id.indexOf('urun') > -1 4554 || txt.indexOf('lütfen seçin') > -1; 4555 4556 if(isCartModal){ 4557 if(typeof jQuery !== 'undefined'){ 4558 try { jQuery(m).modal('hide'); } catch(e){} 4559 } 4560 m.classList.remove('show','in'); 4561 m.style.display = 'none'; 4562 } 4563 }); 4564 4565 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 4566 document.body.classList.remove('modal-open'); 4567 document.body.style.overflow = ''; 4568 document.body.style.paddingRight = ''; 4569 } 4570 4571 function startModalKill(durationMs){ 4572 if(LUX_MODAL_KILL_ACTIVE) return; 4573 LUX_MODAL_KILL_ACTIVE = true; 4574 killVisibleModals(); 4575 var interval = setInterval(killVisibleModals, 50); 4576 setTimeout(function(){ 4577 clearInterval(interval); 4578 LUX_MODAL_KILL_ACTIVE = false; 4579 }, durationMs || 2000); 4580 } 4581 4582 4583 /* ============================================ 4584 AJAX: Varyantları detay sayfasından çek 4585 ============================================ 4586 Ãrün detay sayfasının tam HTML'ini indir, 4587 DOMParser ile parse et, varyantları bul 4588 ============================================ */ 4589 function fetchVariants(productId, productLink, callback){ 4590 4591 /* Cache'te varsa hemen döndür */ 4592 if(window.__luxVariantCache[productId]){ 4593 callback(window.__luxVariantCache[productId]); 4594 return; 4595 } 4596 4597 fetch(productLink, { 4598 method: 'GET', 4599 credentials: 'same-origin', 4600 headers: { 'Accept': 'text/html' } 4601 }) 4602 .then(function(r){ return r.text(); }) 4603 .then(function(html){ 4604 var parser = new DOMParser(); 4605 var doc = parser.parseFromString(html, 'text/html'); 4606 4607 /* Detay sayfasındaki .variant-box'ı bul */ 4608 var variantBox = doc.querySelector('.variant-box'); 4609 if(!variantBox){ 4610 callback({ variants: [], error: 'no_variant_box' }); 4611 return; 4612 } 4613 4614 /* Her varyant grubu için select'leri ve option'ları oku */ 4615 var variants = []; 4616 var variantLis = variantBox.querySelectorAll('.variant'); 4617 4618 variantLis.forEach(function(li, idx){ 4619 var nameEl = li.querySelector('.name'); 4620 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 4621 4622 var values = []; 4623 4624 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 4625 var optLinks = li.querySelectorAll('.options a'); 4626 4627 if(optLinks.length > 0){ 4628 optLinks.forEach(function(a){ 4629 /* Beden/renk deÄerini doÄru attribute'tan oku
4630 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 4631 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 4632 - textContent: fallback */ 4633 var deger = a.getAttribute('data-variant-value') 4634 || a.textContent.trim(); 4635 4636 /* Stok kontrolü - birden fazla yoldan kontrol et */ 4637 var isSoldOut = a.classList.contains('sold-out') 4638 || a.classList.contains('sold_out') 4639 || a.classList.contains('disabled') 4640 || a.classList.contains('stoksuz') 4641 || a.classList.contains('out-of-stock') 4642 || a.hasAttribute('disabled') 4643 || a.getAttribute('data-in-stock') === '0' 4644 || a.getAttribute('data-in-stock') === 'false' 4645 || a.getAttribute('data-stokta-var-mi') === '0' 4646 || a.getAttribute('data-stokta-var-mi') === 'false'; 4647 4648 values.push({ 4649 deger: deger, 4650 inStock: !isSoldOut 4651 }); 4652 }); 4653 } else { 4654 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 4655 var select = li.querySelector('select'); 4656 if(select){ 4657 var opts = select.querySelectorAll('option'); 4658 opts.forEach(function(o){ 4659 if(!o.value) return; 4660 values.push({ 4661 deger: o.value, 4662 inStock: !o.disabled 4663 }); 4664 }); 4665 } 4666 } 4667 4668 variants.push({ 4669 index: idx, 4670 baslik: name, 4671 values: values 4672 }); 4673 }); 4674 4675 var result = { variants: variants }; 4676 window.__luxVariantCache[productId] = result; 4677 callback(result); 4678 }) 4679 .catch(function(err){ 4680 console.error('Varyant çekme hatası:', err); 4681 callback({ variants: [], error: 'fetch_failed' }); 4682 }); 4683 } 4684 4685 4686 /* ============================================ 4687 Beden Åeridini ve gizli variant-box'ı oluÅtur 4688 ============================================ */ 4689 function buildVariantUI(productId, data){ 4690 var card = document.getElementById('card-' + productId); 4691 if(!card) return false; 4692 4693 var holder = card.querySelector('.lux-variant-box'); 4694 var strip = document.getElementById('size-strip-' + productId); 4695 if(!holder || !strip) return false; 4696 4697 if(!data.variants || data.variants.length === 0){ 4698 /* Varyant yok */ 4699 return false; 4700 } 4701 4702 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 4703 var displayVariant = null;
4704 data.variants.forEach(function(v){ 4705 if(!displayVariant && v.values.length > 1){ 4706 displayVariant = v; 4707 } 4708 }); 4709 4710 /* Gizli variant-box HTML */ 4711 var html = '<div class="variant-box"><ul>'; 4712 data.variants.forEach(function(v){ 4713 html += '<li class="variant">'; 4714 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 4715 4716 if(v.values.length > 1){ 4717 html += '<option value="">Lütfen seçin</option>'; 4718 } 4719 4720 v.values.forEach(function(val, i){ 4721 var selected = (v.values.length === 1) ? ' selected' : ''; 4722 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 4723 }); 4724 4725 html += '</select></li>'; 4726 }); 4727 html += '</ul></div>'; 4728 4729 holder.innerHTML = html; 4730 holder.style.display = ''; 4731 4732 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 4733 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 4734 if(displayVariant){ 4735 var stripHtml = ''; 4736 var inStockCount = 0; 4737 4738 /* DEBUG - console'da gör */ 4739 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 4740 4741 displayVariant.values.forEach(function(val){ 4742 /* SADECE stokta olanları ekle */ 4743 if(val.inStock === true){ 4744 stripHtml += '<div class="size-item" ' 4745 + 'data-urun-id="' + productId + '" ' 4746 + 'data-varyant-deger="' + val.deger + '" ' 4747 + 'onclick="return luxAddVariant(event, this);">' 4748 + val.deger + '</div>'; 4749 inStockCount++; 4750 } 4751 }); 4752 4753 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 4754 if(inStockCount === 0){ 4755 strip.setAttribute('data-loaded', '1'); 4756 strip.setAttribute('data-has-variants', '0'); 4757 return false; 4758 } 4759
4760 strip.innerHTML = stripHtml; 4761 strip.setAttribute('data-loaded', '1'); 4762 strip.setAttribute('data-has-variants', '1'); 4763 return true; 4764 } else { 4765 strip.setAttribute('data-loaded', '1'); 4766 strip.setAttribute('data-has-variants', '0'); 4767 return false; 4768 } 4769 } 4770 4771 4772 /* ============================================ 4773 SEPET IKONU TIKLAMASI 4774 ============================================ */ 4775 window.luxBagClick = function(ev, productId){ 4776 ev.preventDefault(); 4777 ev.stopPropagation(); 4778 4779 var card = document.getElementById('card-' + productId); 4780 var strip = document.getElementById('size-strip-' + productId); 4781 var bag = document.getElementById('lux-bag-' + productId); 4782 if(!card || !strip) return false; 4783 4784 /* Strip zaten yüklenmiÅse direkt davran */ 4785 if(strip.getAttribute('data-loaded') === '1'){ 4786 if(strip.getAttribute('data-has-variants') === '1'){ 4787 toggleStrip(productId); 4788 } else { 4789 addToCartSmart(productId); 4790 } 4791 return false; 4792 } 4793 4794 /* İlk tıklama - AJAX ile varyantları çek */ 4795 bag.classList.add('is-loading'); 4796 var productLink = card.getAttribute('data-lux-product-link'); 4797 4798 fetchVariants(productId, productLink, function(data){ 4799 bag.classList.remove('is-loading'); 4800 4801 var hasVariants = buildVariantUI(productId, data); 4802 4803 if(hasVariants){ 4804 /* Bedenler var - Åeridi aç */ 4805 toggleStrip(productId); 4806 } else { 4807 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 4808 addToCartSmart(productId); 4809 } 4810 }); 4811 4812 return false; 4813 }; 4814 4815 function toggleStrip(productId){ 4816 var strip = document.getElementById('size-strip-' + productId); 4817 var card = document.getElementById('card-' + productId); 4818 if(!strip) return; 4819 4820 document.querySelectorAll('.size-strip.open').forEach(function(s){ 4821 if(s !== strip) s.classList.remove('open'); 4822 }); 4823 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 4824 if(c !== card) c.classList.remove('sizes-open'); 4825 }); 4826 4827 strip.classList.toggle('open'); 4828 if(card) card.classList.toggle('sizes-open'); 4829 } 4830 4831 4832 /* ============================================ 4833 BEDEN TIKLAMASI 4834 ============================================ */ 4835 window.luxAddVariant = function(ev, elem){ 4836 ev.preventDefault(); 4837 ev.stopPropagation(); 4838 4839 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 4840 4841 var productId = elem.getAttribute('data-urun-id'); 4842 var varyantDeger = elem.getAttribute('data-varyant-deger'); 4843 4844 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4845 if(!holder) return false; 4846 4847 /* Seçilen bedeni ilk select'e yaz */ 4848 var firstSelect = holder.querySelector('select[data-variant="0"]'); 4849 if(firstSelect){ 4850 firstSelect.value = varyantDeger; 4851 if(typeof jQuery !== "undefined"){ 4852 jQuery(firstSelect).val(varyantDeger).trigger('change'); 4853 } 4854 } 4855 4856 /* DiÄer select'lere ilk geçerli deÄeri koy */ 4857 var allSelects = holder.querySelectorAll('select[data-variant]'); 4858 allSelects.forEach(function(sel, idx){ 4859 if(idx === 0) return; 4860 if(sel.value) return; 4861 var options = sel.querySelectorAll('option'); 4862 for(var i = 0; i < options.length; i++){ 4863 if(options[i].value){ 4864 sel.value = options[i].value; 4865 if(typeof jQuery !== "undefined"){ 4866 jQuery(sel).val(options[i].value).trigger('change'); 4867 } 4868 break; 4869 } 4870 } 4871 }); 4872 4873 /* Görsel feedback */ 4874 elem.classList.add('adding'); 4875 var originalText = elem.textContent; 4876 elem.textContent = 'â'; 4877 4878 /* Sepete ekle */ 4879 addToCartSmart(productId, { 4880 checkVariant: true, 4881 variantCount: allSelects.length, 4882 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 4883 }); 4884 4885 setTimeout(function(){ 4886 elem.textContent = originalText; 4887 elem.classList.remove('adding'); 4888 closeAll(); 4889 }, 800); 4890 4891 return false; 4892 }; 4893 4894 4895 /* ============================================ 4896 SEPETE EKLE - Modal killer ile 4897 ============================================ */ 4898 function addToCartSmart(productId, extraOptions){ 4899 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 4900 4901 var options = { 4902 quantity: 1, 4903 hideNativeModal: 'lux-card-' + productId 4904 }; 4905 4906 if(extraOptions){
4907 Object.keys(extraOptions).forEach(function(k){ 4908 options[k] = extraOptions[k]; 4909 }); 4910 } else if(holder){ 4911 var selects = holder.querySelectorAll('select[data-variant]'); 4912 if(selects.length > 0){ 4913 options.checkVariant = true; 4914 options.variantCount = selects.length; 4915 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 4916 } 4917 } 4918 4919 startModalKill(2000); 4920 4921 if(typeof addCart === "function"){ 4922 try { 4923 addCart(productId, 'card', options); 4924 flashSuccess(productId); 4925 } catch(err){ 4926 console.error('Sepete ekleme hatası:', err); 4927 } 4928 } 4929 } 4930 4931})(); 4932</script>
4932</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 4933 data-lux-product-shell="1" 4934 data-lux-page="1"><style> 4935@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 4936 4937/* ===== VEZZA LUX CARD ===== */ 4938.card-product{ 4939 font-family:'Poppins',sans-serif; 4940 background:#fff !important; 4941 position:relative; 4942} 4943.card-product-inner{ 4944 background:transparent !important; 4945 position:relative; 4946} 4947.card-product .c-p-i-link, 4948.card-product a{ 4949 background:transparent !important; 4950} 4951.card-product-inner > div{ 4952 background:transparent !important; 4953} 4954.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 4955 background:transparent !important; 4956} 4957.card-product .card-product-content, 4958.card-product .price-group, 4959.card-product .prices{ 4960 background:transparent !important; 4961} 4962[class*="skeleton"], 4963[class*="placeholder"], 4964[class*="loading"]{ 4965 background:transparent !important; 4966} 4967 4968/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 4969.image-wrapper{ 4970 position:relative; 4971 width:100%; 4972 aspect-ratio:1/1; 4973 overflow:hidden; 4974 background:#fff !important; 4975} 4976 4977.image{ 4978 position:relative; 4979 width:100%; 4980 height:100%; 4981} 4982 4983.image-wrapper img{ 4984 width:100% !important; 4985 height:100% !important; 4986 object-fit:cover !important; 4987 object-position:center center !important; 4988 display:block; 4989 transition:transform .35s ease; 4990} 4991 4992/* ===== DISCOUNT ===== */ 4993.discount{ 4994 position:absolute; 4995 top:12px; 4996 left:12px; 4997 width:28px; 4998 height:48px; 4999 background:#e10b0b; 5000 color:#fff; 5001 font-size:12px; 5002 font-weight:600; 5003 display:flex; 5004 align-items:center; 5005 justify-content:center; 5006 writing-mode:vertical-rl; 5007 transform:rotate(180deg); 5008 letter-spacing:.5px; 5009 z-index:7; 5010} 5011 5012/* ===== FAV ===== */ 5013.lux-fav{ 5014 position:absolute; 5015 top:12px; 5016 right:12px; 5017 z-index:7; 5018} 5019.lux-fav a, 5020.lux-fav button{ 5021 background:transparent !important; 5022 border:0 !important; 5023 padding:0 !important; 5024 cursor:pointer; 5025 display:inline-flex; 5026 align-items:center; 5027 justify-content:center; 5028} 5029 5030/* ===== SEPET IKON ===== */ 5031.lux-bag{ 5032 position:absolute; 5033 bottom:12px; 5034 right:12px; 5035 z-index:7; 5036 width:34px; 5037 height:34px; 5038 display:inline-flex; 5039 align-items:center; 5040 justify-content:center; 5041 background:rgba(255,255,255,.92); 5042 border:1px solid rgba(0,0,0,.10); 5043 border-radius:10px; 5044 cursor:pointer; 5045 transition:.2s ease; 5046} 5047.lux-bag:hover{ 5048 background:#fff; 5049 border-color:rgba(0,0,0,.25); 5050} 5051.lux-bag.is-loading{ 5052 opacity:.6; 5053 cursor:wait; 5054} 5055.lux-bag.is-success{ 5056 background:#2e7d32 !important; 5057 border-color:#2e7d32 !important; 5058 color:#fff !important; 5059} 5060.card-product.sizes-open .lux-bag{ 5061 opacity:0; 5062 pointer-events:none; 5063} 5064 5065/* Loading spinner */ 5066.lux-bag.is-loading i::before{ 5067 content:"â³"; 5068} 5069 5070/* ===== SIZE STRIP ===== */ 5071.size-strip{ 5072 width:100%; 5073 max-height:0; 5074 overflow:hidden; 5075 background:#fff; 5076 display:flex; 5077 flex-wrap:wrap; 5078 transition:max-height .3s ease, border-color .3s ease; 5079 border-top:1px solid transparent; 5080 border-bottom:1px solid transparent; 5081} 5082.size-strip.open{ 5083 max-height:200px; 5084 border-top-color:rgba(0,0,0,.08); 5085 border-bottom-color:rgba(0,0,0,.08); 5086} 5087.size-item{ 5088 flex:1 0 auto; 5089 min-width:38px; 5090 height:42px; 5091 display:flex; 5092 align-items:center; 5093 justify-content:center; 5094 font-size:13px; 5095 font-weight:500; 5096 color:#111 !important; 5097 cursor:pointer; 5098 user-select:none; 5099 background:transparent; 5100 transition:background .15s ease, color .15s ease; 5101 border-right:1px solid rgba(0,0,0,.08); 5102} 5103.size-item:last-child{ border-right:0; } 5104.size-item:hover:not(.disabled):not(.adding){ 5105 background:#000 !important; 5106 color:#fff !important; 5107} 5108.size-item.disabled{ 5109 color:#111 !important; 5110 text-decoration:line-through !important; 5111 opacity:.30 !important; 5112 cursor:not-allowed; 5113} 5114.size-item.adding{ 5115 background:#2e7d32 !important; 5116 color:#fff !important; 5117 cursor:wait; 5118} 5119 5120/* ===== META ===== */ 5121.lux-meta{ 5122 padding:12px 6px 6px; 5123 background:transparent !important; 5124} 5125.lux-brand{ 5126 font-size:16px; 5127 font-weight:600; 5128 color:#111; 5129 margin-bottom:2px; 5130} 5131.lux-title{ 5132 font-size:14px; 5133 font-weight:400; 5134 line-height:1.45; 5135 color:#111; 5136 margin:0; 5137} 5138.lux-price{ 5139 margin-top:10px; 5140 display:flex; 5141 gap:10px; 5142 align-items:baseline; 5143 background:transparent !important; 5144} 5145.lux-price .list-price{ 5146 font-size:14px; 5147 font-weight:400; 5148 color:#111; 5149 text-decoration:line-through; 5150} 5151.lux-price .sale-price{ 5152 font-size:16px; 5153 font-weight:600; 5154 color:#e10b0b; 5155} 5156 5157.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
5158.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 5159</style><div class="card-product" 5160 id="card-10258" 5161 data-lux-card-id="10258" 5162 data-lux-product-link="https://www.vezzalux.com/fendi-926-beyaz-yesil-erkek-ayakkabi" 5163 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/fendi-926-beyaz-yesil-erkek-ayakkabi" class="c-p-i-link" title="Fendi 926 Beyaz YeÅil Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c95a491d8-44320571-sw1200sh1200.webp" alt="Fendi 926 Beyaz YeÅil Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c95a491d8-44320571-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c958a71b8-42963895-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" 5164 onclick="userProductFavourite('add', 10258)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 5165 id="lux-bag-10258" 5166 onclick="return luxBagClick(event, 10258);" 5167 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10258" style="display:none;"></div><div class="size-strip" id="size-strip-10258" data-loaded="0"></div><a href="https://www.vezzalux.com/fendi-926-beyaz-yesil-erkek-ayakkabi" class="c-p-i-link" title="Fendi 926 Beyaz YeÅil Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Fendi</div><div class="lux-title">Fendi 926 Beyaz YeÅil Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
5167<script> 5168(function(){ 5169 5170 /* Bir kez kur */ 5171 if(window.__luxCardInit) return; 5172 window.__luxCardInit = true; 5173 5174 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 5175 window.__luxVariantCache = window.__luxVariantCache || {}; 5176 5177 function closeAll(){ 5178 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5179 s.classList.remove('open'); 5180 }); 5181 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5182 c.classList.remove('sizes-open'); 5183 }); 5184 } 5185 5186 function flashSuccess(productId){ 5187 var bag = document.getElementById('lux-bag-' + productId); 5188 if(!bag) return; 5189 bag.classList.add('is-success'); 5190 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 5191 } 5192 5193 /* DıŠtıklama - kapat */ 5194 document.addEventListener('click', function(e){ 5195 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 5196 if(!inside) closeAll(); 5197 }); 5198 5199 document.addEventListener('keydown', function(e){ 5200 if(e.key === 'Escape') closeAll(); 5201 }); 5202 5203 5204 /* ============================================ 5205 MODAL KILLER - yedek güvence 5206 ============================================ */ 5207 var LUX_MODAL_KILL_ACTIVE = false; 5208 5209 function killVisibleModals(){ 5210 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 5211 modals.forEach(function(m){ 5212 var id = (m.id || '').toLowerCase(); 5213 var txt = (m.textContent || '').toLowerCase(); 5214 var isCartModal = id.indexOf('cart') > -1 5215 || id.indexOf('variant') > -1 5216 || id.indexOf('fast') > -1 5217 || id.indexOf('urun') > -1 5218 || txt.indexOf('lütfen seçin') > -1; 5219 5220 if(isCartModal){ 5221 if(typeof jQuery !== 'undefined'){ 5222 try { jQuery(m).modal('hide'); } catch(e){} 5223 } 5224 m.classList.remove('show','in'); 5225 m.style.display = 'none'; 5226 } 5227 }); 5228 5229 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 5230 document.body.classList.remove('modal-open'); 5231 document.body.style.overflow = ''; 5232 document.body.style.paddingRight = ''; 5233 } 5234 5235 function startModalKill(durationMs){ 5236 if(LUX_MODAL_KILL_ACTIVE) return; 5237 LUX_MODAL_KILL_ACTIVE = true; 5238 killVisibleModals(); 5239 var interval = setInterval(killVisibleModals, 50); 5240 setTimeout(function(){ 5241 clearInterval(interval); 5242 LUX_MODAL_KILL_ACTIVE = false; 5243 }, durationMs || 2000); 5244 } 5245 5246 5247 /* ============================================ 5248 AJAX: Varyantları detay sayfasından çek 5249 ============================================ 5250 Ãrün detay sayfasının tam HTML'ini indir, 5251 DOMParser ile parse et, varyantları bul 5252 ============================================ */ 5253 function fetchVariants(productId, productLink, callback){ 5254 5255 /* Cache'te varsa hemen döndür */ 5256 if(window.__luxVariantCache[productId]){ 5257 callback(window.__luxVariantCache[productId]); 5258 return; 5259 } 5260 5261 fetch(productLink, { 5262 method: 'GET', 5263 credentials: 'same-origin', 5264 headers: { 'Accept': 'text/html' } 5265 }) 5266 .then(function(r){ return r.text(); }) 5267 .then(function(html){ 5268 var parser = new DOMParser(); 5269 var doc = parser.parseFromString(html, 'text/html'); 5270 5271 /* Detay sayfasındaki .variant-box'ı bul */ 5272 var variantBox = doc.querySelector('.variant-box'); 5273 if(!variantBox){ 5274 callback({ variants: [], error: 'no_variant_box' }); 5275 return; 5276 } 5277 5278 /* Her varyant grubu için select'leri ve option'ları oku */ 5279 var variants = []; 5280 var variantLis = variantBox.querySelectorAll('.variant'); 5281 5282 variantLis.forEach(function(li, idx){ 5283 var nameEl = li.querySelector('.name'); 5284 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 5285 5286 var values = []; 5287 5288 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 5289 var optLinks = li.querySelectorAll('.options a'); 5290 5291 if(optLinks.length > 0){ 5292 optLinks.forEach(function(a){ 5293 /* Beden/renk deÄerini doÄru attribute'tan oku
5294 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 5295 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 5296 - textContent: fallback */ 5297 var deger = a.getAttribute('data-variant-value') 5298 || a.textContent.trim(); 5299 5300 /* Stok kontrolü - birden fazla yoldan kontrol et */ 5301 var isSoldOut = a.classList.contains('sold-out') 5302 || a.classList.contains('sold_out') 5303 || a.classList.contains('disabled') 5304 || a.classList.contains('stoksuz') 5305 || a.classList.contains('out-of-stock') 5306 || a.hasAttribute('disabled') 5307 || a.getAttribute('data-in-stock') === '0' 5308 || a.getAttribute('data-in-stock') === 'false' 5309 || a.getAttribute('data-stokta-var-mi') === '0' 5310 || a.getAttribute('data-stokta-var-mi') === 'false'; 5311 5312 values.push({ 5313 deger: deger, 5314 inStock: !isSoldOut 5315 }); 5316 }); 5317 } else { 5318 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 5319 var select = li.querySelector('select'); 5320 if(select){ 5321 var opts = select.querySelectorAll('option'); 5322 opts.forEach(function(o){ 5323 if(!o.value) return; 5324 values.push({ 5325 deger: o.value, 5326 inStock: !o.disabled 5327 }); 5328 }); 5329 } 5330 } 5331 5332 variants.push({ 5333 index: idx, 5334 baslik: name, 5335 values: values 5336 }); 5337 }); 5338 5339 var result = { variants: variants }; 5340 window.__luxVariantCache[productId] = result; 5341 callback(result); 5342 }) 5343 .catch(function(err){ 5344 console.error('Varyant çekme hatası:', err); 5345 callback({ variants: [], error: 'fetch_failed' }); 5346 }); 5347 } 5348 5349 5350 /* ============================================ 5351 Beden Åeridini ve gizli variant-box'ı oluÅtur 5352 ============================================ */ 5353 function buildVariantUI(productId, data){ 5354 var card = document.getElementById('card-' + productId); 5355 if(!card) return false; 5356 5357 var holder = card.querySelector('.lux-variant-box'); 5358 var strip = document.getElementById('size-strip-' + productId); 5359 if(!holder || !strip) return false; 5360 5361 if(!data.variants || data.variants.length === 0){ 5362 /* Varyant yok */ 5363 return false; 5364 } 5365 5366 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 5367 var displayVariant = null;
5368 data.variants.forEach(function(v){ 5369 if(!displayVariant && v.values.length > 1){ 5370 displayVariant = v; 5371 } 5372 }); 5373 5374 /* Gizli variant-box HTML */ 5375 var html = '<div class="variant-box"><ul>'; 5376 data.variants.forEach(function(v){ 5377 html += '<li class="variant">'; 5378 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 5379 5380 if(v.values.length > 1){ 5381 html += '<option value="">Lütfen seçin</option>'; 5382 } 5383 5384 v.values.forEach(function(val, i){ 5385 var selected = (v.values.length === 1) ? ' selected' : ''; 5386 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 5387 }); 5388 5389 html += '</select></li>'; 5390 }); 5391 html += '</ul></div>'; 5392 5393 holder.innerHTML = html; 5394 holder.style.display = ''; 5395 5396 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 5397 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 5398 if(displayVariant){ 5399 var stripHtml = ''; 5400 var inStockCount = 0; 5401 5402 /* DEBUG - console'da gör */ 5403 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 5404 5405 displayVariant.values.forEach(function(val){ 5406 /* SADECE stokta olanları ekle */ 5407 if(val.inStock === true){ 5408 stripHtml += '<div class="size-item" ' 5409 + 'data-urun-id="' + productId + '" ' 5410 + 'data-varyant-deger="' + val.deger + '" ' 5411 + 'onclick="return luxAddVariant(event, this);">' 5412 + val.deger + '</div>'; 5413 inStockCount++; 5414 } 5415 }); 5416 5417 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 5418 if(inStockCount === 0){ 5419 strip.setAttribute('data-loaded', '1'); 5420 strip.setAttribute('data-has-variants', '0'); 5421 return false; 5422 } 5423
5424 strip.innerHTML = stripHtml; 5425 strip.setAttribute('data-loaded', '1'); 5426 strip.setAttribute('data-has-variants', '1'); 5427 return true; 5428 } else { 5429 strip.setAttribute('data-loaded', '1'); 5430 strip.setAttribute('data-has-variants', '0'); 5431 return false; 5432 } 5433 } 5434 5435 5436 /* ============================================ 5437 SEPET IKONU TIKLAMASI 5438 ============================================ */ 5439 window.luxBagClick = function(ev, productId){ 5440 ev.preventDefault(); 5441 ev.stopPropagation(); 5442 5443 var card = document.getElementById('card-' + productId); 5444 var strip = document.getElementById('size-strip-' + productId); 5445 var bag = document.getElementById('lux-bag-' + productId); 5446 if(!card || !strip) return false; 5447 5448 /* Strip zaten yüklenmiÅse direkt davran */ 5449 if(strip.getAttribute('data-loaded') === '1'){ 5450 if(strip.getAttribute('data-has-variants') === '1'){ 5451 toggleStrip(productId); 5452 } else { 5453 addToCartSmart(productId); 5454 } 5455 return false; 5456 } 5457 5458 /* İlk tıklama - AJAX ile varyantları çek */ 5459 bag.classList.add('is-loading'); 5460 var productLink = card.getAttribute('data-lux-product-link'); 5461 5462 fetchVariants(productId, productLink, function(data){ 5463 bag.classList.remove('is-loading'); 5464 5465 var hasVariants = buildVariantUI(productId, data); 5466 5467 if(hasVariants){ 5468 /* Bedenler var - Åeridi aç */ 5469 toggleStrip(productId); 5470 } else { 5471 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 5472 addToCartSmart(productId); 5473 } 5474 }); 5475 5476 return false; 5477 }; 5478 5479 function toggleStrip(productId){ 5480 var strip = document.getElementById('size-strip-' + productId); 5481 var card = document.getElementById('card-' + productId); 5482 if(!strip) return; 5483 5484 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5485 if(s !== strip) s.classList.remove('open'); 5486 }); 5487 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5488 if(c !== card) c.classList.remove('sizes-open'); 5489 }); 5490 5491 strip.classList.toggle('open'); 5492 if(card) card.classList.toggle('sizes-open'); 5493 } 5494 5495 5496 /* ============================================ 5497 BEDEN TIKLAMASI 5498 ============================================ */ 5499 window.luxAddVariant = function(ev, elem){ 5500 ev.preventDefault(); 5501 ev.stopPropagation(); 5502 5503 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 5504 5505 var productId = elem.getAttribute('data-urun-id'); 5506 var varyantDeger = elem.getAttribute('data-varyant-deger'); 5507 5508 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 5509 if(!holder) return false; 5510 5511 /* Seçilen bedeni ilk select'e yaz */ 5512 var firstSelect = holder.querySelector('select[data-variant="0"]'); 5513 if(firstSelect){ 5514 firstSelect.value = varyantDeger; 5515 if(typeof jQuery !== "undefined"){ 5516 jQuery(firstSelect).val(varyantDeger).trigger('change'); 5517 } 5518 } 5519 5520 /* DiÄer select'lere ilk geçerli deÄeri koy */ 5521 var allSelects = holder.querySelectorAll('select[data-variant]'); 5522 allSelects.forEach(function(sel, idx){ 5523 if(idx === 0) return; 5524 if(sel.value) return; 5525 var options = sel.querySelectorAll('option'); 5526 for(var i = 0; i < options.length; i++){ 5527 if(options[i].value){ 5528 sel.value = options[i].value; 5529 if(typeof jQuery !== "undefined"){ 5530 jQuery(sel).val(options[i].value).trigger('change'); 5531 } 5532 break; 5533 } 5534 } 5535 }); 5536 5537 /* Görsel feedback */ 5538 elem.classList.add('adding'); 5539 var originalText = elem.textContent; 5540 elem.textContent = 'â'; 5541 5542 /* Sepete ekle */ 5543 addToCartSmart(productId, { 5544 checkVariant: true, 5545 variantCount: allSelects.length, 5546 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 5547 }); 5548 5549 setTimeout(function(){ 5550 elem.textContent = originalText; 5551 elem.classList.remove('adding'); 5552 closeAll(); 5553 }, 800); 5554 5555 return false; 5556 }; 5557 5558 5559 /* ============================================ 5560 SEPETE EKLE - Modal killer ile 5561 ============================================ */ 5562 function addToCartSmart(productId, extraOptions){ 5563 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 5564 5565 var options = { 5566 quantity: 1, 5567 hideNativeModal: 'lux-card-' + productId 5568 }; 5569 5570 if(extraOptions){
5571 Object.keys(extraOptions).forEach(function(k){ 5572 options[k] = extraOptions[k]; 5573 }); 5574 } else if(holder){ 5575 var selects = holder.querySelectorAll('select[data-variant]'); 5576 if(selects.length > 0){ 5577 options.checkVariant = true; 5578 options.variantCount = selects.length; 5579 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 5580 } 5581 } 5582 5583 startModalKill(2000); 5584 5585 if(typeof addCart === "function"){ 5586 try { 5587 addCart(productId, 'card', options); 5588 flashSuccess(productId); 5589 } catch(err){ 5590 console.error('Sepete ekleme hatası:', err); 5591 } 5592 } 5593 } 5594 5595})(); 5596</script>
5596</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 5597 data-lux-product-shell="1" 5598 data-lux-page="1"><style> 5599@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 5600 5601/* ===== VEZZA LUX CARD ===== */ 5602.card-product{ 5603 font-family:'Poppins',sans-serif; 5604 background:#fff !important; 5605 position:relative; 5606} 5607.card-product-inner{ 5608 background:transparent !important; 5609 position:relative; 5610} 5611.card-product .c-p-i-link, 5612.card-product a{ 5613 background:transparent !important; 5614} 5615.card-product-inner > div{ 5616 background:transparent !important; 5617} 5618.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 5619 background:transparent !important; 5620} 5621.card-product .card-product-content, 5622.card-product .price-group, 5623.card-product .prices{ 5624 background:transparent !important; 5625} 5626[class*="skeleton"], 5627[class*="placeholder"], 5628[class*="loading"]{ 5629 background:transparent !important; 5630} 5631 5632/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 5633.image-wrapper{ 5634 position:relative; 5635 width:100%; 5636 aspect-ratio:1/1; 5637 overflow:hidden; 5638 background:#fff !important; 5639} 5640 5641.image{ 5642 position:relative; 5643 width:100%; 5644 height:100%; 5645} 5646 5647.image-wrapper img{ 5648 width:100% !important; 5649 height:100% !important; 5650 object-fit:cover !important; 5651 object-position:center center !important; 5652 display:block; 5653 transition:transform .35s ease; 5654} 5655 5656/* ===== DISCOUNT ===== */ 5657.discount{ 5658 position:absolute; 5659 top:12px; 5660 left:12px; 5661 width:28px; 5662 height:48px; 5663 background:#e10b0b; 5664 color:#fff; 5665 font-size:12px; 5666 font-weight:600; 5667 display:flex; 5668 align-items:center; 5669 justify-content:center; 5670 writing-mode:vertical-rl; 5671 transform:rotate(180deg); 5672 letter-spacing:.5px; 5673 z-index:7; 5674} 5675 5676/* ===== FAV ===== */ 5677.lux-fav{ 5678 position:absolute; 5679 top:12px; 5680 right:12px; 5681 z-index:7; 5682} 5683.lux-fav a, 5684.lux-fav button{ 5685 background:transparent !important; 5686 border:0 !important; 5687 padding:0 !important; 5688 cursor:pointer; 5689 display:inline-flex; 5690 align-items:center; 5691 justify-content:center; 5692} 5693 5694/* ===== SEPET IKON ===== */ 5695.lux-bag{ 5696 position:absolute; 5697 bottom:12px; 5698 right:12px; 5699 z-index:7; 5700 width:34px; 5701 height:34px; 5702 display:inline-flex; 5703 align-items:center; 5704 justify-content:center; 5705 background:rgba(255,255,255,.92); 5706 border:1px solid rgba(0,0,0,.10); 5707 border-radius:10px; 5708 cursor:pointer; 5709 transition:.2s ease; 5710} 5711.lux-bag:hover{ 5712 background:#fff; 5713 border-color:rgba(0,0,0,.25); 5714} 5715.lux-bag.is-loading{ 5716 opacity:.6; 5717 cursor:wait; 5718} 5719.lux-bag.is-success{ 5720 background:#2e7d32 !important; 5721 border-color:#2e7d32 !important; 5722 color:#fff !important; 5723} 5724.card-product.sizes-open .lux-bag{ 5725 opacity:0; 5726 pointer-events:none; 5727} 5728 5729/* Loading spinner */ 5730.lux-bag.is-loading i::before{ 5731 content:"â³"; 5732} 5733 5734/* ===== SIZE STRIP ===== */ 5735.size-strip{ 5736 width:100%; 5737 max-height:0; 5738 overflow:hidden; 5739 background:#fff; 5740 display:flex; 5741 flex-wrap:wrap; 5742 transition:max-height .3s ease, border-color .3s ease; 5743 border-top:1px solid transparent; 5744 border-bottom:1px solid transparent; 5745} 5746.size-strip.open{ 5747 max-height:200px; 5748 border-top-color:rgba(0,0,0,.08); 5749 border-bottom-color:rgba(0,0,0,.08); 5750} 5751.size-item{ 5752 flex:1 0 auto; 5753 min-width:38px; 5754 height:42px; 5755 display:flex; 5756 align-items:center; 5757 justify-content:center; 5758 font-size:13px; 5759 font-weight:500; 5760 color:#111 !important; 5761 cursor:pointer; 5762 user-select:none; 5763 background:transparent; 5764 transition:background .15s ease, color .15s ease; 5765 border-right:1px solid rgba(0,0,0,.08); 5766} 5767.size-item:last-child{ border-right:0; } 5768.size-item:hover:not(.disabled):not(.adding){ 5769 background:#000 !important; 5770 color:#fff !important; 5771} 5772.size-item.disabled{ 5773 color:#111 !important; 5774 text-decoration:line-through !important; 5775 opacity:.30 !important; 5776 cursor:not-allowed; 5777} 5778.size-item.adding{ 5779 background:#2e7d32 !important; 5780 color:#fff !important; 5781 cursor:wait; 5782} 5783 5784/* ===== META ===== */ 5785.lux-meta{ 5786 padding:12px 6px 6px; 5787 background:transparent !important; 5788} 5789.lux-brand{ 5790 font-size:16px; 5791 font-weight:600; 5792 color:#111; 5793 margin-bottom:2px; 5794} 5795.lux-title{ 5796 font-size:14px; 5797 font-weight:400; 5798 line-height:1.45; 5799 color:#111; 5800 margin:0; 5801} 5802.lux-price{ 5803 margin-top:10px; 5804 display:flex; 5805 gap:10px; 5806 align-items:baseline; 5807 background:transparent !important; 5808} 5809.lux-price .list-price{ 5810 font-size:14px; 5811 font-weight:400; 5812 color:#111; 5813 text-decoration:line-through; 5814} 5815.lux-price .sale-price{ 5816 font-size:16px; 5817 font-weight:600; 5818 color:#e10b0b; 5819} 5820 5821.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
5822.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 5823</style><div class="card-product" 5824 id="card-9810" 5825 data-lux-card-id="9810" 5826 data-lux-product-link="https://www.vezzalux.com/gg-808-arkasi-gold-erkek-ayakkabi" 5827 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/gg-808-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Gg 808 Arkası Gold Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc7ed5afe-62670560-sw800sh800.webp" alt="Gg 808 Arkası Gold Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc7ed5afe-62670560-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0bc803c6cd-20673716-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" 5828 onclick="userProductFavourite('add', 9810)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 5829 id="lux-bag-9810" 5830 onclick="return luxBagClick(event, 9810);" 5831 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="9810" style="display:none;"></div><div class="size-strip" id="size-strip-9810" data-loaded="0"></div><a href="https://www.vezzalux.com/gg-808-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Gg 808 Arkası Gold Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Golden Goose</div><div class="lux-title">Gg 808 Arkası Gold Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">10.499,00 TL</div></div></div></a></div></div>
5831<script> 5832(function(){ 5833 5834 /* Bir kez kur */ 5835 if(window.__luxCardInit) return; 5836 window.__luxCardInit = true; 5837 5838 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 5839 window.__luxVariantCache = window.__luxVariantCache || {}; 5840 5841 function closeAll(){ 5842 document.querySelectorAll('.size-strip.open').forEach(function(s){ 5843 s.classList.remove('open'); 5844 }); 5845 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 5846 c.classList.remove('sizes-open'); 5847 }); 5848 } 5849 5850 function flashSuccess(productId){ 5851 var bag = document.getElementById('lux-bag-' + productId); 5852 if(!bag) return; 5853 bag.classList.add('is-success'); 5854 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 5855 } 5856 5857 /* DıŠtıklama - kapat */ 5858 document.addEventListener('click', function(e){ 5859 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 5860 if(!inside) closeAll(); 5861 }); 5862 5863 document.addEventListener('keydown', function(e){ 5864 if(e.key === 'Escape') closeAll(); 5865 }); 5866 5867 5868 /* ============================================ 5869 MODAL KILLER - yedek güvence 5870 ============================================ */ 5871 var LUX_MODAL_KILL_ACTIVE = false; 5872 5873 function killVisibleModals(){ 5874 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 5875 modals.forEach(function(m){ 5876 var id = (m.id || '').toLowerCase(); 5877 var txt = (m.textContent || '').toLowerCase(); 5878 var isCartModal = id.indexOf('cart') > -1 5879 || id.indexOf('variant') > -1 5880 || id.indexOf('fast') > -1 5881 || id.indexOf('urun') > -1 5882 || txt.indexOf('lütfen seçin') > -1; 5883 5884 if(isCartModal){ 5885 if(typeof jQuery !== 'undefined'){ 5886 try { jQuery(m).modal('hide'); } catch(e){} 5887 } 5888 m.classList.remove('show','in'); 5889 m.style.display = 'none'; 5890 } 5891 }); 5892 5893 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 5894 document.body.classList.remove('modal-open'); 5895 document.body.style.overflow = ''; 5896 document.body.style.paddingRight = ''; 5897 } 5898 5899 function startModalKill(durationMs){ 5900 if(LUX_MODAL_KILL_ACTIVE) return; 5901 LUX_MODAL_KILL_ACTIVE = true; 5902 killVisibleModals(); 5903 var interval = setInterval(killVisibleModals, 50); 5904 setTimeout(function(){ 5905 clearInterval(interval); 5906 LUX_MODAL_KILL_ACTIVE = false; 5907 }, durationMs || 2000); 5908 } 5909 5910 5911 /* ============================================ 5912 AJAX: Varyantları detay sayfasından çek 5913 ============================================ 5914 Ãrün detay sayfasının tam HTML'ini indir, 5915 DOMParser ile parse et, varyantları bul 5916 ============================================ */ 5917 function fetchVariants(productId, productLink, callback){ 5918 5919 /* Cache'te varsa hemen döndür */ 5920 if(window.__luxVariantCache[productId]){ 5921 callback(window.__luxVariantCache[productId]); 5922 return; 5923 } 5924 5925 fetch(productLink, { 5926 method: 'GET', 5927 credentials: 'same-origin', 5928 headers: { 'Accept': 'text/html' } 5929 }) 5930 .then(function(r){ return r.text(); }) 5931 .then(function(html){ 5932 var parser = new DOMParser(); 5933 var doc = parser.parseFromString(html, 'text/html'); 5934 5935 /* Detay sayfasındaki .variant-box'ı bul */ 5936 var variantBox = doc.querySelector('.variant-box'); 5937 if(!variantBox){ 5938 callback({ variants: [], error: 'no_variant_box' }); 5939 return; 5940 } 5941 5942 /* Her varyant grubu için select'leri ve option'ları oku */ 5943 var variants = []; 5944 var variantLis = variantBox.querySelectorAll('.variant'); 5945 5946 variantLis.forEach(function(li, idx){ 5947 var nameEl = li.querySelector('.name'); 5948 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 5949 5950 var values = []; 5951 5952 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 5953 var optLinks = li.querySelectorAll('.options a'); 5954 5955 if(optLinks.length > 0){ 5956 optLinks.forEach(function(a){ 5957 /* Beden/renk deÄerini doÄru attribute'tan oku
5958 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 5959 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 5960 - textContent: fallback */ 5961 var deger = a.getAttribute('data-variant-value') 5962 || a.textContent.trim(); 5963 5964 /* Stok kontrolü - birden fazla yoldan kontrol et */ 5965 var isSoldOut = a.classList.contains('sold-out') 5966 || a.classList.contains('sold_out') 5967 || a.classList.contains('disabled') 5968 || a.classList.contains('stoksuz') 5969 || a.classList.contains('out-of-stock') 5970 || a.hasAttribute('disabled') 5971 || a.getAttribute('data-in-stock') === '0' 5972 || a.getAttribute('data-in-stock') === 'false' 5973 || a.getAttribute('data-stokta-var-mi') === '0' 5974 || a.getAttribute('data-stokta-var-mi') === 'false'; 5975 5976 values.push({ 5977 deger: deger, 5978 inStock: !isSoldOut 5979 }); 5980 }); 5981 } else { 5982 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 5983 var select = li.querySelector('select'); 5984 if(select){ 5985 var opts = select.querySelectorAll('option'); 5986 opts.forEach(function(o){ 5987 if(!o.value) return; 5988 values.push({ 5989 deger: o.value, 5990 inStock: !o.disabled 5991 }); 5992 }); 5993 } 5994 } 5995 5996 variants.push({ 5997 index: idx, 5998 baslik: name, 5999 values: values 6000 }); 6001 }); 6002 6003 var result = { variants: variants }; 6004 window.__luxVariantCache[productId] = result; 6005 callback(result); 6006 }) 6007 .catch(function(err){ 6008 console.error('Varyant çekme hatası:', err); 6009 callback({ variants: [], error: 'fetch_failed' }); 6010 }); 6011 } 6012 6013 6014 /* ============================================ 6015 Beden Åeridini ve gizli variant-box'ı oluÅtur 6016 ============================================ */ 6017 function buildVariantUI(productId, data){ 6018 var card = document.getElementById('card-' + productId); 6019 if(!card) return false; 6020 6021 var holder = card.querySelector('.lux-variant-box'); 6022 var strip = document.getElementById('size-strip-' + productId); 6023 if(!holder || !strip) return false; 6024 6025 if(!data.variants || data.variants.length === 0){ 6026 /* Varyant yok */ 6027 return false; 6028 } 6029 6030 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 6031 var displayVariant = null;
6032 data.variants.forEach(function(v){ 6033 if(!displayVariant && v.values.length > 1){ 6034 displayVariant = v; 6035 } 6036 }); 6037 6038 /* Gizli variant-box HTML */ 6039 var html = '<div class="variant-box"><ul>'; 6040 data.variants.forEach(function(v){ 6041 html += '<li class="variant">'; 6042 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 6043 6044 if(v.values.length > 1){ 6045 html += '<option value="">Lütfen seçin</option>'; 6046 } 6047 6048 v.values.forEach(function(val, i){ 6049 var selected = (v.values.length === 1) ? ' selected' : ''; 6050 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 6051 }); 6052 6053 html += '</select></li>'; 6054 }); 6055 html += '</ul></div>'; 6056 6057 holder.innerHTML = html; 6058 holder.style.display = ''; 6059 6060 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 6061 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 6062 if(displayVariant){ 6063 var stripHtml = ''; 6064 var inStockCount = 0; 6065 6066 /* DEBUG - console'da gör */ 6067 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 6068 6069 displayVariant.values.forEach(function(val){ 6070 /* SADECE stokta olanları ekle */ 6071 if(val.inStock === true){ 6072 stripHtml += '<div class="size-item" ' 6073 + 'data-urun-id="' + productId + '" ' 6074 + 'data-varyant-deger="' + val.deger + '" ' 6075 + 'onclick="return luxAddVariant(event, this);">' 6076 + val.deger + '</div>'; 6077 inStockCount++; 6078 } 6079 }); 6080 6081 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 6082 if(inStockCount === 0){ 6083 strip.setAttribute('data-loaded', '1'); 6084 strip.setAttribute('data-has-variants', '0'); 6085 return false; 6086 } 6087
6088 strip.innerHTML = stripHtml; 6089 strip.setAttribute('data-loaded', '1'); 6090 strip.setAttribute('data-has-variants', '1'); 6091 return true; 6092 } else { 6093 strip.setAttribute('data-loaded', '1'); 6094 strip.setAttribute('data-has-variants', '0'); 6095 return false; 6096 } 6097 } 6098 6099 6100 /* ============================================ 6101 SEPET IKONU TIKLAMASI 6102 ============================================ */ 6103 window.luxBagClick = function(ev, productId){ 6104 ev.preventDefault(); 6105 ev.stopPropagation(); 6106 6107 var card = document.getElementById('card-' + productId); 6108 var strip = document.getElementById('size-strip-' + productId); 6109 var bag = document.getElementById('lux-bag-' + productId); 6110 if(!card || !strip) return false; 6111 6112 /* Strip zaten yüklenmiÅse direkt davran */ 6113 if(strip.getAttribute('data-loaded') === '1'){ 6114 if(strip.getAttribute('data-has-variants') === '1'){ 6115 toggleStrip(productId); 6116 } else { 6117 addToCartSmart(productId); 6118 } 6119 return false; 6120 } 6121 6122 /* İlk tıklama - AJAX ile varyantları çek */ 6123 bag.classList.add('is-loading'); 6124 var productLink = card.getAttribute('data-lux-product-link'); 6125 6126 fetchVariants(productId, productLink, function(data){ 6127 bag.classList.remove('is-loading'); 6128 6129 var hasVariants = buildVariantUI(productId, data); 6130 6131 if(hasVariants){ 6132 /* Bedenler var - Åeridi aç */ 6133 toggleStrip(productId); 6134 } else { 6135 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 6136 addToCartSmart(productId); 6137 } 6138 }); 6139 6140 return false; 6141 }; 6142 6143 function toggleStrip(productId){ 6144 var strip = document.getElementById('size-strip-' + productId); 6145 var card = document.getElementById('card-' + productId); 6146 if(!strip) return; 6147 6148 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6149 if(s !== strip) s.classList.remove('open'); 6150 }); 6151 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6152 if(c !== card) c.classList.remove('sizes-open'); 6153 }); 6154 6155 strip.classList.toggle('open'); 6156 if(card) card.classList.toggle('sizes-open'); 6157 } 6158 6159 6160 /* ============================================ 6161 BEDEN TIKLAMASI 6162 ============================================ */ 6163 window.luxAddVariant = function(ev, elem){ 6164 ev.preventDefault(); 6165 ev.stopPropagation(); 6166 6167 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 6168 6169 var productId = elem.getAttribute('data-urun-id'); 6170 var varyantDeger = elem.getAttribute('data-varyant-deger'); 6171 6172 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6173 if(!holder) return false; 6174 6175 /* Seçilen bedeni ilk select'e yaz */ 6176 var firstSelect = holder.querySelector('select[data-variant="0"]'); 6177 if(firstSelect){ 6178 firstSelect.value = varyantDeger; 6179 if(typeof jQuery !== "undefined"){ 6180 jQuery(firstSelect).val(varyantDeger).trigger('change'); 6181 } 6182 } 6183 6184 /* DiÄer select'lere ilk geçerli deÄeri koy */ 6185 var allSelects = holder.querySelectorAll('select[data-variant]'); 6186 allSelects.forEach(function(sel, idx){ 6187 if(idx === 0) return; 6188 if(sel.value) return; 6189 var options = sel.querySelectorAll('option'); 6190 for(var i = 0; i < options.length; i++){ 6191 if(options[i].value){ 6192 sel.value = options[i].value; 6193 if(typeof jQuery !== "undefined"){ 6194 jQuery(sel).val(options[i].value).trigger('change'); 6195 } 6196 break; 6197 } 6198 } 6199 }); 6200 6201 /* Görsel feedback */ 6202 elem.classList.add('adding'); 6203 var originalText = elem.textContent; 6204 elem.textContent = 'â'; 6205 6206 /* Sepete ekle */ 6207 addToCartSmart(productId, { 6208 checkVariant: true, 6209 variantCount: allSelects.length, 6210 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 6211 }); 6212 6213 setTimeout(function(){ 6214 elem.textContent = originalText; 6215 elem.classList.remove('adding'); 6216 closeAll(); 6217 }, 800); 6218 6219 return false; 6220 }; 6221 6222 6223 /* ============================================ 6224 SEPETE EKLE - Modal killer ile 6225 ============================================ */ 6226 function addToCartSmart(productId, extraOptions){ 6227 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6228 6229 var options = { 6230 quantity: 1, 6231 hideNativeModal: 'lux-card-' + productId 6232 }; 6233 6234 if(extraOptions){
6235 Object.keys(extraOptions).forEach(function(k){ 6236 options[k] = extraOptions[k]; 6237 }); 6238 } else if(holder){ 6239 var selects = holder.querySelectorAll('select[data-variant]'); 6240 if(selects.length > 0){ 6241 options.checkVariant = true; 6242 options.variantCount = selects.length; 6243 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 6244 } 6245 } 6246 6247 startModalKill(2000); 6248 6249 if(typeof addCart === "function"){ 6250 try { 6251 addCart(productId, 'card', options); 6252 flashSuccess(productId); 6253 } catch(err){ 6254 console.error('Sepete ekleme hatası:', err); 6255 } 6256 } 6257 } 6258 6259})(); 6260</script>
6260</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 6261 data-lux-product-shell="1" 6262 data-lux-page="1"><style> 6263@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 6264 6265/* ===== VEZZA LUX CARD ===== */ 6266.card-product{ 6267 font-family:'Poppins',sans-serif; 6268 background:#fff !important; 6269 position:relative; 6270} 6271.card-product-inner{ 6272 background:transparent !important; 6273 position:relative; 6274} 6275.card-product .c-p-i-link, 6276.card-product a{ 6277 background:transparent !important; 6278} 6279.card-product-inner > div{ 6280 background:transparent !important; 6281} 6282.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 6283 background:transparent !important; 6284} 6285.card-product .card-product-content, 6286.card-product .price-group, 6287.card-product .prices{ 6288 background:transparent !important; 6289} 6290[class*="skeleton"], 6291[class*="placeholder"], 6292[class*="loading"]{ 6293 background:transparent !important; 6294} 6295 6296/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 6297.image-wrapper{ 6298 position:relative; 6299 width:100%; 6300 aspect-ratio:1/1; 6301 overflow:hidden; 6302 background:#fff !important; 6303} 6304 6305.image{ 6306 position:relative; 6307 width:100%; 6308 height:100%; 6309} 6310 6311.image-wrapper img{ 6312 width:100% !important; 6313 height:100% !important; 6314 object-fit:cover !important; 6315 object-position:center center !important; 6316 display:block; 6317 transition:transform .35s ease; 6318} 6319 6320/* ===== DISCOUNT ===== */ 6321.discount{ 6322 position:absolute; 6323 top:12px; 6324 left:12px; 6325 width:28px; 6326 height:48px; 6327 background:#e10b0b; 6328 color:#fff; 6329 font-size:12px; 6330 font-weight:600; 6331 display:flex; 6332 align-items:center; 6333 justify-content:center; 6334 writing-mode:vertical-rl; 6335 transform:rotate(180deg); 6336 letter-spacing:.5px; 6337 z-index:7; 6338} 6339 6340/* ===== FAV ===== */ 6341.lux-fav{ 6342 position:absolute; 6343 top:12px; 6344 right:12px; 6345 z-index:7; 6346} 6347.lux-fav a, 6348.lux-fav button{ 6349 background:transparent !important; 6350 border:0 !important; 6351 padding:0 !important; 6352 cursor:pointer; 6353 display:inline-flex; 6354 align-items:center; 6355 justify-content:center; 6356} 6357 6358/* ===== SEPET IKON ===== */ 6359.lux-bag{ 6360 position:absolute; 6361 bottom:12px; 6362 right:12px; 6363 z-index:7; 6364 width:34px; 6365 height:34px; 6366 display:inline-flex; 6367 align-items:center; 6368 justify-content:center; 6369 background:rgba(255,255,255,.92); 6370 border:1px solid rgba(0,0,0,.10); 6371 border-radius:10px; 6372 cursor:pointer; 6373 transition:.2s ease; 6374} 6375.lux-bag:hover{ 6376 background:#fff; 6377 border-color:rgba(0,0,0,.25); 6378} 6379.lux-bag.is-loading{ 6380 opacity:.6; 6381 cursor:wait; 6382} 6383.lux-bag.is-success{ 6384 background:#2e7d32 !important; 6385 border-color:#2e7d32 !important; 6386 color:#fff !important; 6387} 6388.card-product.sizes-open .lux-bag{ 6389 opacity:0; 6390 pointer-events:none; 6391} 6392 6393/* Loading spinner */ 6394.lux-bag.is-loading i::before{ 6395 content:"â³"; 6396} 6397 6398/* ===== SIZE STRIP ===== */ 6399.size-strip{ 6400 width:100%; 6401 max-height:0; 6402 overflow:hidden; 6403 background:#fff; 6404 display:flex; 6405 flex-wrap:wrap; 6406 transition:max-height .3s ease, border-color .3s ease; 6407 border-top:1px solid transparent; 6408 border-bottom:1px solid transparent; 6409} 6410.size-strip.open{ 6411 max-height:200px; 6412 border-top-color:rgba(0,0,0,.08); 6413 border-bottom-color:rgba(0,0,0,.08); 6414} 6415.size-item{ 6416 flex:1 0 auto; 6417 min-width:38px; 6418 height:42px; 6419 display:flex; 6420 align-items:center; 6421 justify-content:center; 6422 font-size:13px; 6423 font-weight:500; 6424 color:#111 !important; 6425 cursor:pointer; 6426 user-select:none; 6427 background:transparent; 6428 transition:background .15s ease, color .15s ease; 6429 border-right:1px solid rgba(0,0,0,.08); 6430} 6431.size-item:last-child{ border-right:0; } 6432.size-item:hover:not(.disabled):not(.adding){ 6433 background:#000 !important; 6434 color:#fff !important; 6435} 6436.size-item.disabled{ 6437 color:#111 !important; 6438 text-decoration:line-through !important; 6439 opacity:.30 !important; 6440 cursor:not-allowed; 6441} 6442.size-item.adding{ 6443 background:#2e7d32 !important; 6444 color:#fff !important; 6445 cursor:wait; 6446} 6447 6448/* ===== META ===== */ 6449.lux-meta{ 6450 padding:12px 6px 6px; 6451 background:transparent !important; 6452} 6453.lux-brand{ 6454 font-size:16px; 6455 font-weight:600; 6456 color:#111; 6457 margin-bottom:2px; 6458} 6459.lux-title{ 6460 font-size:14px; 6461 font-weight:400; 6462 line-height:1.45; 6463 color:#111; 6464 margin:0; 6465} 6466.lux-price{ 6467 margin-top:10px; 6468 display:flex; 6469 gap:10px; 6470 align-items:baseline; 6471 background:transparent !important; 6472} 6473.lux-price .list-price{ 6474 font-size:14px; 6475 font-weight:400; 6476 color:#111; 6477 text-decoration:line-through; 6478} 6479.lux-price .sale-price{ 6480 font-size:16px; 6481 font-weight:600; 6482 color:#e10b0b; 6483} 6484 6485.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
6486.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 6487</style><div class="card-product" 6488 id="card-10319" 6489 data-lux-card-id="10319" 6490 data-lux-product-link="https://www.vezzalux.com/fendi-997-full-siyah-suet-tabani-gri-erkek-ayakkabi" 6491 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/fendi-997-full-siyah-suet-tabani-gri-erkek-ayakkabi" class="c-p-i-link" title="Fendi 997 Full Siyah Suet Tabanı Gri Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cad7a2224-9388190-sw1200sh1200.webp" alt="Fendi 997 Full Siyah Suet Tabanı Gri Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cad7a2224-9388190-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cad908db9-52984097-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" 6492 onclick="userProductFavourite('add', 10319)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 6493 id="lux-bag-10319" 6494 onclick="return luxBagClick(event, 10319);" 6495 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10319" style="display:none;"></div><div class="size-strip" id="size-strip-10319" data-loaded="0"></div><a href="https://www.vezzalux.com/fendi-997-full-siyah-suet-tabani-gri-erkek-ayakkabi" class="c-p-i-link" title="Fendi 997 Full Siyah Suet Tabanı Gri Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Fendi</div><div class="lux-title">Fendi 997 Full Siyah Suet Tabanı Gri Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
6495<script> 6496(function(){ 6497 6498 /* Bir kez kur */ 6499 if(window.__luxCardInit) return; 6500 window.__luxCardInit = true; 6501 6502 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 6503 window.__luxVariantCache = window.__luxVariantCache || {}; 6504 6505 function closeAll(){ 6506 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6507 s.classList.remove('open'); 6508 }); 6509 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6510 c.classList.remove('sizes-open'); 6511 }); 6512 } 6513 6514 function flashSuccess(productId){ 6515 var bag = document.getElementById('lux-bag-' + productId); 6516 if(!bag) return; 6517 bag.classList.add('is-success'); 6518 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 6519 } 6520 6521 /* DıŠtıklama - kapat */ 6522 document.addEventListener('click', function(e){ 6523 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 6524 if(!inside) closeAll(); 6525 }); 6526 6527 document.addEventListener('keydown', function(e){ 6528 if(e.key === 'Escape') closeAll(); 6529 }); 6530 6531 6532 /* ============================================ 6533 MODAL KILLER - yedek güvence 6534 ============================================ */ 6535 var LUX_MODAL_KILL_ACTIVE = false; 6536 6537 function killVisibleModals(){ 6538 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 6539 modals.forEach(function(m){ 6540 var id = (m.id || '').toLowerCase(); 6541 var txt = (m.textContent || '').toLowerCase(); 6542 var isCartModal = id.indexOf('cart') > -1 6543 || id.indexOf('variant') > -1 6544 || id.indexOf('fast') > -1 6545 || id.indexOf('urun') > -1 6546 || txt.indexOf('lütfen seçin') > -1; 6547 6548 if(isCartModal){ 6549 if(typeof jQuery !== 'undefined'){ 6550 try { jQuery(m).modal('hide'); } catch(e){} 6551 } 6552 m.classList.remove('show','in'); 6553 m.style.display = 'none'; 6554 } 6555 }); 6556 6557 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 6558 document.body.classList.remove('modal-open'); 6559 document.body.style.overflow = ''; 6560 document.body.style.paddingRight = ''; 6561 } 6562 6563 function startModalKill(durationMs){ 6564 if(LUX_MODAL_KILL_ACTIVE) return; 6565 LUX_MODAL_KILL_ACTIVE = true; 6566 killVisibleModals(); 6567 var interval = setInterval(killVisibleModals, 50); 6568 setTimeout(function(){ 6569 clearInterval(interval); 6570 LUX_MODAL_KILL_ACTIVE = false; 6571 }, durationMs || 2000); 6572 } 6573 6574 6575 /* ============================================ 6576 AJAX: Varyantları detay sayfasından çek 6577 ============================================ 6578 Ãrün detay sayfasının tam HTML'ini indir, 6579 DOMParser ile parse et, varyantları bul 6580 ============================================ */ 6581 function fetchVariants(productId, productLink, callback){ 6582 6583 /* Cache'te varsa hemen döndür */ 6584 if(window.__luxVariantCache[productId]){ 6585 callback(window.__luxVariantCache[productId]); 6586 return; 6587 } 6588 6589 fetch(productLink, { 6590 method: 'GET', 6591 credentials: 'same-origin', 6592 headers: { 'Accept': 'text/html' } 6593 }) 6594 .then(function(r){ return r.text(); }) 6595 .then(function(html){ 6596 var parser = new DOMParser(); 6597 var doc = parser.parseFromString(html, 'text/html'); 6598 6599 /* Detay sayfasındaki .variant-box'ı bul */ 6600 var variantBox = doc.querySelector('.variant-box'); 6601 if(!variantBox){ 6602 callback({ variants: [], error: 'no_variant_box' }); 6603 return; 6604 } 6605 6606 /* Her varyant grubu için select'leri ve option'ları oku */ 6607 var variants = []; 6608 var variantLis = variantBox.querySelectorAll('.variant'); 6609 6610 variantLis.forEach(function(li, idx){ 6611 var nameEl = li.querySelector('.name'); 6612 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 6613 6614 var values = []; 6615 6616 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 6617 var optLinks = li.querySelectorAll('.options a'); 6618 6619 if(optLinks.length > 0){ 6620 optLinks.forEach(function(a){ 6621 /* Beden/renk deÄerini doÄru attribute'tan oku
6622 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 6623 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 6624 - textContent: fallback */ 6625 var deger = a.getAttribute('data-variant-value') 6626 || a.textContent.trim(); 6627 6628 /* Stok kontrolü - birden fazla yoldan kontrol et */ 6629 var isSoldOut = a.classList.contains('sold-out') 6630 || a.classList.contains('sold_out') 6631 || a.classList.contains('disabled') 6632 || a.classList.contains('stoksuz') 6633 || a.classList.contains('out-of-stock') 6634 || a.hasAttribute('disabled') 6635 || a.getAttribute('data-in-stock') === '0' 6636 || a.getAttribute('data-in-stock') === 'false' 6637 || a.getAttribute('data-stokta-var-mi') === '0' 6638 || a.getAttribute('data-stokta-var-mi') === 'false'; 6639 6640 values.push({ 6641 deger: deger, 6642 inStock: !isSoldOut 6643 }); 6644 }); 6645 } else { 6646 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 6647 var select = li.querySelector('select'); 6648 if(select){ 6649 var opts = select.querySelectorAll('option'); 6650 opts.forEach(function(o){ 6651 if(!o.value) return; 6652 values.push({ 6653 deger: o.value, 6654 inStock: !o.disabled 6655 }); 6656 }); 6657 } 6658 } 6659 6660 variants.push({ 6661 index: idx, 6662 baslik: name, 6663 values: values 6664 }); 6665 }); 6666 6667 var result = { variants: variants }; 6668 window.__luxVariantCache[productId] = result; 6669 callback(result); 6670 }) 6671 .catch(function(err){ 6672 console.error('Varyant çekme hatası:', err); 6673 callback({ variants: [], error: 'fetch_failed' }); 6674 }); 6675 } 6676 6677 6678 /* ============================================ 6679 Beden Åeridini ve gizli variant-box'ı oluÅtur 6680 ============================================ */ 6681 function buildVariantUI(productId, data){ 6682 var card = document.getElementById('card-' + productId); 6683 if(!card) return false; 6684 6685 var holder = card.querySelector('.lux-variant-box'); 6686 var strip = document.getElementById('size-strip-' + productId); 6687 if(!holder || !strip) return false; 6688 6689 if(!data.variants || data.variants.length === 0){ 6690 /* Varyant yok */ 6691 return false; 6692 } 6693 6694 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 6695 var displayVariant = null;
6696 data.variants.forEach(function(v){ 6697 if(!displayVariant && v.values.length > 1){ 6698 displayVariant = v; 6699 } 6700 }); 6701 6702 /* Gizli variant-box HTML */ 6703 var html = '<div class="variant-box"><ul>'; 6704 data.variants.forEach(function(v){ 6705 html += '<li class="variant">'; 6706 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 6707 6708 if(v.values.length > 1){ 6709 html += '<option value="">Lütfen seçin</option>'; 6710 } 6711 6712 v.values.forEach(function(val, i){ 6713 var selected = (v.values.length === 1) ? ' selected' : ''; 6714 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 6715 }); 6716 6717 html += '</select></li>'; 6718 }); 6719 html += '</ul></div>'; 6720 6721 holder.innerHTML = html; 6722 holder.style.display = ''; 6723 6724 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 6725 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 6726 if(displayVariant){ 6727 var stripHtml = ''; 6728 var inStockCount = 0; 6729 6730 /* DEBUG - console'da gör */ 6731 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 6732 6733 displayVariant.values.forEach(function(val){ 6734 /* SADECE stokta olanları ekle */ 6735 if(val.inStock === true){ 6736 stripHtml += '<div class="size-item" ' 6737 + 'data-urun-id="' + productId + '" ' 6738 + 'data-varyant-deger="' + val.deger + '" ' 6739 + 'onclick="return luxAddVariant(event, this);">' 6740 + val.deger + '</div>'; 6741 inStockCount++; 6742 } 6743 }); 6744 6745 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 6746 if(inStockCount === 0){ 6747 strip.setAttribute('data-loaded', '1'); 6748 strip.setAttribute('data-has-variants', '0'); 6749 return false; 6750 } 6751
6752 strip.innerHTML = stripHtml; 6753 strip.setAttribute('data-loaded', '1'); 6754 strip.setAttribute('data-has-variants', '1'); 6755 return true; 6756 } else { 6757 strip.setAttribute('data-loaded', '1'); 6758 strip.setAttribute('data-has-variants', '0'); 6759 return false; 6760 } 6761 } 6762 6763 6764 /* ============================================ 6765 SEPET IKONU TIKLAMASI 6766 ============================================ */ 6767 window.luxBagClick = function(ev, productId){ 6768 ev.preventDefault(); 6769 ev.stopPropagation(); 6770 6771 var card = document.getElementById('card-' + productId); 6772 var strip = document.getElementById('size-strip-' + productId); 6773 var bag = document.getElementById('lux-bag-' + productId); 6774 if(!card || !strip) return false; 6775 6776 /* Strip zaten yüklenmiÅse direkt davran */ 6777 if(strip.getAttribute('data-loaded') === '1'){ 6778 if(strip.getAttribute('data-has-variants') === '1'){ 6779 toggleStrip(productId); 6780 } else { 6781 addToCartSmart(productId); 6782 } 6783 return false; 6784 } 6785 6786 /* İlk tıklama - AJAX ile varyantları çek */ 6787 bag.classList.add('is-loading'); 6788 var productLink = card.getAttribute('data-lux-product-link'); 6789 6790 fetchVariants(productId, productLink, function(data){ 6791 bag.classList.remove('is-loading'); 6792 6793 var hasVariants = buildVariantUI(productId, data); 6794 6795 if(hasVariants){ 6796 /* Bedenler var - Åeridi aç */ 6797 toggleStrip(productId); 6798 } else { 6799 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 6800 addToCartSmart(productId); 6801 } 6802 }); 6803 6804 return false; 6805 }; 6806 6807 function toggleStrip(productId){ 6808 var strip = document.getElementById('size-strip-' + productId); 6809 var card = document.getElementById('card-' + productId); 6810 if(!strip) return; 6811 6812 document.querySelectorAll('.size-strip.open').forEach(function(s){ 6813 if(s !== strip) s.classList.remove('open'); 6814 }); 6815 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 6816 if(c !== card) c.classList.remove('sizes-open'); 6817 }); 6818 6819 strip.classList.toggle('open'); 6820 if(card) card.classList.toggle('sizes-open'); 6821 } 6822 6823 6824 /* ============================================ 6825 BEDEN TIKLAMASI 6826 ============================================ */ 6827 window.luxAddVariant = function(ev, elem){ 6828 ev.preventDefault(); 6829 ev.stopPropagation(); 6830 6831 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 6832 6833 var productId = elem.getAttribute('data-urun-id'); 6834 var varyantDeger = elem.getAttribute('data-varyant-deger'); 6835 6836 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6837 if(!holder) return false; 6838 6839 /* Seçilen bedeni ilk select'e yaz */ 6840 var firstSelect = holder.querySelector('select[data-variant="0"]'); 6841 if(firstSelect){ 6842 firstSelect.value = varyantDeger; 6843 if(typeof jQuery !== "undefined"){ 6844 jQuery(firstSelect).val(varyantDeger).trigger('change'); 6845 } 6846 } 6847 6848 /* DiÄer select'lere ilk geçerli deÄeri koy */ 6849 var allSelects = holder.querySelectorAll('select[data-variant]'); 6850 allSelects.forEach(function(sel, idx){ 6851 if(idx === 0) return; 6852 if(sel.value) return; 6853 var options = sel.querySelectorAll('option'); 6854 for(var i = 0; i < options.length; i++){ 6855 if(options[i].value){ 6856 sel.value = options[i].value; 6857 if(typeof jQuery !== "undefined"){ 6858 jQuery(sel).val(options[i].value).trigger('change'); 6859 } 6860 break; 6861 } 6862 } 6863 }); 6864 6865 /* Görsel feedback */ 6866 elem.classList.add('adding'); 6867 var originalText = elem.textContent; 6868 elem.textContent = 'â'; 6869 6870 /* Sepete ekle */ 6871 addToCartSmart(productId, { 6872 checkVariant: true, 6873 variantCount: allSelects.length, 6874 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 6875 }); 6876 6877 setTimeout(function(){ 6878 elem.textContent = originalText; 6879 elem.classList.remove('adding'); 6880 closeAll(); 6881 }, 800); 6882 6883 return false; 6884 }; 6885 6886 6887 /* ============================================ 6888 SEPETE EKLE - Modal killer ile 6889 ============================================ */ 6890 function addToCartSmart(productId, extraOptions){ 6891 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 6892 6893 var options = { 6894 quantity: 1, 6895 hideNativeModal: 'lux-card-' + productId 6896 }; 6897 6898 if(extraOptions){
6899 Object.keys(extraOptions).forEach(function(k){ 6900 options[k] = extraOptions[k]; 6901 }); 6902 } else if(holder){ 6903 var selects = holder.querySelectorAll('select[data-variant]'); 6904 if(selects.length > 0){ 6905 options.checkVariant = true; 6906 options.variantCount = selects.length; 6907 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 6908 } 6909 } 6910 6911 startModalKill(2000); 6912 6913 if(typeof addCart === "function"){ 6914 try { 6915 addCart(productId, 'card', options); 6916 flashSuccess(productId); 6917 } catch(err){ 6918 console.error('Sepete ekleme hatası:', err); 6919 } 6920 } 6921 } 6922 6923})(); 6924</script>
6924</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 6925 data-lux-product-shell="1" 6926 data-lux-page="1"><style> 6927@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 6928 6929/* ===== VEZZA LUX CARD ===== */ 6930.card-product{ 6931 font-family:'Poppins',sans-serif; 6932 background:#fff !important; 6933 position:relative; 6934} 6935.card-product-inner{ 6936 background:transparent !important; 6937 position:relative; 6938} 6939.card-product .c-p-i-link, 6940.card-product a{ 6941 background:transparent !important; 6942} 6943.card-product-inner > div{ 6944 background:transparent !important; 6945} 6946.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 6947 background:transparent !important; 6948} 6949.card-product .card-product-content, 6950.card-product .price-group, 6951.card-product .prices{ 6952 background:transparent !important; 6953} 6954[class*="skeleton"], 6955[class*="placeholder"], 6956[class*="loading"]{ 6957 background:transparent !important; 6958} 6959 6960/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 6961.image-wrapper{ 6962 position:relative; 6963 width:100%; 6964 aspect-ratio:1/1; 6965 overflow:hidden; 6966 background:#fff !important; 6967} 6968 6969.image{ 6970 position:relative; 6971 width:100%; 6972 height:100%; 6973} 6974 6975.image-wrapper img{ 6976 width:100% !important; 6977 height:100% !important; 6978 object-fit:cover !important; 6979 object-position:center center !important; 6980 display:block; 6981 transition:transform .35s ease; 6982} 6983 6984/* ===== DISCOUNT ===== */ 6985.discount{ 6986 position:absolute; 6987 top:12px; 6988 left:12px; 6989 width:28px; 6990 height:48px; 6991 background:#e10b0b; 6992 color:#fff; 6993 font-size:12px; 6994 font-weight:600; 6995 display:flex; 6996 align-items:center; 6997 justify-content:center; 6998 writing-mode:vertical-rl; 6999 transform:rotate(180deg); 7000 letter-spacing:.5px; 7001 z-index:7; 7002} 7003 7004/* ===== FAV ===== */ 7005.lux-fav{ 7006 position:absolute; 7007 top:12px; 7008 right:12px; 7009 z-index:7; 7010} 7011.lux-fav a, 7012.lux-fav button{ 7013 background:transparent !important; 7014 border:0 !important; 7015 padding:0 !important; 7016 cursor:pointer; 7017 display:inline-flex; 7018 align-items:center; 7019 justify-content:center; 7020} 7021 7022/* ===== SEPET IKON ===== */ 7023.lux-bag{ 7024 position:absolute; 7025 bottom:12px; 7026 right:12px; 7027 z-index:7; 7028 width:34px; 7029 height:34px; 7030 display:inline-flex; 7031 align-items:center; 7032 justify-content:center; 7033 background:rgba(255,255,255,.92); 7034 border:1px solid rgba(0,0,0,.10); 7035 border-radius:10px; 7036 cursor:pointer; 7037 transition:.2s ease; 7038} 7039.lux-bag:hover{ 7040 background:#fff; 7041 border-color:rgba(0,0,0,.25); 7042} 7043.lux-bag.is-loading{ 7044 opacity:.6; 7045 cursor:wait; 7046} 7047.lux-bag.is-success{ 7048 background:#2e7d32 !important; 7049 border-color:#2e7d32 !important; 7050 color:#fff !important; 7051} 7052.card-product.sizes-open .lux-bag{ 7053 opacity:0; 7054 pointer-events:none; 7055} 7056 7057/* Loading spinner */ 7058.lux-bag.is-loading i::before{ 7059 content:"â³"; 7060} 7061 7062/* ===== SIZE STRIP ===== */ 7063.size-strip{ 7064 width:100%; 7065 max-height:0; 7066 overflow:hidden; 7067 background:#fff; 7068 display:flex; 7069 flex-wrap:wrap; 7070 transition:max-height .3s ease, border-color .3s ease; 7071 border-top:1px solid transparent; 7072 border-bottom:1px solid transparent; 7073} 7074.size-strip.open{ 7075 max-height:200px; 7076 border-top-color:rgba(0,0,0,.08); 7077 border-bottom-color:rgba(0,0,0,.08); 7078} 7079.size-item{ 7080 flex:1 0 auto; 7081 min-width:38px; 7082 height:42px; 7083 display:flex; 7084 align-items:center; 7085 justify-content:center; 7086 font-size:13px; 7087 font-weight:500; 7088 color:#111 !important; 7089 cursor:pointer; 7090 user-select:none; 7091 background:transparent; 7092 transition:background .15s ease, color .15s ease; 7093 border-right:1px solid rgba(0,0,0,.08); 7094} 7095.size-item:last-child{ border-right:0; } 7096.size-item:hover:not(.disabled):not(.adding){ 7097 background:#000 !important; 7098 color:#fff !important; 7099} 7100.size-item.disabled{ 7101 color:#111 !important; 7102 text-decoration:line-through !important; 7103 opacity:.30 !important; 7104 cursor:not-allowed; 7105} 7106.size-item.adding{ 7107 background:#2e7d32 !important; 7108 color:#fff !important; 7109 cursor:wait; 7110} 7111 7112/* ===== META ===== */ 7113.lux-meta{ 7114 padding:12px 6px 6px; 7115 background:transparent !important; 7116} 7117.lux-brand{ 7118 font-size:16px; 7119 font-weight:600; 7120 color:#111; 7121 margin-bottom:2px; 7122} 7123.lux-title{ 7124 font-size:14px; 7125 font-weight:400; 7126 line-height:1.45; 7127 color:#111; 7128 margin:0; 7129} 7130.lux-price{ 7131 margin-top:10px; 7132 display:flex; 7133 gap:10px; 7134 align-items:baseline; 7135 background:transparent !important; 7136} 7137.lux-price .list-price{ 7138 font-size:14px; 7139 font-weight:400; 7140 color:#111; 7141 text-decoration:line-through; 7142} 7143.lux-price .sale-price{ 7144 font-size:16px; 7145 font-weight:600; 7146 color:#e10b0b; 7147} 7148 7149.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
7150.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 7151</style><div class="card-product" 7152 id="card-10214" 7153 data-lux-card-id="10214" 7154 data-lux-product-link="https://www.vezzalux.com/lv-871-siyah-erkek-ayakkabi" 7155 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/lv-871-siyah-erkek-ayakkabi" class="c-p-i-link" title="Lv 871 Siyah Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c83a80db5-20205145-sw1200sh1200.webp" alt="Lv 871 Siyah Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c83a80db5-20205145-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c83c7237d-17031374-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" 7156 onclick="userProductFavourite('add', 10214)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 7157 id="lux-bag-10214" 7158 onclick="return luxBagClick(event, 10214);" 7159 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10214" style="display:none;"></div><div class="size-strip" id="size-strip-10214" data-loaded="0"></div><a href="https://www.vezzalux.com/lv-871-siyah-erkek-ayakkabi" class="c-p-i-link" title="Lv 871 Siyah Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Louis Vuitton</div><div class="lux-title">Lv 871 Siyah Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
7159<script> 7160(function(){ 7161 7162 /* Bir kez kur */ 7163 if(window.__luxCardInit) return; 7164 window.__luxCardInit = true; 7165 7166 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 7167 window.__luxVariantCache = window.__luxVariantCache || {}; 7168 7169 function closeAll(){ 7170 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7171 s.classList.remove('open'); 7172 }); 7173 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7174 c.classList.remove('sizes-open'); 7175 }); 7176 } 7177 7178 function flashSuccess(productId){ 7179 var bag = document.getElementById('lux-bag-' + productId); 7180 if(!bag) return; 7181 bag.classList.add('is-success'); 7182 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 7183 } 7184 7185 /* DıŠtıklama - kapat */ 7186 document.addEventListener('click', function(e){ 7187 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 7188 if(!inside) closeAll(); 7189 }); 7190 7191 document.addEventListener('keydown', function(e){ 7192 if(e.key === 'Escape') closeAll(); 7193 }); 7194 7195 7196 /* ============================================ 7197 MODAL KILLER - yedek güvence 7198 ============================================ */ 7199 var LUX_MODAL_KILL_ACTIVE = false; 7200 7201 function killVisibleModals(){ 7202 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 7203 modals.forEach(function(m){ 7204 var id = (m.id || '').toLowerCase(); 7205 var txt = (m.textContent || '').toLowerCase(); 7206 var isCartModal = id.indexOf('cart') > -1 7207 || id.indexOf('variant') > -1 7208 || id.indexOf('fast') > -1 7209 || id.indexOf('urun') > -1 7210 || txt.indexOf('lütfen seçin') > -1; 7211 7212 if(isCartModal){ 7213 if(typeof jQuery !== 'undefined'){ 7214 try { jQuery(m).modal('hide'); } catch(e){} 7215 } 7216 m.classList.remove('show','in'); 7217 m.style.display = 'none'; 7218 } 7219 }); 7220 7221 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 7222 document.body.classList.remove('modal-open'); 7223 document.body.style.overflow = ''; 7224 document.body.style.paddingRight = ''; 7225 } 7226 7227 function startModalKill(durationMs){ 7228 if(LUX_MODAL_KILL_ACTIVE) return; 7229 LUX_MODAL_KILL_ACTIVE = true; 7230 killVisibleModals(); 7231 var interval = setInterval(killVisibleModals, 50); 7232 setTimeout(function(){ 7233 clearInterval(interval); 7234 LUX_MODAL_KILL_ACTIVE = false; 7235 }, durationMs || 2000); 7236 } 7237 7238 7239 /* ============================================ 7240 AJAX: Varyantları detay sayfasından çek 7241 ============================================ 7242 Ãrün detay sayfasının tam HTML'ini indir, 7243 DOMParser ile parse et, varyantları bul 7244 ============================================ */ 7245 function fetchVariants(productId, productLink, callback){ 7246 7247 /* Cache'te varsa hemen döndür */ 7248 if(window.__luxVariantCache[productId]){ 7249 callback(window.__luxVariantCache[productId]); 7250 return; 7251 } 7252 7253 fetch(productLink, { 7254 method: 'GET', 7255 credentials: 'same-origin', 7256 headers: { 'Accept': 'text/html' } 7257 }) 7258 .then(function(r){ return r.text(); }) 7259 .then(function(html){ 7260 var parser = new DOMParser(); 7261 var doc = parser.parseFromString(html, 'text/html'); 7262 7263 /* Detay sayfasındaki .variant-box'ı bul */ 7264 var variantBox = doc.querySelector('.variant-box'); 7265 if(!variantBox){ 7266 callback({ variants: [], error: 'no_variant_box' }); 7267 return; 7268 } 7269 7270 /* Her varyant grubu için select'leri ve option'ları oku */ 7271 var variants = []; 7272 var variantLis = variantBox.querySelectorAll('.variant'); 7273 7274 variantLis.forEach(function(li, idx){ 7275 var nameEl = li.querySelector('.name'); 7276 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 7277 7278 var values = []; 7279 7280 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 7281 var optLinks = li.querySelectorAll('.options a'); 7282 7283 if(optLinks.length > 0){ 7284 optLinks.forEach(function(a){ 7285 /* Beden/renk deÄerini doÄru attribute'tan oku
7286 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 7287 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 7288 - textContent: fallback */ 7289 var deger = a.getAttribute('data-variant-value') 7290 || a.textContent.trim(); 7291 7292 /* Stok kontrolü - birden fazla yoldan kontrol et */ 7293 var isSoldOut = a.classList.contains('sold-out') 7294 || a.classList.contains('sold_out') 7295 || a.classList.contains('disabled') 7296 || a.classList.contains('stoksuz') 7297 || a.classList.contains('out-of-stock') 7298 || a.hasAttribute('disabled') 7299 || a.getAttribute('data-in-stock') === '0' 7300 || a.getAttribute('data-in-stock') === 'false' 7301 || a.getAttribute('data-stokta-var-mi') === '0' 7302 || a.getAttribute('data-stokta-var-mi') === 'false'; 7303 7304 values.push({ 7305 deger: deger, 7306 inStock: !isSoldOut 7307 }); 7308 }); 7309 } else { 7310 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 7311 var select = li.querySelector('select'); 7312 if(select){ 7313 var opts = select.querySelectorAll('option'); 7314 opts.forEach(function(o){ 7315 if(!o.value) return; 7316 values.push({ 7317 deger: o.value, 7318 inStock: !o.disabled 7319 }); 7320 }); 7321 } 7322 } 7323 7324 variants.push({ 7325 index: idx, 7326 baslik: name, 7327 values: values 7328 }); 7329 }); 7330 7331 var result = { variants: variants }; 7332 window.__luxVariantCache[productId] = result; 7333 callback(result); 7334 }) 7335 .catch(function(err){ 7336 console.error('Varyant çekme hatası:', err); 7337 callback({ variants: [], error: 'fetch_failed' }); 7338 }); 7339 } 7340 7341 7342 /* ============================================ 7343 Beden Åeridini ve gizli variant-box'ı oluÅtur 7344 ============================================ */ 7345 function buildVariantUI(productId, data){ 7346 var card = document.getElementById('card-' + productId); 7347 if(!card) return false; 7348 7349 var holder = card.querySelector('.lux-variant-box'); 7350 var strip = document.getElementById('size-strip-' + productId); 7351 if(!holder || !strip) return false; 7352 7353 if(!data.variants || data.variants.length === 0){ 7354 /* Varyant yok */ 7355 return false; 7356 } 7357 7358 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 7359 var displayVariant = null;
7360 data.variants.forEach(function(v){ 7361 if(!displayVariant && v.values.length > 1){ 7362 displayVariant = v; 7363 } 7364 }); 7365 7366 /* Gizli variant-box HTML */ 7367 var html = '<div class="variant-box"><ul>'; 7368 data.variants.forEach(function(v){ 7369 html += '<li class="variant">'; 7370 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 7371 7372 if(v.values.length > 1){ 7373 html += '<option value="">Lütfen seçin</option>'; 7374 } 7375 7376 v.values.forEach(function(val, i){ 7377 var selected = (v.values.length === 1) ? ' selected' : ''; 7378 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 7379 }); 7380 7381 html += '</select></li>'; 7382 }); 7383 html += '</ul></div>'; 7384 7385 holder.innerHTML = html; 7386 holder.style.display = ''; 7387 7388 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 7389 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 7390 if(displayVariant){ 7391 var stripHtml = ''; 7392 var inStockCount = 0; 7393 7394 /* DEBUG - console'da gör */ 7395 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 7396 7397 displayVariant.values.forEach(function(val){ 7398 /* SADECE stokta olanları ekle */ 7399 if(val.inStock === true){ 7400 stripHtml += '<div class="size-item" ' 7401 + 'data-urun-id="' + productId + '" ' 7402 + 'data-varyant-deger="' + val.deger + '" ' 7403 + 'onclick="return luxAddVariant(event, this);">' 7404 + val.deger + '</div>'; 7405 inStockCount++; 7406 } 7407 }); 7408 7409 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 7410 if(inStockCount === 0){ 7411 strip.setAttribute('data-loaded', '1'); 7412 strip.setAttribute('data-has-variants', '0'); 7413 return false; 7414 } 7415
7416 strip.innerHTML = stripHtml; 7417 strip.setAttribute('data-loaded', '1'); 7418 strip.setAttribute('data-has-variants', '1'); 7419 return true; 7420 } else { 7421 strip.setAttribute('data-loaded', '1'); 7422 strip.setAttribute('data-has-variants', '0'); 7423 return false; 7424 } 7425 } 7426 7427 7428 /* ============================================ 7429 SEPET IKONU TIKLAMASI 7430 ============================================ */ 7431 window.luxBagClick = function(ev, productId){ 7432 ev.preventDefault(); 7433 ev.stopPropagation(); 7434 7435 var card = document.getElementById('card-' + productId); 7436 var strip = document.getElementById('size-strip-' + productId); 7437 var bag = document.getElementById('lux-bag-' + productId); 7438 if(!card || !strip) return false; 7439 7440 /* Strip zaten yüklenmiÅse direkt davran */ 7441 if(strip.getAttribute('data-loaded') === '1'){ 7442 if(strip.getAttribute('data-has-variants') === '1'){ 7443 toggleStrip(productId); 7444 } else { 7445 addToCartSmart(productId); 7446 } 7447 return false; 7448 } 7449 7450 /* İlk tıklama - AJAX ile varyantları çek */ 7451 bag.classList.add('is-loading'); 7452 var productLink = card.getAttribute('data-lux-product-link'); 7453 7454 fetchVariants(productId, productLink, function(data){ 7455 bag.classList.remove('is-loading'); 7456 7457 var hasVariants = buildVariantUI(productId, data); 7458 7459 if(hasVariants){ 7460 /* Bedenler var - Åeridi aç */ 7461 toggleStrip(productId); 7462 } else { 7463 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 7464 addToCartSmart(productId); 7465 } 7466 }); 7467 7468 return false; 7469 }; 7470 7471 function toggleStrip(productId){ 7472 var strip = document.getElementById('size-strip-' + productId); 7473 var card = document.getElementById('card-' + productId); 7474 if(!strip) return; 7475 7476 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7477 if(s !== strip) s.classList.remove('open'); 7478 }); 7479 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7480 if(c !== card) c.classList.remove('sizes-open'); 7481 }); 7482 7483 strip.classList.toggle('open'); 7484 if(card) card.classList.toggle('sizes-open'); 7485 } 7486 7487 7488 /* ============================================ 7489 BEDEN TIKLAMASI 7490 ============================================ */ 7491 window.luxAddVariant = function(ev, elem){ 7492 ev.preventDefault(); 7493 ev.stopPropagation(); 7494 7495 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 7496 7497 var productId = elem.getAttribute('data-urun-id'); 7498 var varyantDeger = elem.getAttribute('data-varyant-deger'); 7499 7500 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 7501 if(!holder) return false; 7502 7503 /* Seçilen bedeni ilk select'e yaz */ 7504 var firstSelect = holder.querySelector('select[data-variant="0"]'); 7505 if(firstSelect){ 7506 firstSelect.value = varyantDeger; 7507 if(typeof jQuery !== "undefined"){ 7508 jQuery(firstSelect).val(varyantDeger).trigger('change'); 7509 } 7510 } 7511 7512 /* DiÄer select'lere ilk geçerli deÄeri koy */ 7513 var allSelects = holder.querySelectorAll('select[data-variant]'); 7514 allSelects.forEach(function(sel, idx){ 7515 if(idx === 0) return; 7516 if(sel.value) return; 7517 var options = sel.querySelectorAll('option'); 7518 for(var i = 0; i < options.length; i++){ 7519 if(options[i].value){ 7520 sel.value = options[i].value; 7521 if(typeof jQuery !== "undefined"){ 7522 jQuery(sel).val(options[i].value).trigger('change'); 7523 } 7524 break; 7525 } 7526 } 7527 }); 7528 7529 /* Görsel feedback */ 7530 elem.classList.add('adding'); 7531 var originalText = elem.textContent; 7532 elem.textContent = 'â'; 7533 7534 /* Sepete ekle */ 7535 addToCartSmart(productId, { 7536 checkVariant: true, 7537 variantCount: allSelects.length, 7538 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 7539 }); 7540 7541 setTimeout(function(){ 7542 elem.textContent = originalText; 7543 elem.classList.remove('adding'); 7544 closeAll(); 7545 }, 800); 7546 7547 return false; 7548 }; 7549 7550 7551 /* ============================================ 7552 SEPETE EKLE - Modal killer ile 7553 ============================================ */ 7554 function addToCartSmart(productId, extraOptions){ 7555 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 7556 7557 var options = { 7558 quantity: 1, 7559 hideNativeModal: 'lux-card-' + productId 7560 }; 7561 7562 if(extraOptions){
7563 Object.keys(extraOptions).forEach(function(k){ 7564 options[k] = extraOptions[k]; 7565 }); 7566 } else if(holder){ 7567 var selects = holder.querySelectorAll('select[data-variant]'); 7568 if(selects.length > 0){ 7569 options.checkVariant = true; 7570 options.variantCount = selects.length; 7571 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 7572 } 7573 } 7574 7575 startModalKill(2000); 7576 7577 if(typeof addCart === "function"){ 7578 try { 7579 addCart(productId, 'card', options); 7580 flashSuccess(productId); 7581 } catch(err){ 7582 console.error('Sepete ekleme hatası:', err); 7583 } 7584 } 7585 } 7586 7587})(); 7588</script>
7588</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 7589 data-lux-product-shell="1" 7590 data-lux-page="1"><style> 7591@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 7592 7593/* ===== VEZZA LUX CARD ===== */ 7594.card-product{ 7595 font-family:'Poppins',sans-serif; 7596 background:#fff !important; 7597 position:relative; 7598} 7599.card-product-inner{ 7600 background:transparent !important; 7601 position:relative; 7602} 7603.card-product .c-p-i-link, 7604.card-product a{ 7605 background:transparent !important; 7606} 7607.card-product-inner > div{ 7608 background:transparent !important; 7609} 7610.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 7611 background:transparent !important; 7612} 7613.card-product .card-product-content, 7614.card-product .price-group, 7615.card-product .prices{ 7616 background:transparent !important; 7617} 7618[class*="skeleton"], 7619[class*="placeholder"], 7620[class*="loading"]{ 7621 background:transparent !important; 7622} 7623 7624/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 7625.image-wrapper{ 7626 position:relative; 7627 width:100%; 7628 aspect-ratio:1/1; 7629 overflow:hidden; 7630 background:#fff !important; 7631} 7632 7633.image{ 7634 position:relative; 7635 width:100%; 7636 height:100%; 7637} 7638 7639.image-wrapper img{ 7640 width:100% !important; 7641 height:100% !important; 7642 object-fit:cover !important; 7643 object-position:center center !important; 7644 display:block; 7645 transition:transform .35s ease; 7646} 7647 7648/* ===== DISCOUNT ===== */ 7649.discount{ 7650 position:absolute; 7651 top:12px; 7652 left:12px; 7653 width:28px; 7654 height:48px; 7655 background:#e10b0b; 7656 color:#fff; 7657 font-size:12px; 7658 font-weight:600; 7659 display:flex; 7660 align-items:center; 7661 justify-content:center; 7662 writing-mode:vertical-rl; 7663 transform:rotate(180deg); 7664 letter-spacing:.5px; 7665 z-index:7; 7666} 7667 7668/* ===== FAV ===== */ 7669.lux-fav{ 7670 position:absolute; 7671 top:12px; 7672 right:12px; 7673 z-index:7; 7674} 7675.lux-fav a, 7676.lux-fav button{ 7677 background:transparent !important; 7678 border:0 !important; 7679 padding:0 !important; 7680 cursor:pointer; 7681 display:inline-flex; 7682 align-items:center; 7683 justify-content:center; 7684} 7685 7686/* ===== SEPET IKON ===== */ 7687.lux-bag{ 7688 position:absolute; 7689 bottom:12px; 7690 right:12px; 7691 z-index:7; 7692 width:34px; 7693 height:34px; 7694 display:inline-flex; 7695 align-items:center; 7696 justify-content:center; 7697 background:rgba(255,255,255,.92); 7698 border:1px solid rgba(0,0,0,.10); 7699 border-radius:10px; 7700 cursor:pointer; 7701 transition:.2s ease; 7702} 7703.lux-bag:hover{ 7704 background:#fff; 7705 border-color:rgba(0,0,0,.25); 7706} 7707.lux-bag.is-loading{ 7708 opacity:.6; 7709 cursor:wait; 7710} 7711.lux-bag.is-success{ 7712 background:#2e7d32 !important; 7713 border-color:#2e7d32 !important; 7714 color:#fff !important; 7715} 7716.card-product.sizes-open .lux-bag{ 7717 opacity:0; 7718 pointer-events:none; 7719} 7720 7721/* Loading spinner */ 7722.lux-bag.is-loading i::before{ 7723 content:"â³"; 7724} 7725 7726/* ===== SIZE STRIP ===== */ 7727.size-strip{ 7728 width:100%; 7729 max-height:0; 7730 overflow:hidden; 7731 background:#fff; 7732 display:flex; 7733 flex-wrap:wrap; 7734 transition:max-height .3s ease, border-color .3s ease; 7735 border-top:1px solid transparent; 7736 border-bottom:1px solid transparent; 7737} 7738.size-strip.open{ 7739 max-height:200px; 7740 border-top-color:rgba(0,0,0,.08); 7741 border-bottom-color:rgba(0,0,0,.08); 7742} 7743.size-item{ 7744 flex:1 0 auto; 7745 min-width:38px; 7746 height:42px; 7747 display:flex; 7748 align-items:center; 7749 justify-content:center; 7750 font-size:13px; 7751 font-weight:500; 7752 color:#111 !important; 7753 cursor:pointer; 7754 user-select:none; 7755 background:transparent; 7756 transition:background .15s ease, color .15s ease; 7757 border-right:1px solid rgba(0,0,0,.08); 7758} 7759.size-item:last-child{ border-right:0; } 7760.size-item:hover:not(.disabled):not(.adding){ 7761 background:#000 !important; 7762 color:#fff !important; 7763} 7764.size-item.disabled{ 7765 color:#111 !important; 7766 text-decoration:line-through !important; 7767 opacity:.30 !important; 7768 cursor:not-allowed; 7769} 7770.size-item.adding{ 7771 background:#2e7d32 !important; 7772 color:#fff !important; 7773 cursor:wait; 7774} 7775 7776/* ===== META ===== */ 7777.lux-meta{ 7778 padding:12px 6px 6px; 7779 background:transparent !important; 7780} 7781.lux-brand{ 7782 font-size:16px; 7783 font-weight:600; 7784 color:#111; 7785 margin-bottom:2px; 7786} 7787.lux-title{ 7788 font-size:14px; 7789 font-weight:400; 7790 line-height:1.45; 7791 color:#111; 7792 margin:0; 7793} 7794.lux-price{ 7795 margin-top:10px; 7796 display:flex; 7797 gap:10px; 7798 align-items:baseline; 7799 background:transparent !important; 7800} 7801.lux-price .list-price{ 7802 font-size:14px; 7803 font-weight:400; 7804 color:#111; 7805 text-decoration:line-through; 7806} 7807.lux-price .sale-price{ 7808 font-size:16px; 7809 font-weight:600; 7810 color:#e10b0b; 7811} 7812 7813.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
7814.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 7815</style><div class="card-product" 7816 id="card-10279" 7817 data-lux-card-id="10279" 7818 data-lux-product-link="https://www.vezzalux.com/gucci-949-siyah-beyaz-erkek-ayakkabi" 7819 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/gucci-949-siyah-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Gucci 949 Siyah Beyaz Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9d022ffa-59918152-sw1200sh1200.webp" alt="Gucci 949 Siyah Beyaz Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9d022ffa-59918152-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9cc7e5eb-48303935-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" 7820 onclick="userProductFavourite('add', 10279)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 7821 id="lux-bag-10279" 7822 onclick="return luxBagClick(event, 10279);" 7823 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10279" style="display:none;"></div><div class="size-strip" id="size-strip-10279" data-loaded="0"></div><a href="https://www.vezzalux.com/gucci-949-siyah-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Gucci 949 Siyah Beyaz Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Gucci</div><div class="lux-title">Gucci 949 Siyah Beyaz Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
7823<script> 7824(function(){ 7825 7826 /* Bir kez kur */ 7827 if(window.__luxCardInit) return; 7828 window.__luxCardInit = true; 7829 7830 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 7831 window.__luxVariantCache = window.__luxVariantCache || {}; 7832 7833 function closeAll(){ 7834 document.querySelectorAll('.size-strip.open').forEach(function(s){ 7835 s.classList.remove('open'); 7836 }); 7837 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 7838 c.classList.remove('sizes-open'); 7839 }); 7840 } 7841 7842 function flashSuccess(productId){ 7843 var bag = document.getElementById('lux-bag-' + productId); 7844 if(!bag) return; 7845 bag.classList.add('is-success'); 7846 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 7847 } 7848 7849 /* DıŠtıklama - kapat */ 7850 document.addEventListener('click', function(e){ 7851 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 7852 if(!inside) closeAll(); 7853 }); 7854 7855 document.addEventListener('keydown', function(e){ 7856 if(e.key === 'Escape') closeAll(); 7857 }); 7858 7859 7860 /* ============================================ 7861 MODAL KILLER - yedek güvence 7862 ============================================ */ 7863 var LUX_MODAL_KILL_ACTIVE = false; 7864 7865 function killVisibleModals(){ 7866 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 7867 modals.forEach(function(m){ 7868 var id = (m.id || '').toLowerCase(); 7869 var txt = (m.textContent || '').toLowerCase(); 7870 var isCartModal = id.indexOf('cart') > -1 7871 || id.indexOf('variant') > -1 7872 || id.indexOf('fast') > -1 7873 || id.indexOf('urun') > -1 7874 || txt.indexOf('lütfen seçin') > -1; 7875 7876 if(isCartModal){ 7877 if(typeof jQuery !== 'undefined'){ 7878 try { jQuery(m).modal('hide'); } catch(e){} 7879 } 7880 m.classList.remove('show','in'); 7881 m.style.display = 'none'; 7882 } 7883 }); 7884 7885 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 7886 document.body.classList.remove('modal-open'); 7887 document.body.style.overflow = ''; 7888 document.body.style.paddingRight = ''; 7889 } 7890 7891 function startModalKill(durationMs){ 7892 if(LUX_MODAL_KILL_ACTIVE) return; 7893 LUX_MODAL_KILL_ACTIVE = true; 7894 killVisibleModals(); 7895 var interval = setInterval(killVisibleModals, 50); 7896 setTimeout(function(){ 7897 clearInterval(interval); 7898 LUX_MODAL_KILL_ACTIVE = false; 7899 }, durationMs || 2000); 7900 } 7901 7902 7903 /* ============================================ 7904 AJAX: Varyantları detay sayfasından çek 7905 ============================================ 7906 Ãrün detay sayfasının tam HTML'ini indir, 7907 DOMParser ile parse et, varyantları bul 7908 ============================================ */ 7909 function fetchVariants(productId, productLink, callback){ 7910 7911 /* Cache'te varsa hemen döndür */ 7912 if(window.__luxVariantCache[productId]){ 7913 callback(window.__luxVariantCache[productId]); 7914 return; 7915 } 7916 7917 fetch(productLink, { 7918 method: 'GET', 7919 credentials: 'same-origin', 7920 headers: { 'Accept': 'text/html' } 7921 }) 7922 .then(function(r){ return r.text(); }) 7923 .then(function(html){ 7924 var parser = new DOMParser(); 7925 var doc = parser.parseFromString(html, 'text/html'); 7926 7927 /* Detay sayfasındaki .variant-box'ı bul */ 7928 var variantBox = doc.querySelector('.variant-box'); 7929 if(!variantBox){ 7930 callback({ variants: [], error: 'no_variant_box' }); 7931 return; 7932 } 7933 7934 /* Her varyant grubu için select'leri ve option'ları oku */ 7935 var variants = []; 7936 var variantLis = variantBox.querySelectorAll('.variant'); 7937 7938 variantLis.forEach(function(li, idx){ 7939 var nameEl = li.querySelector('.name'); 7940 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 7941 7942 var values = []; 7943 7944 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 7945 var optLinks = li.querySelectorAll('.options a'); 7946 7947 if(optLinks.length > 0){ 7948 optLinks.forEach(function(a){ 7949 /* Beden/renk deÄerini doÄru attribute'tan oku
7950 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 7951 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 7952 - textContent: fallback */ 7953 var deger = a.getAttribute('data-variant-value') 7954 || a.textContent.trim(); 7955 7956 /* Stok kontrolü - birden fazla yoldan kontrol et */ 7957 var isSoldOut = a.classList.contains('sold-out') 7958 || a.classList.contains('sold_out') 7959 || a.classList.contains('disabled') 7960 || a.classList.contains('stoksuz') 7961 || a.classList.contains('out-of-stock') 7962 || a.hasAttribute('disabled') 7963 || a.getAttribute('data-in-stock') === '0' 7964 || a.getAttribute('data-in-stock') === 'false' 7965 || a.getAttribute('data-stokta-var-mi') === '0' 7966 || a.getAttribute('data-stokta-var-mi') === 'false'; 7967 7968 values.push({ 7969 deger: deger, 7970 inStock: !isSoldOut 7971 }); 7972 }); 7973 } else { 7974 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 7975 var select = li.querySelector('select'); 7976 if(select){ 7977 var opts = select.querySelectorAll('option'); 7978 opts.forEach(function(o){ 7979 if(!o.value) return; 7980 values.push({ 7981 deger: o.value, 7982 inStock: !o.disabled 7983 }); 7984 }); 7985 } 7986 } 7987 7988 variants.push({ 7989 index: idx, 7990 baslik: name, 7991 values: values 7992 }); 7993 }); 7994 7995 var result = { variants: variants }; 7996 window.__luxVariantCache[productId] = result; 7997 callback(result); 7998 }) 7999 .catch(function(err){ 8000 console.error('Varyant çekme hatası:', err); 8001 callback({ variants: [], error: 'fetch_failed' }); 8002 }); 8003 } 8004 8005 8006 /* ============================================ 8007 Beden Åeridini ve gizli variant-box'ı oluÅtur 8008 ============================================ */ 8009 function buildVariantUI(productId, data){ 8010 var card = document.getElementById('card-' + productId); 8011 if(!card) return false; 8012 8013 var holder = card.querySelector('.lux-variant-box'); 8014 var strip = document.getElementById('size-strip-' + productId); 8015 if(!holder || !strip) return false; 8016 8017 if(!data.variants || data.variants.length === 0){ 8018 /* Varyant yok */ 8019 return false; 8020 } 8021 8022 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 8023 var displayVariant = null;
8024 data.variants.forEach(function(v){ 8025 if(!displayVariant && v.values.length > 1){ 8026 displayVariant = v; 8027 } 8028 }); 8029 8030 /* Gizli variant-box HTML */ 8031 var html = '<div class="variant-box"><ul>'; 8032 data.variants.forEach(function(v){ 8033 html += '<li class="variant">'; 8034 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 8035 8036 if(v.values.length > 1){ 8037 html += '<option value="">Lütfen seçin</option>'; 8038 } 8039 8040 v.values.forEach(function(val, i){ 8041 var selected = (v.values.length === 1) ? ' selected' : ''; 8042 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 8043 }); 8044 8045 html += '</select></li>'; 8046 }); 8047 html += '</ul></div>'; 8048 8049 holder.innerHTML = html; 8050 holder.style.display = ''; 8051 8052 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 8053 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 8054 if(displayVariant){ 8055 var stripHtml = ''; 8056 var inStockCount = 0; 8057 8058 /* DEBUG - console'da gör */ 8059 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 8060 8061 displayVariant.values.forEach(function(val){ 8062 /* SADECE stokta olanları ekle */ 8063 if(val.inStock === true){ 8064 stripHtml += '<div class="size-item" ' 8065 + 'data-urun-id="' + productId + '" ' 8066 + 'data-varyant-deger="' + val.deger + '" ' 8067 + 'onclick="return luxAddVariant(event, this);">' 8068 + val.deger + '</div>'; 8069 inStockCount++; 8070 } 8071 }); 8072 8073 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 8074 if(inStockCount === 0){ 8075 strip.setAttribute('data-loaded', '1'); 8076 strip.setAttribute('data-has-variants', '0'); 8077 return false; 8078 } 8079
8080 strip.innerHTML = stripHtml; 8081 strip.setAttribute('data-loaded', '1'); 8082 strip.setAttribute('data-has-variants', '1'); 8083 return true; 8084 } else { 8085 strip.setAttribute('data-loaded', '1'); 8086 strip.setAttribute('data-has-variants', '0'); 8087 return false; 8088 } 8089 } 8090 8091 8092 /* ============================================ 8093 SEPET IKONU TIKLAMASI 8094 ============================================ */ 8095 window.luxBagClick = function(ev, productId){ 8096 ev.preventDefault(); 8097 ev.stopPropagation(); 8098 8099 var card = document.getElementById('card-' + productId); 8100 var strip = document.getElementById('size-strip-' + productId); 8101 var bag = document.getElementById('lux-bag-' + productId); 8102 if(!card || !strip) return false; 8103 8104 /* Strip zaten yüklenmiÅse direkt davran */ 8105 if(strip.getAttribute('data-loaded') === '1'){ 8106 if(strip.getAttribute('data-has-variants') === '1'){ 8107 toggleStrip(productId); 8108 } else { 8109 addToCartSmart(productId); 8110 } 8111 return false; 8112 } 8113 8114 /* İlk tıklama - AJAX ile varyantları çek */ 8115 bag.classList.add('is-loading'); 8116 var productLink = card.getAttribute('data-lux-product-link'); 8117 8118 fetchVariants(productId, productLink, function(data){ 8119 bag.classList.remove('is-loading'); 8120 8121 var hasVariants = buildVariantUI(productId, data); 8122 8123 if(hasVariants){ 8124 /* Bedenler var - Åeridi aç */ 8125 toggleStrip(productId); 8126 } else { 8127 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 8128 addToCartSmart(productId); 8129 } 8130 }); 8131 8132 return false; 8133 }; 8134 8135 function toggleStrip(productId){ 8136 var strip = document.getElementById('size-strip-' + productId); 8137 var card = document.getElementById('card-' + productId); 8138 if(!strip) return; 8139 8140 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8141 if(s !== strip) s.classList.remove('open'); 8142 }); 8143 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8144 if(c !== card) c.classList.remove('sizes-open'); 8145 }); 8146 8147 strip.classList.toggle('open'); 8148 if(card) card.classList.toggle('sizes-open'); 8149 } 8150 8151 8152 /* ============================================ 8153 BEDEN TIKLAMASI 8154 ============================================ */ 8155 window.luxAddVariant = function(ev, elem){ 8156 ev.preventDefault(); 8157 ev.stopPropagation(); 8158 8159 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 8160 8161 var productId = elem.getAttribute('data-urun-id'); 8162 var varyantDeger = elem.getAttribute('data-varyant-deger'); 8163 8164 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8165 if(!holder) return false; 8166 8167 /* Seçilen bedeni ilk select'e yaz */ 8168 var firstSelect = holder.querySelector('select[data-variant="0"]'); 8169 if(firstSelect){ 8170 firstSelect.value = varyantDeger; 8171 if(typeof jQuery !== "undefined"){ 8172 jQuery(firstSelect).val(varyantDeger).trigger('change'); 8173 } 8174 } 8175 8176 /* DiÄer select'lere ilk geçerli deÄeri koy */ 8177 var allSelects = holder.querySelectorAll('select[data-variant]'); 8178 allSelects.forEach(function(sel, idx){ 8179 if(idx === 0) return; 8180 if(sel.value) return; 8181 var options = sel.querySelectorAll('option'); 8182 for(var i = 0; i < options.length; i++){ 8183 if(options[i].value){ 8184 sel.value = options[i].value; 8185 if(typeof jQuery !== "undefined"){ 8186 jQuery(sel).val(options[i].value).trigger('change'); 8187 } 8188 break; 8189 } 8190 } 8191 }); 8192 8193 /* Görsel feedback */ 8194 elem.classList.add('adding'); 8195 var originalText = elem.textContent; 8196 elem.textContent = 'â'; 8197 8198 /* Sepete ekle */ 8199 addToCartSmart(productId, { 8200 checkVariant: true, 8201 variantCount: allSelects.length, 8202 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 8203 }); 8204 8205 setTimeout(function(){ 8206 elem.textContent = originalText; 8207 elem.classList.remove('adding'); 8208 closeAll(); 8209 }, 800); 8210 8211 return false; 8212 }; 8213 8214 8215 /* ============================================ 8216 SEPETE EKLE - Modal killer ile 8217 ============================================ */ 8218 function addToCartSmart(productId, extraOptions){ 8219 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8220 8221 var options = { 8222 quantity: 1, 8223 hideNativeModal: 'lux-card-' + productId 8224 }; 8225 8226 if(extraOptions){
8227 Object.keys(extraOptions).forEach(function(k){ 8228 options[k] = extraOptions[k]; 8229 }); 8230 } else if(holder){ 8231 var selects = holder.querySelectorAll('select[data-variant]'); 8232 if(selects.length > 0){ 8233 options.checkVariant = true; 8234 options.variantCount = selects.length; 8235 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 8236 } 8237 } 8238 8239 startModalKill(2000); 8240 8241 if(typeof addCart === "function"){ 8242 try { 8243 addCart(productId, 'card', options); 8244 flashSuccess(productId); 8245 } catch(err){ 8246 console.error('Sepete ekleme hatası:', err); 8247 } 8248 } 8249 } 8250 8251})(); 8252</script>
8252</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 8253 data-lux-product-shell="1" 8254 data-lux-page="1"><style> 8255@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 8256 8257/* ===== VEZZA LUX CARD ===== */ 8258.card-product{ 8259 font-family:'Poppins',sans-serif; 8260 background:#fff !important; 8261 position:relative; 8262} 8263.card-product-inner{ 8264 background:transparent !important; 8265 position:relative; 8266} 8267.card-product .c-p-i-link, 8268.card-product a{ 8269 background:transparent !important; 8270} 8271.card-product-inner > div{ 8272 background:transparent !important; 8273} 8274.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 8275 background:transparent !important; 8276} 8277.card-product .card-product-content, 8278.card-product .price-group, 8279.card-product .prices{ 8280 background:transparent !important; 8281} 8282[class*="skeleton"], 8283[class*="placeholder"], 8284[class*="loading"]{ 8285 background:transparent !important; 8286} 8287 8288/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 8289.image-wrapper{ 8290 position:relative; 8291 width:100%; 8292 aspect-ratio:1/1; 8293 overflow:hidden; 8294 background:#fff !important; 8295} 8296 8297.image{ 8298 position:relative; 8299 width:100%; 8300 height:100%; 8301} 8302 8303.image-wrapper img{ 8304 width:100% !important; 8305 height:100% !important; 8306 object-fit:cover !important; 8307 object-position:center center !important; 8308 display:block; 8309 transition:transform .35s ease; 8310} 8311 8312/* ===== DISCOUNT ===== */ 8313.discount{ 8314 position:absolute; 8315 top:12px; 8316 left:12px; 8317 width:28px; 8318 height:48px; 8319 background:#e10b0b; 8320 color:#fff; 8321 font-size:12px; 8322 font-weight:600; 8323 display:flex; 8324 align-items:center; 8325 justify-content:center; 8326 writing-mode:vertical-rl; 8327 transform:rotate(180deg); 8328 letter-spacing:.5px; 8329 z-index:7; 8330} 8331 8332/* ===== FAV ===== */ 8333.lux-fav{ 8334 position:absolute; 8335 top:12px; 8336 right:12px; 8337 z-index:7; 8338} 8339.lux-fav a, 8340.lux-fav button{ 8341 background:transparent !important; 8342 border:0 !important; 8343 padding:0 !important; 8344 cursor:pointer; 8345 display:inline-flex; 8346 align-items:center; 8347 justify-content:center; 8348} 8349 8350/* ===== SEPET IKON ===== */ 8351.lux-bag{ 8352 position:absolute; 8353 bottom:12px; 8354 right:12px; 8355 z-index:7; 8356 width:34px; 8357 height:34px; 8358 display:inline-flex; 8359 align-items:center; 8360 justify-content:center; 8361 background:rgba(255,255,255,.92); 8362 border:1px solid rgba(0,0,0,.10); 8363 border-radius:10px; 8364 cursor:pointer; 8365 transition:.2s ease; 8366} 8367.lux-bag:hover{ 8368 background:#fff; 8369 border-color:rgba(0,0,0,.25); 8370} 8371.lux-bag.is-loading{ 8372 opacity:.6; 8373 cursor:wait; 8374} 8375.lux-bag.is-success{ 8376 background:#2e7d32 !important; 8377 border-color:#2e7d32 !important; 8378 color:#fff !important; 8379} 8380.card-product.sizes-open .lux-bag{ 8381 opacity:0; 8382 pointer-events:none; 8383} 8384 8385/* Loading spinner */ 8386.lux-bag.is-loading i::before{ 8387 content:"â³"; 8388} 8389 8390/* ===== SIZE STRIP ===== */ 8391.size-strip{ 8392 width:100%; 8393 max-height:0; 8394 overflow:hidden; 8395 background:#fff; 8396 display:flex; 8397 flex-wrap:wrap; 8398 transition:max-height .3s ease, border-color .3s ease; 8399 border-top:1px solid transparent; 8400 border-bottom:1px solid transparent; 8401} 8402.size-strip.open{ 8403 max-height:200px; 8404 border-top-color:rgba(0,0,0,.08); 8405 border-bottom-color:rgba(0,0,0,.08); 8406} 8407.size-item{ 8408 flex:1 0 auto; 8409 min-width:38px; 8410 height:42px; 8411 display:flex; 8412 align-items:center; 8413 justify-content:center; 8414 font-size:13px; 8415 font-weight:500; 8416 color:#111 !important; 8417 cursor:pointer; 8418 user-select:none; 8419 background:transparent; 8420 transition:background .15s ease, color .15s ease; 8421 border-right:1px solid rgba(0,0,0,.08); 8422} 8423.size-item:last-child{ border-right:0; } 8424.size-item:hover:not(.disabled):not(.adding){ 8425 background:#000 !important; 8426 color:#fff !important; 8427} 8428.size-item.disabled{ 8429 color:#111 !important; 8430 text-decoration:line-through !important; 8431 opacity:.30 !important; 8432 cursor:not-allowed; 8433} 8434.size-item.adding{ 8435 background:#2e7d32 !important; 8436 color:#fff !important; 8437 cursor:wait; 8438} 8439 8440/* ===== META ===== */ 8441.lux-meta{ 8442 padding:12px 6px 6px; 8443 background:transparent !important; 8444} 8445.lux-brand{ 8446 font-size:16px; 8447 font-weight:600; 8448 color:#111; 8449 margin-bottom:2px; 8450} 8451.lux-title{ 8452 font-size:14px; 8453 font-weight:400; 8454 line-height:1.45; 8455 color:#111; 8456 margin:0; 8457} 8458.lux-price{ 8459 margin-top:10px; 8460 display:flex; 8461 gap:10px; 8462 align-items:baseline; 8463 background:transparent !important; 8464} 8465.lux-price .list-price{ 8466 font-size:14px; 8467 font-weight:400; 8468 color:#111; 8469 text-decoration:line-through; 8470} 8471.lux-price .sale-price{ 8472 font-size:16px; 8473 font-weight:600; 8474 color:#e10b0b; 8475} 8476 8477.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
8478.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 8479</style><div class="card-product" 8480 id="card-10172" 8481 data-lux-card-id="10172" 8482 data-lux-product-link="https://www.vezzalux.com/off-816-siyah-kirmizi-logo-erkek-ayakkabi" 8483 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/off-816-siyah-kirmizi-logo-erkek-ayakkabi" class="c-p-i-link" title="Off 816 Siyah Kırmızı Logo Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c73b3c303-50700022-sw1200sh1200.webp" alt="Off 816 Siyah Kırmızı Logo Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c73b3c303-50700022-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c738454c5-41662726-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" 8484 onclick="userProductFavourite('add', 10172)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 8485 id="lux-bag-10172" 8486 onclick="return luxBagClick(event, 10172);" 8487 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10172" style="display:none;"></div><div class="size-strip" id="size-strip-10172" data-loaded="0"></div><a href="https://www.vezzalux.com/off-816-siyah-kirmizi-logo-erkek-ayakkabi" class="c-p-i-link" title="Off 816 Siyah Kırmızı Logo Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Off White</div><div class="lux-title">Off 816 Siyah Kırmızı Logo Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
8487<script> 8488(function(){ 8489 8490 /* Bir kez kur */ 8491 if(window.__luxCardInit) return; 8492 window.__luxCardInit = true; 8493 8494 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 8495 window.__luxVariantCache = window.__luxVariantCache || {}; 8496 8497 function closeAll(){ 8498 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8499 s.classList.remove('open'); 8500 }); 8501 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8502 c.classList.remove('sizes-open'); 8503 }); 8504 } 8505 8506 function flashSuccess(productId){ 8507 var bag = document.getElementById('lux-bag-' + productId); 8508 if(!bag) return; 8509 bag.classList.add('is-success'); 8510 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 8511 } 8512 8513 /* DıŠtıklama - kapat */ 8514 document.addEventListener('click', function(e){ 8515 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 8516 if(!inside) closeAll(); 8517 }); 8518 8519 document.addEventListener('keydown', function(e){ 8520 if(e.key === 'Escape') closeAll(); 8521 }); 8522 8523 8524 /* ============================================ 8525 MODAL KILLER - yedek güvence 8526 ============================================ */ 8527 var LUX_MODAL_KILL_ACTIVE = false; 8528 8529 function killVisibleModals(){ 8530 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 8531 modals.forEach(function(m){ 8532 var id = (m.id || '').toLowerCase(); 8533 var txt = (m.textContent || '').toLowerCase(); 8534 var isCartModal = id.indexOf('cart') > -1 8535 || id.indexOf('variant') > -1 8536 || id.indexOf('fast') > -1 8537 || id.indexOf('urun') > -1 8538 || txt.indexOf('lütfen seçin') > -1; 8539 8540 if(isCartModal){ 8541 if(typeof jQuery !== 'undefined'){ 8542 try { jQuery(m).modal('hide'); } catch(e){} 8543 } 8544 m.classList.remove('show','in'); 8545 m.style.display = 'none'; 8546 } 8547 }); 8548 8549 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 8550 document.body.classList.remove('modal-open'); 8551 document.body.style.overflow = ''; 8552 document.body.style.paddingRight = ''; 8553 } 8554 8555 function startModalKill(durationMs){ 8556 if(LUX_MODAL_KILL_ACTIVE) return; 8557 LUX_MODAL_KILL_ACTIVE = true; 8558 killVisibleModals(); 8559 var interval = setInterval(killVisibleModals, 50); 8560 setTimeout(function(){ 8561 clearInterval(interval); 8562 LUX_MODAL_KILL_ACTIVE = false; 8563 }, durationMs || 2000); 8564 } 8565 8566 8567 /* ============================================ 8568 AJAX: Varyantları detay sayfasından çek 8569 ============================================ 8570 Ãrün detay sayfasının tam HTML'ini indir, 8571 DOMParser ile parse et, varyantları bul 8572 ============================================ */ 8573 function fetchVariants(productId, productLink, callback){ 8574 8575 /* Cache'te varsa hemen döndür */ 8576 if(window.__luxVariantCache[productId]){ 8577 callback(window.__luxVariantCache[productId]); 8578 return; 8579 } 8580 8581 fetch(productLink, { 8582 method: 'GET', 8583 credentials: 'same-origin', 8584 headers: { 'Accept': 'text/html' } 8585 }) 8586 .then(function(r){ return r.text(); }) 8587 .then(function(html){ 8588 var parser = new DOMParser(); 8589 var doc = parser.parseFromString(html, 'text/html'); 8590 8591 /* Detay sayfasındaki .variant-box'ı bul */ 8592 var variantBox = doc.querySelector('.variant-box'); 8593 if(!variantBox){ 8594 callback({ variants: [], error: 'no_variant_box' }); 8595 return; 8596 } 8597 8598 /* Her varyant grubu için select'leri ve option'ları oku */ 8599 var variants = []; 8600 var variantLis = variantBox.querySelectorAll('.variant'); 8601 8602 variantLis.forEach(function(li, idx){ 8603 var nameEl = li.querySelector('.name'); 8604 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 8605 8606 var values = []; 8607 8608 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 8609 var optLinks = li.querySelectorAll('.options a'); 8610 8611 if(optLinks.length > 0){ 8612 optLinks.forEach(function(a){ 8613 /* Beden/renk deÄerini doÄru attribute'tan oku
8614 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 8615 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 8616 - textContent: fallback */ 8617 var deger = a.getAttribute('data-variant-value') 8618 || a.textContent.trim(); 8619 8620 /* Stok kontrolü - birden fazla yoldan kontrol et */ 8621 var isSoldOut = a.classList.contains('sold-out') 8622 || a.classList.contains('sold_out') 8623 || a.classList.contains('disabled') 8624 || a.classList.contains('stoksuz') 8625 || a.classList.contains('out-of-stock') 8626 || a.hasAttribute('disabled') 8627 || a.getAttribute('data-in-stock') === '0' 8628 || a.getAttribute('data-in-stock') === 'false' 8629 || a.getAttribute('data-stokta-var-mi') === '0' 8630 || a.getAttribute('data-stokta-var-mi') === 'false'; 8631 8632 values.push({ 8633 deger: deger, 8634 inStock: !isSoldOut 8635 }); 8636 }); 8637 } else { 8638 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 8639 var select = li.querySelector('select'); 8640 if(select){ 8641 var opts = select.querySelectorAll('option'); 8642 opts.forEach(function(o){ 8643 if(!o.value) return; 8644 values.push({ 8645 deger: o.value, 8646 inStock: !o.disabled 8647 }); 8648 }); 8649 } 8650 } 8651 8652 variants.push({ 8653 index: idx, 8654 baslik: name, 8655 values: values 8656 }); 8657 }); 8658 8659 var result = { variants: variants }; 8660 window.__luxVariantCache[productId] = result; 8661 callback(result); 8662 }) 8663 .catch(function(err){ 8664 console.error('Varyant çekme hatası:', err); 8665 callback({ variants: [], error: 'fetch_failed' }); 8666 }); 8667 } 8668 8669 8670 /* ============================================ 8671 Beden Åeridini ve gizli variant-box'ı oluÅtur 8672 ============================================ */ 8673 function buildVariantUI(productId, data){ 8674 var card = document.getElementById('card-' + productId); 8675 if(!card) return false; 8676 8677 var holder = card.querySelector('.lux-variant-box'); 8678 var strip = document.getElementById('size-strip-' + productId); 8679 if(!holder || !strip) return false; 8680 8681 if(!data.variants || data.variants.length === 0){ 8682 /* Varyant yok */ 8683 return false; 8684 } 8685 8686 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 8687 var displayVariant = null;
8688 data.variants.forEach(function(v){ 8689 if(!displayVariant && v.values.length > 1){ 8690 displayVariant = v; 8691 } 8692 }); 8693 8694 /* Gizli variant-box HTML */ 8695 var html = '<div class="variant-box"><ul>'; 8696 data.variants.forEach(function(v){ 8697 html += '<li class="variant">'; 8698 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 8699 8700 if(v.values.length > 1){ 8701 html += '<option value="">Lütfen seçin</option>'; 8702 } 8703 8704 v.values.forEach(function(val, i){ 8705 var selected = (v.values.length === 1) ? ' selected' : ''; 8706 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 8707 }); 8708 8709 html += '</select></li>'; 8710 }); 8711 html += '</ul></div>'; 8712 8713 holder.innerHTML = html; 8714 holder.style.display = ''; 8715 8716 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 8717 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 8718 if(displayVariant){ 8719 var stripHtml = ''; 8720 var inStockCount = 0; 8721 8722 /* DEBUG - console'da gör */ 8723 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 8724 8725 displayVariant.values.forEach(function(val){ 8726 /* SADECE stokta olanları ekle */ 8727 if(val.inStock === true){ 8728 stripHtml += '<div class="size-item" ' 8729 + 'data-urun-id="' + productId + '" ' 8730 + 'data-varyant-deger="' + val.deger + '" ' 8731 + 'onclick="return luxAddVariant(event, this);">' 8732 + val.deger + '</div>'; 8733 inStockCount++; 8734 } 8735 }); 8736 8737 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 8738 if(inStockCount === 0){ 8739 strip.setAttribute('data-loaded', '1'); 8740 strip.setAttribute('data-has-variants', '0'); 8741 return false; 8742 } 8743
8744 strip.innerHTML = stripHtml; 8745 strip.setAttribute('data-loaded', '1'); 8746 strip.setAttribute('data-has-variants', '1'); 8747 return true; 8748 } else { 8749 strip.setAttribute('data-loaded', '1'); 8750 strip.setAttribute('data-has-variants', '0'); 8751 return false; 8752 } 8753 } 8754 8755 8756 /* ============================================ 8757 SEPET IKONU TIKLAMASI 8758 ============================================ */ 8759 window.luxBagClick = function(ev, productId){ 8760 ev.preventDefault(); 8761 ev.stopPropagation(); 8762 8763 var card = document.getElementById('card-' + productId); 8764 var strip = document.getElementById('size-strip-' + productId); 8765 var bag = document.getElementById('lux-bag-' + productId); 8766 if(!card || !strip) return false; 8767 8768 /* Strip zaten yüklenmiÅse direkt davran */ 8769 if(strip.getAttribute('data-loaded') === '1'){ 8770 if(strip.getAttribute('data-has-variants') === '1'){ 8771 toggleStrip(productId); 8772 } else { 8773 addToCartSmart(productId); 8774 } 8775 return false; 8776 } 8777 8778 /* İlk tıklama - AJAX ile varyantları çek */ 8779 bag.classList.add('is-loading'); 8780 var productLink = card.getAttribute('data-lux-product-link'); 8781 8782 fetchVariants(productId, productLink, function(data){ 8783 bag.classList.remove('is-loading'); 8784 8785 var hasVariants = buildVariantUI(productId, data); 8786 8787 if(hasVariants){ 8788 /* Bedenler var - Åeridi aç */ 8789 toggleStrip(productId); 8790 } else { 8791 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 8792 addToCartSmart(productId); 8793 } 8794 }); 8795 8796 return false; 8797 }; 8798 8799 function toggleStrip(productId){ 8800 var strip = document.getElementById('size-strip-' + productId); 8801 var card = document.getElementById('card-' + productId); 8802 if(!strip) return; 8803 8804 document.querySelectorAll('.size-strip.open').forEach(function(s){ 8805 if(s !== strip) s.classList.remove('open'); 8806 }); 8807 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 8808 if(c !== card) c.classList.remove('sizes-open'); 8809 }); 8810 8811 strip.classList.toggle('open'); 8812 if(card) card.classList.toggle('sizes-open'); 8813 } 8814 8815 8816 /* ============================================ 8817 BEDEN TIKLAMASI 8818 ============================================ */ 8819 window.luxAddVariant = function(ev, elem){ 8820 ev.preventDefault(); 8821 ev.stopPropagation(); 8822 8823 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 8824 8825 var productId = elem.getAttribute('data-urun-id'); 8826 var varyantDeger = elem.getAttribute('data-varyant-deger'); 8827 8828 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8829 if(!holder) return false; 8830 8831 /* Seçilen bedeni ilk select'e yaz */ 8832 var firstSelect = holder.querySelector('select[data-variant="0"]'); 8833 if(firstSelect){ 8834 firstSelect.value = varyantDeger; 8835 if(typeof jQuery !== "undefined"){ 8836 jQuery(firstSelect).val(varyantDeger).trigger('change'); 8837 } 8838 } 8839 8840 /* DiÄer select'lere ilk geçerli deÄeri koy */ 8841 var allSelects = holder.querySelectorAll('select[data-variant]'); 8842 allSelects.forEach(function(sel, idx){ 8843 if(idx === 0) return; 8844 if(sel.value) return; 8845 var options = sel.querySelectorAll('option'); 8846 for(var i = 0; i < options.length; i++){ 8847 if(options[i].value){ 8848 sel.value = options[i].value; 8849 if(typeof jQuery !== "undefined"){ 8850 jQuery(sel).val(options[i].value).trigger('change'); 8851 } 8852 break; 8853 } 8854 } 8855 }); 8856 8857 /* Görsel feedback */ 8858 elem.classList.add('adding'); 8859 var originalText = elem.textContent; 8860 elem.textContent = 'â'; 8861 8862 /* Sepete ekle */ 8863 addToCartSmart(productId, { 8864 checkVariant: true, 8865 variantCount: allSelects.length, 8866 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 8867 }); 8868 8869 setTimeout(function(){ 8870 elem.textContent = originalText; 8871 elem.classList.remove('adding'); 8872 closeAll(); 8873 }, 800); 8874 8875 return false; 8876 }; 8877 8878 8879 /* ============================================ 8880 SEPETE EKLE - Modal killer ile 8881 ============================================ */ 8882 function addToCartSmart(productId, extraOptions){ 8883 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 8884 8885 var options = { 8886 quantity: 1, 8887 hideNativeModal: 'lux-card-' + productId 8888 }; 8889 8890 if(extraOptions){
8891 Object.keys(extraOptions).forEach(function(k){ 8892 options[k] = extraOptions[k]; 8893 }); 8894 } else if(holder){ 8895 var selects = holder.querySelectorAll('select[data-variant]'); 8896 if(selects.length > 0){ 8897 options.checkVariant = true; 8898 options.variantCount = selects.length; 8899 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 8900 } 8901 } 8902 8903 startModalKill(2000); 8904 8905 if(typeof addCart === "function"){ 8906 try { 8907 addCart(productId, 'card', options); 8908 flashSuccess(productId); 8909 } catch(err){ 8910 console.error('Sepete ekleme hatası:', err); 8911 } 8912 } 8913 } 8914 8915})(); 8916</script>
8916</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 8917 data-lux-product-shell="1" 8918 data-lux-page="1"><style> 8919@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 8920 8921/* ===== VEZZA LUX CARD ===== */ 8922.card-product{ 8923 font-family:'Poppins',sans-serif; 8924 background:#fff !important; 8925 position:relative; 8926} 8927.card-product-inner{ 8928 background:transparent !important; 8929 position:relative; 8930} 8931.card-product .c-p-i-link, 8932.card-product a{ 8933 background:transparent !important; 8934} 8935.card-product-inner > div{ 8936 background:transparent !important; 8937} 8938.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 8939 background:transparent !important; 8940} 8941.card-product .card-product-content, 8942.card-product .price-group, 8943.card-product .prices{ 8944 background:transparent !important; 8945} 8946[class*="skeleton"], 8947[class*="placeholder"], 8948[class*="loading"]{ 8949 background:transparent !important; 8950} 8951 8952/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 8953.image-wrapper{ 8954 position:relative; 8955 width:100%; 8956 aspect-ratio:1/1; 8957 overflow:hidden; 8958 background:#fff !important; 8959} 8960 8961.image{ 8962 position:relative; 8963 width:100%; 8964 height:100%; 8965} 8966 8967.image-wrapper img{ 8968 width:100% !important; 8969 height:100% !important; 8970 object-fit:cover !important; 8971 object-position:center center !important; 8972 display:block; 8973 transition:transform .35s ease; 8974} 8975 8976/* ===== DISCOUNT ===== */ 8977.discount{ 8978 position:absolute; 8979 top:12px; 8980 left:12px; 8981 width:28px; 8982 height:48px; 8983 background:#e10b0b; 8984 color:#fff; 8985 font-size:12px; 8986 font-weight:600; 8987 display:flex; 8988 align-items:center; 8989 justify-content:center; 8990 writing-mode:vertical-rl; 8991 transform:rotate(180deg); 8992 letter-spacing:.5px; 8993 z-index:7; 8994} 8995 8996/* ===== FAV ===== */ 8997.lux-fav{ 8998 position:absolute; 8999 top:12px; 9000 right:12px; 9001 z-index:7; 9002} 9003.lux-fav a, 9004.lux-fav button{ 9005 background:transparent !important; 9006 border:0 !important; 9007 padding:0 !important; 9008 cursor:pointer; 9009 display:inline-flex; 9010 align-items:center; 9011 justify-content:center; 9012} 9013 9014/* ===== SEPET IKON ===== */ 9015.lux-bag{ 9016 position:absolute; 9017 bottom:12px; 9018 right:12px; 9019 z-index:7; 9020 width:34px; 9021 height:34px; 9022 display:inline-flex; 9023 align-items:center; 9024 justify-content:center; 9025 background:rgba(255,255,255,.92); 9026 border:1px solid rgba(0,0,0,.10); 9027 border-radius:10px; 9028 cursor:pointer; 9029 transition:.2s ease; 9030} 9031.lux-bag:hover{ 9032 background:#fff; 9033 border-color:rgba(0,0,0,.25); 9034} 9035.lux-bag.is-loading{ 9036 opacity:.6; 9037 cursor:wait; 9038} 9039.lux-bag.is-success{ 9040 background:#2e7d32 !important; 9041 border-color:#2e7d32 !important; 9042 color:#fff !important; 9043} 9044.card-product.sizes-open .lux-bag{ 9045 opacity:0; 9046 pointer-events:none; 9047} 9048 9049/* Loading spinner */ 9050.lux-bag.is-loading i::before{ 9051 content:"â³"; 9052} 9053 9054/* ===== SIZE STRIP ===== */ 9055.size-strip{ 9056 width:100%; 9057 max-height:0; 9058 overflow:hidden; 9059 background:#fff; 9060 display:flex; 9061 flex-wrap:wrap; 9062 transition:max-height .3s ease, border-color .3s ease; 9063 border-top:1px solid transparent; 9064 border-bottom:1px solid transparent; 9065} 9066.size-strip.open{ 9067 max-height:200px; 9068 border-top-color:rgba(0,0,0,.08); 9069 border-bottom-color:rgba(0,0,0,.08); 9070} 9071.size-item{ 9072 flex:1 0 auto; 9073 min-width:38px; 9074 height:42px; 9075 display:flex; 9076 align-items:center; 9077 justify-content:center; 9078 font-size:13px; 9079 font-weight:500; 9080 color:#111 !important; 9081 cursor:pointer; 9082 user-select:none; 9083 background:transparent; 9084 transition:background .15s ease, color .15s ease; 9085 border-right:1px solid rgba(0,0,0,.08); 9086} 9087.size-item:last-child{ border-right:0; } 9088.size-item:hover:not(.disabled):not(.adding){ 9089 background:#000 !important; 9090 color:#fff !important; 9091} 9092.size-item.disabled{ 9093 color:#111 !important; 9094 text-decoration:line-through !important; 9095 opacity:.30 !important; 9096 cursor:not-allowed; 9097} 9098.size-item.adding{ 9099 background:#2e7d32 !important; 9100 color:#fff !important; 9101 cursor:wait; 9102} 9103 9104/* ===== META ===== */ 9105.lux-meta{ 9106 padding:12px 6px 6px; 9107 background:transparent !important; 9108} 9109.lux-brand{ 9110 font-size:16px; 9111 font-weight:600; 9112 color:#111; 9113 margin-bottom:2px; 9114} 9115.lux-title{ 9116 font-size:14px; 9117 font-weight:400; 9118 line-height:1.45; 9119 color:#111; 9120 margin:0; 9121} 9122.lux-price{ 9123 margin-top:10px; 9124 display:flex; 9125 gap:10px; 9126 align-items:baseline; 9127 background:transparent !important; 9128} 9129.lux-price .list-price{ 9130 font-size:14px; 9131 font-weight:400; 9132 color:#111; 9133 text-decoration:line-through; 9134} 9135.lux-price .sale-price{ 9136 font-size:16px; 9137 font-weight:600; 9138 color:#e10b0b; 9139} 9140 9141.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
9142.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 9143</style><div class="card-product" 9144 id="card-10362" 9145 data-lux-card-id="10362" 9146 data-lux-product-link="https://www.vezzalux.com/dior-1058-fuul-gri-erkek-ayakkabi" 9147 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/dior-1058-fuul-gri-erkek-ayakkabi" class="c-p-i-link" title="Dior 1058 Fuul Gri Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cbe91ed08-28165726-sw1200sh1200.webp" alt="Dior 1058 Fuul Gri Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cbe91ed08-28165726-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cbea7f22c-48819948-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" 9148 onclick="userProductFavourite('add', 10362)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 9149 id="lux-bag-10362" 9150 onclick="return luxBagClick(event, 10362);" 9151 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10362" style="display:none;"></div><div class="size-strip" id="size-strip-10362" data-loaded="0"></div><a href="https://www.vezzalux.com/dior-1058-fuul-gri-erkek-ayakkabi" class="c-p-i-link" title="Dior 1058 Fuul Gri Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dior</div><div class="lux-title">Dior 1058 Fuul Gri Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.499,00 TL</div></div></div></a></div></div>
9151<script> 9152(function(){ 9153 9154 /* Bir kez kur */ 9155 if(window.__luxCardInit) return; 9156 window.__luxCardInit = true; 9157 9158 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 9159 window.__luxVariantCache = window.__luxVariantCache || {}; 9160 9161 function closeAll(){ 9162 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9163 s.classList.remove('open'); 9164 }); 9165 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9166 c.classList.remove('sizes-open'); 9167 }); 9168 } 9169 9170 function flashSuccess(productId){ 9171 var bag = document.getElementById('lux-bag-' + productId); 9172 if(!bag) return; 9173 bag.classList.add('is-success'); 9174 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 9175 } 9176 9177 /* DıŠtıklama - kapat */ 9178 document.addEventListener('click', function(e){ 9179 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 9180 if(!inside) closeAll(); 9181 }); 9182 9183 document.addEventListener('keydown', function(e){ 9184 if(e.key === 'Escape') closeAll(); 9185 }); 9186 9187 9188 /* ============================================ 9189 MODAL KILLER - yedek güvence 9190 ============================================ */ 9191 var LUX_MODAL_KILL_ACTIVE = false; 9192 9193 function killVisibleModals(){ 9194 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 9195 modals.forEach(function(m){ 9196 var id = (m.id || '').toLowerCase(); 9197 var txt = (m.textContent || '').toLowerCase(); 9198 var isCartModal = id.indexOf('cart') > -1 9199 || id.indexOf('variant') > -1 9200 || id.indexOf('fast') > -1 9201 || id.indexOf('urun') > -1 9202 || txt.indexOf('lütfen seçin') > -1; 9203 9204 if(isCartModal){ 9205 if(typeof jQuery !== 'undefined'){ 9206 try { jQuery(m).modal('hide'); } catch(e){} 9207 } 9208 m.classList.remove('show','in'); 9209 m.style.display = 'none'; 9210 } 9211 }); 9212 9213 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 9214 document.body.classList.remove('modal-open'); 9215 document.body.style.overflow = ''; 9216 document.body.style.paddingRight = ''; 9217 } 9218 9219 function startModalKill(durationMs){ 9220 if(LUX_MODAL_KILL_ACTIVE) return; 9221 LUX_MODAL_KILL_ACTIVE = true; 9222 killVisibleModals(); 9223 var interval = setInterval(killVisibleModals, 50); 9224 setTimeout(function(){ 9225 clearInterval(interval); 9226 LUX_MODAL_KILL_ACTIVE = false; 9227 }, durationMs || 2000); 9228 } 9229 9230 9231 /* ============================================ 9232 AJAX: Varyantları detay sayfasından çek 9233 ============================================ 9234 Ãrün detay sayfasının tam HTML'ini indir, 9235 DOMParser ile parse et, varyantları bul 9236 ============================================ */ 9237 function fetchVariants(productId, productLink, callback){ 9238 9239 /* Cache'te varsa hemen döndür */ 9240 if(window.__luxVariantCache[productId]){ 9241 callback(window.__luxVariantCache[productId]); 9242 return; 9243 } 9244 9245 fetch(productLink, { 9246 method: 'GET', 9247 credentials: 'same-origin', 9248 headers: { 'Accept': 'text/html' } 9249 }) 9250 .then(function(r){ return r.text(); }) 9251 .then(function(html){ 9252 var parser = new DOMParser(); 9253 var doc = parser.parseFromString(html, 'text/html'); 9254 9255 /* Detay sayfasındaki .variant-box'ı bul */ 9256 var variantBox = doc.querySelector('.variant-box'); 9257 if(!variantBox){ 9258 callback({ variants: [], error: 'no_variant_box' }); 9259 return; 9260 } 9261 9262 /* Her varyant grubu için select'leri ve option'ları oku */ 9263 var variants = []; 9264 var variantLis = variantBox.querySelectorAll('.variant'); 9265 9266 variantLis.forEach(function(li, idx){ 9267 var nameEl = li.querySelector('.name'); 9268 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 9269 9270 var values = []; 9271 9272 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 9273 var optLinks = li.querySelectorAll('.options a'); 9274 9275 if(optLinks.length > 0){ 9276 optLinks.forEach(function(a){ 9277 /* Beden/renk deÄerini doÄru attribute'tan oku
9278 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 9279 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 9280 - textContent: fallback */ 9281 var deger = a.getAttribute('data-variant-value') 9282 || a.textContent.trim(); 9283 9284 /* Stok kontrolü - birden fazla yoldan kontrol et */ 9285 var isSoldOut = a.classList.contains('sold-out') 9286 || a.classList.contains('sold_out') 9287 || a.classList.contains('disabled') 9288 || a.classList.contains('stoksuz') 9289 || a.classList.contains('out-of-stock') 9290 || a.hasAttribute('disabled') 9291 || a.getAttribute('data-in-stock') === '0' 9292 || a.getAttribute('data-in-stock') === 'false' 9293 || a.getAttribute('data-stokta-var-mi') === '0' 9294 || a.getAttribute('data-stokta-var-mi') === 'false'; 9295 9296 values.push({ 9297 deger: deger, 9298 inStock: !isSoldOut 9299 }); 9300 }); 9301 } else { 9302 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 9303 var select = li.querySelector('select'); 9304 if(select){ 9305 var opts = select.querySelectorAll('option'); 9306 opts.forEach(function(o){ 9307 if(!o.value) return; 9308 values.push({ 9309 deger: o.value, 9310 inStock: !o.disabled 9311 }); 9312 }); 9313 } 9314 } 9315 9316 variants.push({ 9317 index: idx, 9318 baslik: name, 9319 values: values 9320 }); 9321 }); 9322 9323 var result = { variants: variants }; 9324 window.__luxVariantCache[productId] = result; 9325 callback(result); 9326 }) 9327 .catch(function(err){ 9328 console.error('Varyant çekme hatası:', err); 9329 callback({ variants: [], error: 'fetch_failed' }); 9330 }); 9331 } 9332 9333 9334 /* ============================================ 9335 Beden Åeridini ve gizli variant-box'ı oluÅtur 9336 ============================================ */ 9337 function buildVariantUI(productId, data){ 9338 var card = document.getElementById('card-' + productId); 9339 if(!card) return false; 9340 9341 var holder = card.querySelector('.lux-variant-box'); 9342 var strip = document.getElementById('size-strip-' + productId); 9343 if(!holder || !strip) return false; 9344 9345 if(!data.variants || data.variants.length === 0){ 9346 /* Varyant yok */ 9347 return false; 9348 } 9349 9350 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 9351 var displayVariant = null;
9352 data.variants.forEach(function(v){ 9353 if(!displayVariant && v.values.length > 1){ 9354 displayVariant = v; 9355 } 9356 }); 9357 9358 /* Gizli variant-box HTML */ 9359 var html = '<div class="variant-box"><ul>'; 9360 data.variants.forEach(function(v){ 9361 html += '<li class="variant">'; 9362 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 9363 9364 if(v.values.length > 1){ 9365 html += '<option value="">Lütfen seçin</option>'; 9366 } 9367 9368 v.values.forEach(function(val, i){ 9369 var selected = (v.values.length === 1) ? ' selected' : ''; 9370 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 9371 }); 9372 9373 html += '</select></li>'; 9374 }); 9375 html += '</ul></div>'; 9376 9377 holder.innerHTML = html; 9378 holder.style.display = ''; 9379 9380 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 9381 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 9382 if(displayVariant){ 9383 var stripHtml = ''; 9384 var inStockCount = 0; 9385 9386 /* DEBUG - console'da gör */ 9387 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 9388 9389 displayVariant.values.forEach(function(val){ 9390 /* SADECE stokta olanları ekle */ 9391 if(val.inStock === true){ 9392 stripHtml += '<div class="size-item" ' 9393 + 'data-urun-id="' + productId + '" ' 9394 + 'data-varyant-deger="' + val.deger + '" ' 9395 + 'onclick="return luxAddVariant(event, this);">' 9396 + val.deger + '</div>'; 9397 inStockCount++; 9398 } 9399 }); 9400 9401 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 9402 if(inStockCount === 0){ 9403 strip.setAttribute('data-loaded', '1'); 9404 strip.setAttribute('data-has-variants', '0'); 9405 return false; 9406 } 9407
9408 strip.innerHTML = stripHtml; 9409 strip.setAttribute('data-loaded', '1'); 9410 strip.setAttribute('data-has-variants', '1'); 9411 return true; 9412 } else { 9413 strip.setAttribute('data-loaded', '1'); 9414 strip.setAttribute('data-has-variants', '0'); 9415 return false; 9416 } 9417 } 9418 9419 9420 /* ============================================ 9421 SEPET IKONU TIKLAMASI 9422 ============================================ */ 9423 window.luxBagClick = function(ev, productId){ 9424 ev.preventDefault(); 9425 ev.stopPropagation(); 9426 9427 var card = document.getElementById('card-' + productId); 9428 var strip = document.getElementById('size-strip-' + productId); 9429 var bag = document.getElementById('lux-bag-' + productId); 9430 if(!card || !strip) return false; 9431 9432 /* Strip zaten yüklenmiÅse direkt davran */ 9433 if(strip.getAttribute('data-loaded') === '1'){ 9434 if(strip.getAttribute('data-has-variants') === '1'){ 9435 toggleStrip(productId); 9436 } else { 9437 addToCartSmart(productId); 9438 } 9439 return false; 9440 } 9441 9442 /* İlk tıklama - AJAX ile varyantları çek */ 9443 bag.classList.add('is-loading'); 9444 var productLink = card.getAttribute('data-lux-product-link'); 9445 9446 fetchVariants(productId, productLink, function(data){ 9447 bag.classList.remove('is-loading'); 9448 9449 var hasVariants = buildVariantUI(productId, data); 9450 9451 if(hasVariants){ 9452 /* Bedenler var - Åeridi aç */ 9453 toggleStrip(productId); 9454 } else { 9455 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 9456 addToCartSmart(productId); 9457 } 9458 }); 9459 9460 return false; 9461 }; 9462 9463 function toggleStrip(productId){ 9464 var strip = document.getElementById('size-strip-' + productId); 9465 var card = document.getElementById('card-' + productId); 9466 if(!strip) return; 9467 9468 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9469 if(s !== strip) s.classList.remove('open'); 9470 }); 9471 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9472 if(c !== card) c.classList.remove('sizes-open'); 9473 }); 9474 9475 strip.classList.toggle('open'); 9476 if(card) card.classList.toggle('sizes-open'); 9477 } 9478 9479 9480 /* ============================================ 9481 BEDEN TIKLAMASI 9482 ============================================ */ 9483 window.luxAddVariant = function(ev, elem){ 9484 ev.preventDefault(); 9485 ev.stopPropagation(); 9486 9487 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 9488 9489 var productId = elem.getAttribute('data-urun-id'); 9490 var varyantDeger = elem.getAttribute('data-varyant-deger'); 9491 9492 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 9493 if(!holder) return false; 9494 9495 /* Seçilen bedeni ilk select'e yaz */ 9496 var firstSelect = holder.querySelector('select[data-variant="0"]'); 9497 if(firstSelect){ 9498 firstSelect.value = varyantDeger; 9499 if(typeof jQuery !== "undefined"){ 9500 jQuery(firstSelect).val(varyantDeger).trigger('change'); 9501 } 9502 } 9503 9504 /* DiÄer select'lere ilk geçerli deÄeri koy */ 9505 var allSelects = holder.querySelectorAll('select[data-variant]'); 9506 allSelects.forEach(function(sel, idx){ 9507 if(idx === 0) return; 9508 if(sel.value) return; 9509 var options = sel.querySelectorAll('option'); 9510 for(var i = 0; i < options.length; i++){ 9511 if(options[i].value){ 9512 sel.value = options[i].value; 9513 if(typeof jQuery !== "undefined"){ 9514 jQuery(sel).val(options[i].value).trigger('change'); 9515 } 9516 break; 9517 } 9518 } 9519 }); 9520 9521 /* Görsel feedback */ 9522 elem.classList.add('adding'); 9523 var originalText = elem.textContent; 9524 elem.textContent = 'â'; 9525 9526 /* Sepete ekle */ 9527 addToCartSmart(productId, { 9528 checkVariant: true, 9529 variantCount: allSelects.length, 9530 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 9531 }); 9532 9533 setTimeout(function(){ 9534 elem.textContent = originalText; 9535 elem.classList.remove('adding'); 9536 closeAll(); 9537 }, 800); 9538 9539 return false; 9540 }; 9541 9542 9543 /* ============================================ 9544 SEPETE EKLE - Modal killer ile 9545 ============================================ */ 9546 function addToCartSmart(productId, extraOptions){ 9547 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 9548 9549 var options = { 9550 quantity: 1, 9551 hideNativeModal: 'lux-card-' + productId 9552 }; 9553 9554 if(extraOptions){
9555 Object.keys(extraOptions).forEach(function(k){ 9556 options[k] = extraOptions[k]; 9557 }); 9558 } else if(holder){ 9559 var selects = holder.querySelectorAll('select[data-variant]'); 9560 if(selects.length > 0){ 9561 options.checkVariant = true; 9562 options.variantCount = selects.length; 9563 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 9564 } 9565 } 9566 9567 startModalKill(2000); 9568 9569 if(typeof addCart === "function"){ 9570 try { 9571 addCart(productId, 'card', options); 9572 flashSuccess(productId); 9573 } catch(err){ 9574 console.error('Sepete ekleme hatası:', err); 9575 } 9576 } 9577 } 9578 9579})(); 9580</script>
9580</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 9581 data-lux-product-shell="1" 9582 data-lux-page="1"><style> 9583@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 9584 9585/* ===== VEZZA LUX CARD ===== */ 9586.card-product{ 9587 font-family:'Poppins',sans-serif; 9588 background:#fff !important; 9589 position:relative; 9590} 9591.card-product-inner{ 9592 background:transparent !important; 9593 position:relative; 9594} 9595.card-product .c-p-i-link, 9596.card-product a{ 9597 background:transparent !important; 9598} 9599.card-product-inner > div{ 9600 background:transparent !important; 9601} 9602.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 9603 background:transparent !important; 9604} 9605.card-product .card-product-content, 9606.card-product .price-group, 9607.card-product .prices{ 9608 background:transparent !important; 9609} 9610[class*="skeleton"], 9611[class*="placeholder"], 9612[class*="loading"]{ 9613 background:transparent !important; 9614} 9615 9616/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 9617.image-wrapper{ 9618 position:relative; 9619 width:100%; 9620 aspect-ratio:1/1; 9621 overflow:hidden; 9622 background:#fff !important; 9623} 9624 9625.image{ 9626 position:relative; 9627 width:100%; 9628 height:100%; 9629} 9630 9631.image-wrapper img{ 9632 width:100% !important; 9633 height:100% !important; 9634 object-fit:cover !important; 9635 object-position:center center !important; 9636 display:block; 9637 transition:transform .35s ease; 9638} 9639 9640/* ===== DISCOUNT ===== */ 9641.discount{ 9642 position:absolute; 9643 top:12px; 9644 left:12px; 9645 width:28px; 9646 height:48px; 9647 background:#e10b0b; 9648 color:#fff; 9649 font-size:12px; 9650 font-weight:600; 9651 display:flex; 9652 align-items:center; 9653 justify-content:center; 9654 writing-mode:vertical-rl; 9655 transform:rotate(180deg); 9656 letter-spacing:.5px; 9657 z-index:7; 9658} 9659 9660/* ===== FAV ===== */ 9661.lux-fav{ 9662 position:absolute; 9663 top:12px; 9664 right:12px; 9665 z-index:7; 9666} 9667.lux-fav a, 9668.lux-fav button{ 9669 background:transparent !important; 9670 border:0 !important; 9671 padding:0 !important; 9672 cursor:pointer; 9673 display:inline-flex; 9674 align-items:center; 9675 justify-content:center; 9676} 9677 9678/* ===== SEPET IKON ===== */ 9679.lux-bag{ 9680 position:absolute; 9681 bottom:12px; 9682 right:12px; 9683 z-index:7; 9684 width:34px; 9685 height:34px; 9686 display:inline-flex; 9687 align-items:center; 9688 justify-content:center; 9689 background:rgba(255,255,255,.92); 9690 border:1px solid rgba(0,0,0,.10); 9691 border-radius:10px; 9692 cursor:pointer; 9693 transition:.2s ease; 9694} 9695.lux-bag:hover{ 9696 background:#fff; 9697 border-color:rgba(0,0,0,.25); 9698} 9699.lux-bag.is-loading{ 9700 opacity:.6; 9701 cursor:wait; 9702} 9703.lux-bag.is-success{ 9704 background:#2e7d32 !important; 9705 border-color:#2e7d32 !important; 9706 color:#fff !important; 9707} 9708.card-product.sizes-open .lux-bag{ 9709 opacity:0; 9710 pointer-events:none; 9711} 9712 9713/* Loading spinner */ 9714.lux-bag.is-loading i::before{ 9715 content:"â³"; 9716} 9717 9718/* ===== SIZE STRIP ===== */ 9719.size-strip{ 9720 width:100%; 9721 max-height:0; 9722 overflow:hidden; 9723 background:#fff; 9724 display:flex; 9725 flex-wrap:wrap; 9726 transition:max-height .3s ease, border-color .3s ease; 9727 border-top:1px solid transparent; 9728 border-bottom:1px solid transparent; 9729} 9730.size-strip.open{ 9731 max-height:200px; 9732 border-top-color:rgba(0,0,0,.08); 9733 border-bottom-color:rgba(0,0,0,.08); 9734} 9735.size-item{ 9736 flex:1 0 auto; 9737 min-width:38px; 9738 height:42px; 9739 display:flex; 9740 align-items:center; 9741 justify-content:center; 9742 font-size:13px; 9743 font-weight:500; 9744 color:#111 !important; 9745 cursor:pointer; 9746 user-select:none; 9747 background:transparent; 9748 transition:background .15s ease, color .15s ease; 9749 border-right:1px solid rgba(0,0,0,.08); 9750} 9751.size-item:last-child{ border-right:0; } 9752.size-item:hover:not(.disabled):not(.adding){ 9753 background:#000 !important; 9754 color:#fff !important; 9755} 9756.size-item.disabled{ 9757 color:#111 !important; 9758 text-decoration:line-through !important; 9759 opacity:.30 !important; 9760 cursor:not-allowed; 9761} 9762.size-item.adding{ 9763 background:#2e7d32 !important; 9764 color:#fff !important; 9765 cursor:wait; 9766} 9767 9768/* ===== META ===== */ 9769.lux-meta{ 9770 padding:12px 6px 6px; 9771 background:transparent !important; 9772} 9773.lux-brand{ 9774 font-size:16px; 9775 font-weight:600; 9776 color:#111; 9777 margin-bottom:2px; 9778} 9779.lux-title{ 9780 font-size:14px; 9781 font-weight:400; 9782 line-height:1.45; 9783 color:#111; 9784 margin:0; 9785} 9786.lux-price{ 9787 margin-top:10px; 9788 display:flex; 9789 gap:10px; 9790 align-items:baseline; 9791 background:transparent !important; 9792} 9793.lux-price .list-price{ 9794 font-size:14px; 9795 font-weight:400; 9796 color:#111; 9797 text-decoration:line-through; 9798} 9799.lux-price .sale-price{ 9800 font-size:16px; 9801 font-weight:600; 9802 color:#e10b0b; 9803} 9804 9805.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
9806.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 9807</style><div class="card-product" 9808 id="card-10243" 9809 data-lux-card-id="10243" 9810 data-lux-product-link="https://www.vezzalux.com/dg-902-beyaz-arkasi-gold-erkek-ayakkabi" 9811 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/dg-902-beyaz-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Dg 902 Beyaz Arkası Gold Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8f5455f6-17315895-sw1200sh1200.webp" alt="Dg 902 Beyaz Arkası Gold Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8f5455f6-17315895-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c8f684b01-14901638-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" 9812 onclick="userProductFavourite('add', 10243)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 9813 id="lux-bag-10243" 9814 onclick="return luxBagClick(event, 10243);" 9815 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10243" style="display:none;"></div><div class="size-strip" id="size-strip-10243" data-loaded="0"></div><a href="https://www.vezzalux.com/dg-902-beyaz-arkasi-gold-erkek-ayakkabi" class="c-p-i-link" title="Dg 902 Beyaz Arkası Gold Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dolce Gabbana</div><div class="lux-title">Dg 902 Beyaz Arkası Gold Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
9815<script> 9816(function(){ 9817 9818 /* Bir kez kur */ 9819 if(window.__luxCardInit) return; 9820 window.__luxCardInit = true; 9821 9822 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 9823 window.__luxVariantCache = window.__luxVariantCache || {}; 9824 9825 function closeAll(){ 9826 document.querySelectorAll('.size-strip.open').forEach(function(s){ 9827 s.classList.remove('open'); 9828 }); 9829 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 9830 c.classList.remove('sizes-open'); 9831 }); 9832 } 9833 9834 function flashSuccess(productId){ 9835 var bag = document.getElementById('lux-bag-' + productId); 9836 if(!bag) return; 9837 bag.classList.add('is-success'); 9838 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 9839 } 9840 9841 /* DıŠtıklama - kapat */ 9842 document.addEventListener('click', function(e){ 9843 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 9844 if(!inside) closeAll(); 9845 }); 9846 9847 document.addEventListener('keydown', function(e){ 9848 if(e.key === 'Escape') closeAll(); 9849 }); 9850 9851 9852 /* ============================================ 9853 MODAL KILLER - yedek güvence 9854 ============================================ */ 9855 var LUX_MODAL_KILL_ACTIVE = false; 9856 9857 function killVisibleModals(){ 9858 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 9859 modals.forEach(function(m){ 9860 var id = (m.id || '').toLowerCase(); 9861 var txt = (m.textContent || '').toLowerCase(); 9862 var isCartModal = id.indexOf('cart') > -1 9863 || id.indexOf('variant') > -1 9864 || id.indexOf('fast') > -1 9865 || id.indexOf('urun') > -1 9866 || txt.indexOf('lütfen seçin') > -1; 9867 9868 if(isCartModal){ 9869 if(typeof jQuery !== 'undefined'){ 9870 try { jQuery(m).modal('hide'); } catch(e){} 9871 } 9872 m.classList.remove('show','in'); 9873 m.style.display = 'none'; 9874 } 9875 }); 9876 9877 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 9878 document.body.classList.remove('modal-open'); 9879 document.body.style.overflow = ''; 9880 document.body.style.paddingRight = ''; 9881 } 9882 9883 function startModalKill(durationMs){ 9884 if(LUX_MODAL_KILL_ACTIVE) return; 9885 LUX_MODAL_KILL_ACTIVE = true; 9886 killVisibleModals(); 9887 var interval = setInterval(killVisibleModals, 50); 9888 setTimeout(function(){ 9889 clearInterval(interval); 9890 LUX_MODAL_KILL_ACTIVE = false; 9891 }, durationMs || 2000); 9892 } 9893 9894 9895 /* ============================================ 9896 AJAX: Varyantları detay sayfasından çek 9897 ============================================ 9898 Ãrün detay sayfasının tam HTML'ini indir, 9899 DOMParser ile parse et, varyantları bul 9900 ============================================ */ 9901 function fetchVariants(productId, productLink, callback){ 9902 9903 /* Cache'te varsa hemen döndür */ 9904 if(window.__luxVariantCache[productId]){ 9905 callback(window.__luxVariantCache[productId]); 9906 return; 9907 } 9908 9909 fetch(productLink, { 9910 method: 'GET', 9911 credentials: 'same-origin', 9912 headers: { 'Accept': 'text/html' } 9913 }) 9914 .then(function(r){ return r.text(); }) 9915 .then(function(html){ 9916 var parser = new DOMParser(); 9917 var doc = parser.parseFromString(html, 'text/html'); 9918 9919 /* Detay sayfasındaki .variant-box'ı bul */ 9920 var variantBox = doc.querySelector('.variant-box'); 9921 if(!variantBox){ 9922 callback({ variants: [], error: 'no_variant_box' }); 9923 return; 9924 } 9925 9926 /* Her varyant grubu için select'leri ve option'ları oku */ 9927 var variants = []; 9928 var variantLis = variantBox.querySelectorAll('.variant'); 9929 9930 variantLis.forEach(function(li, idx){ 9931 var nameEl = li.querySelector('.name'); 9932 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 9933 9934 var values = []; 9935 9936 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 9937 var optLinks = li.querySelectorAll('.options a'); 9938 9939 if(optLinks.length > 0){ 9940 optLinks.forEach(function(a){ 9941 /* Beden/renk deÄerini doÄru attribute'tan oku
9942 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 9943 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 9944 - textContent: fallback */ 9945 var deger = a.getAttribute('data-variant-value') 9946 || a.textContent.trim(); 9947 9948 /* Stok kontrolü - birden fazla yoldan kontrol et */ 9949 var isSoldOut = a.classList.contains('sold-out') 9950 || a.classList.contains('sold_out') 9951 || a.classList.contains('disabled') 9952 || a.classList.contains('stoksuz') 9953 || a.classList.contains('out-of-stock') 9954 || a.hasAttribute('disabled') 9955 || a.getAttribute('data-in-stock') === '0' 9956 || a.getAttribute('data-in-stock') === 'false' 9957 || a.getAttribute('data-stokta-var-mi') === '0' 9958 || a.getAttribute('data-stokta-var-mi') === 'false'; 9959 9960 values.push({ 9961 deger: deger, 9962 inStock: !isSoldOut 9963 }); 9964 }); 9965 } else { 9966 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 9967 var select = li.querySelector('select'); 9968 if(select){ 9969 var opts = select.querySelectorAll('option'); 9970 opts.forEach(function(o){ 9971 if(!o.value) return; 9972 values.push({ 9973 deger: o.value, 9974 inStock: !o.disabled 9975 }); 9976 }); 9977 } 9978 } 9979 9980 variants.push({ 9981 index: idx, 9982 baslik: name, 9983 values: values 9984 }); 9985 }); 9986 9987 var result = { variants: variants }; 9988 window.__luxVariantCache[productId] = result; 9989 callback(result); 9990 }) 9991 .catch(function(err){ 9992 console.error('Varyant çekme hatası:', err); 9993 callback({ variants: [], error: 'fetch_failed' }); 9994 }); 9995 } 9996 9997 9998 /* ============================================ 9999 Beden Åeridini ve gizli variant-box'ı oluÅtur 10000 ============================================ */ 10001 function buildVariantUI(productId, data){ 10002 var card = document.getElementById('card-' + productId); 10003 if(!card) return false; 10004 10005 var holder = card.querySelector('.lux-variant-box'); 10006 var strip = document.getElementById('size-strip-' + productId); 10007 if(!holder || !strip) return false; 10008 10009 if(!data.variants || data.variants.length === 0){ 10010 /* Varyant yok */ 10011 return false; 10012 } 10013 10014 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 10015 var displayVariant = null;
10016 data.variants.forEach(function(v){ 10017 if(!displayVariant && v.values.length > 1){ 10018 displayVariant = v; 10019 } 10020 }); 10021 10022 /* Gizli variant-box HTML */ 10023 var html = '<div class="variant-box"><ul>'; 10024 data.variants.forEach(function(v){ 10025 html += '<li class="variant">'; 10026 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 10027 10028 if(v.values.length > 1){ 10029 html += '<option value="">Lütfen seçin</option>'; 10030 } 10031 10032 v.values.forEach(function(val, i){ 10033 var selected = (v.values.length === 1) ? ' selected' : ''; 10034 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 10035 }); 10036 10037 html += '</select></li>'; 10038 }); 10039 html += '</ul></div>'; 10040 10041 holder.innerHTML = html; 10042 holder.style.display = ''; 10043 10044 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 10045 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 10046 if(displayVariant){ 10047 var stripHtml = ''; 10048 var inStockCount = 0; 10049 10050 /* DEBUG - console'da gör */ 10051 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 10052 10053 displayVariant.values.forEach(function(val){ 10054 /* SADECE stokta olanları ekle */ 10055 if(val.inStock === true){ 10056 stripHtml += '<div class="size-item" ' 10057 + 'data-urun-id="' + productId + '" ' 10058 + 'data-varyant-deger="' + val.deger + '" ' 10059 + 'onclick="return luxAddVariant(event, this);">' 10060 + val.deger + '</div>'; 10061 inStockCount++; 10062 } 10063 }); 10064 10065 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 10066 if(inStockCount === 0){ 10067 strip.setAttribute('data-loaded', '1'); 10068 strip.setAttribute('data-has-variants', '0'); 10069 return false; 10070 } 10071
10072 strip.innerHTML = stripHtml; 10073 strip.setAttribute('data-loaded', '1'); 10074 strip.setAttribute('data-has-variants', '1'); 10075 return true; 10076 } else { 10077 strip.setAttribute('data-loaded', '1'); 10078 strip.setAttribute('data-has-variants', '0'); 10079 return false; 10080 } 10081 } 10082 10083 10084 /* ============================================ 10085 SEPET IKONU TIKLAMASI 10086 ============================================ */ 10087 window.luxBagClick = function(ev, productId){ 10088 ev.preventDefault(); 10089 ev.stopPropagation(); 10090 10091 var card = document.getElementById('card-' + productId); 10092 var strip = document.getElementById('size-strip-' + productId); 10093 var bag = document.getElementById('lux-bag-' + productId); 10094 if(!card || !strip) return false; 10095 10096 /* Strip zaten yüklenmiÅse direkt davran */ 10097 if(strip.getAttribute('data-loaded') === '1'){ 10098 if(strip.getAttribute('data-has-variants') === '1'){ 10099 toggleStrip(productId); 10100 } else { 10101 addToCartSmart(productId); 10102 } 10103 return false; 10104 } 10105 10106 /* İlk tıklama - AJAX ile varyantları çek */ 10107 bag.classList.add('is-loading'); 10108 var productLink = card.getAttribute('data-lux-product-link'); 10109 10110 fetchVariants(productId, productLink, function(data){ 10111 bag.classList.remove('is-loading'); 10112 10113 var hasVariants = buildVariantUI(productId, data); 10114 10115 if(hasVariants){ 10116 /* Bedenler var - Åeridi aç */ 10117 toggleStrip(productId); 10118 } else { 10119 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 10120 addToCartSmart(productId); 10121 } 10122 }); 10123 10124 return false; 10125 }; 10126 10127 function toggleStrip(productId){ 10128 var strip = document.getElementById('size-strip-' + productId); 10129 var card = document.getElementById('card-' + productId); 10130 if(!strip) return; 10131 10132 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10133 if(s !== strip) s.classList.remove('open'); 10134 }); 10135 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10136 if(c !== card) c.classList.remove('sizes-open'); 10137 }); 10138 10139 strip.classList.toggle('open'); 10140 if(card) card.classList.toggle('sizes-open'); 10141 } 10142 10143 10144 /* ============================================ 10145 BEDEN TIKLAMASI 10146 ============================================ */ 10147 window.luxAddVariant = function(ev, elem){ 10148 ev.preventDefault(); 10149 ev.stopPropagation(); 10150 10151 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 10152 10153 var productId = elem.getAttribute('data-urun-id'); 10154 var varyantDeger = elem.getAttribute('data-varyant-deger'); 10155 10156 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10157 if(!holder) return false; 10158 10159 /* Seçilen bedeni ilk select'e yaz */ 10160 var firstSelect = holder.querySelector('select[data-variant="0"]'); 10161 if(firstSelect){ 10162 firstSelect.value = varyantDeger; 10163 if(typeof jQuery !== "undefined"){ 10164 jQuery(firstSelect).val(varyantDeger).trigger('change'); 10165 } 10166 } 10167 10168 /* DiÄer select'lere ilk geçerli deÄeri koy */ 10169 var allSelects = holder.querySelectorAll('select[data-variant]'); 10170 allSelects.forEach(function(sel, idx){ 10171 if(idx === 0) return; 10172 if(sel.value) return; 10173 var options = sel.querySelectorAll('option'); 10174 for(var i = 0; i < options.length; i++){ 10175 if(options[i].value){ 10176 sel.value = options[i].value; 10177 if(typeof jQuery !== "undefined"){ 10178 jQuery(sel).val(options[i].value).trigger('change'); 10179 } 10180 break; 10181 } 10182 } 10183 }); 10184 10185 /* Görsel feedback */ 10186 elem.classList.add('adding'); 10187 var originalText = elem.textContent; 10188 elem.textContent = 'â'; 10189 10190 /* Sepete ekle */ 10191 addToCartSmart(productId, { 10192 checkVariant: true, 10193 variantCount: allSelects.length, 10194 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 10195 }); 10196 10197 setTimeout(function(){ 10198 elem.textContent = originalText; 10199 elem.classList.remove('adding'); 10200 closeAll(); 10201 }, 800); 10202 10203 return false; 10204 }; 10205 10206 10207 /* ============================================ 10208 SEPETE EKLE - Modal killer ile 10209 ============================================ */ 10210 function addToCartSmart(productId, extraOptions){ 10211 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10212 10213 var options = { 10214 quantity: 1, 10215 hideNativeModal: 'lux-card-' + productId 10216 }; 10217 10218 if(extraOptions){
10219 Object.keys(extraOptions).forEach(function(k){ 10220 options[k] = extraOptions[k]; 10221 }); 10222 } else if(holder){ 10223 var selects = holder.querySelectorAll('select[data-variant]'); 10224 if(selects.length > 0){ 10225 options.checkVariant = true; 10226 options.variantCount = selects.length; 10227 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 10228 } 10229 } 10230 10231 startModalKill(2000); 10232 10233 if(typeof addCart === "function"){ 10234 try { 10235 addCart(productId, 'card', options); 10236 flashSuccess(productId); 10237 } catch(err){ 10238 console.error('Sepete ekleme hatası:', err); 10239 } 10240 } 10241 } 10242 10243})(); 10244</script>
10244</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 10245 data-lux-product-shell="1" 10246 data-lux-page="1"><style> 10247@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 10248 10249/* ===== VEZZA LUX CARD ===== */ 10250.card-product{ 10251 font-family:'Poppins',sans-serif; 10252 background:#fff !important; 10253 position:relative; 10254} 10255.card-product-inner{ 10256 background:transparent !important; 10257 position:relative; 10258} 10259.card-product .c-p-i-link, 10260.card-product a{ 10261 background:transparent !important; 10262} 10263.card-product-inner > div{ 10264 background:transparent !important; 10265} 10266.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 10267 background:transparent !important; 10268} 10269.card-product .card-product-content, 10270.card-product .price-group, 10271.card-product .prices{ 10272 background:transparent !important; 10273} 10274[class*="skeleton"], 10275[class*="placeholder"], 10276[class*="loading"]{ 10277 background:transparent !important; 10278} 10279 10280/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 10281.image-wrapper{ 10282 position:relative; 10283 width:100%; 10284 aspect-ratio:1/1; 10285 overflow:hidden; 10286 background:#fff !important; 10287} 10288 10289.image{ 10290 position:relative; 10291 width:100%; 10292 height:100%; 10293} 10294 10295.image-wrapper img{ 10296 width:100% !important; 10297 height:100% !important; 10298 object-fit:cover !important; 10299 object-position:center center !important; 10300 display:block; 10301 transition:transform .35s ease; 10302} 10303 10304/* ===== DISCOUNT ===== */ 10305.discount{ 10306 position:absolute; 10307 top:12px; 10308 left:12px; 10309 width:28px; 10310 height:48px; 10311 background:#e10b0b; 10312 color:#fff; 10313 font-size:12px; 10314 font-weight:600; 10315 display:flex; 10316 align-items:center; 10317 justify-content:center; 10318 writing-mode:vertical-rl; 10319 transform:rotate(180deg); 10320 letter-spacing:.5px; 10321 z-index:7; 10322} 10323 10324/* ===== FAV ===== */ 10325.lux-fav{ 10326 position:absolute; 10327 top:12px; 10328 right:12px; 10329 z-index:7; 10330} 10331.lux-fav a, 10332.lux-fav button{ 10333 background:transparent !important; 10334 border:0 !important; 10335 padding:0 !important; 10336 cursor:pointer; 10337 display:inline-flex; 10338 align-items:center; 10339 justify-content:center; 10340} 10341 10342/* ===== SEPET IKON ===== */ 10343.lux-bag{ 10344 position:absolute; 10345 bottom:12px; 10346 right:12px; 10347 z-index:7; 10348 width:34px; 10349 height:34px; 10350 display:inline-flex; 10351 align-items:center; 10352 justify-content:center; 10353 background:rgba(255,255,255,.92); 10354 border:1px solid rgba(0,0,0,.10); 10355 border-radius:10px; 10356 cursor:pointer; 10357 transition:.2s ease; 10358} 10359.lux-bag:hover{ 10360 background:#fff; 10361 border-color:rgba(0,0,0,.25); 10362} 10363.lux-bag.is-loading{ 10364 opacity:.6; 10365 cursor:wait; 10366} 10367.lux-bag.is-success{ 10368 background:#2e7d32 !important; 10369 border-color:#2e7d32 !important; 10370 color:#fff !important; 10371} 10372.card-product.sizes-open .lux-bag{ 10373 opacity:0; 10374 pointer-events:none; 10375} 10376 10377/* Loading spinner */ 10378.lux-bag.is-loading i::before{ 10379 content:"â³"; 10380} 10381 10382/* ===== SIZE STRIP ===== */ 10383.size-strip{ 10384 width:100%; 10385 max-height:0; 10386 overflow:hidden; 10387 background:#fff; 10388 display:flex; 10389 flex-wrap:wrap; 10390 transition:max-height .3s ease, border-color .3s ease; 10391 border-top:1px solid transparent; 10392 border-bottom:1px solid transparent; 10393} 10394.size-strip.open{ 10395 max-height:200px; 10396 border-top-color:rgba(0,0,0,.08); 10397 border-bottom-color:rgba(0,0,0,.08); 10398} 10399.size-item{ 10400 flex:1 0 auto; 10401 min-width:38px; 10402 height:42px; 10403 display:flex; 10404 align-items:center; 10405 justify-content:center; 10406 font-size:13px; 10407 font-weight:500; 10408 color:#111 !important; 10409 cursor:pointer; 10410 user-select:none; 10411 background:transparent; 10412 transition:background .15s ease, color .15s ease; 10413 border-right:1px solid rgba(0,0,0,.08); 10414} 10415.size-item:last-child{ border-right:0; } 10416.size-item:hover:not(.disabled):not(.adding){ 10417 background:#000 !important; 10418 color:#fff !important; 10419} 10420.size-item.disabled{ 10421 color:#111 !important; 10422 text-decoration:line-through !important; 10423 opacity:.30 !important; 10424 cursor:not-allowed; 10425} 10426.size-item.adding{ 10427 background:#2e7d32 !important; 10428 color:#fff !important; 10429 cursor:wait; 10430} 10431 10432/* ===== META ===== */ 10433.lux-meta{ 10434 padding:12px 6px 6px; 10435 background:transparent !important; 10436} 10437.lux-brand{ 10438 font-size:16px; 10439 font-weight:600; 10440 color:#111; 10441 margin-bottom:2px; 10442} 10443.lux-title{ 10444 font-size:14px; 10445 font-weight:400; 10446 line-height:1.45; 10447 color:#111; 10448 margin:0; 10449} 10450.lux-price{ 10451 margin-top:10px; 10452 display:flex; 10453 gap:10px; 10454 align-items:baseline; 10455 background:transparent !important; 10456} 10457.lux-price .list-price{ 10458 font-size:14px; 10459 font-weight:400; 10460 color:#111; 10461 text-decoration:line-through; 10462} 10463.lux-price .sale-price{ 10464 font-size:16px; 10465 font-weight:600; 10466 color:#e10b0b; 10467} 10468 10469.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
10470.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 10471</style><div class="card-product" 10472 id="card-10306" 10473 data-lux-card-id="10306" 10474 data-lux-product-link="https://www.vezzalux.com/mcq-983-full-beyaz-desenli-erkek-ayakkabi" 10475 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><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" 10476 onclick="userProductFavourite('add', 10306)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 10477 id="lux-bag-10306" 10478 onclick="return luxBagClick(event, 10306);" 10479 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="sale-price">12.500,00 TL</div></div></div></a></div></div>
10479<script> 10480(function(){ 10481 10482 /* Bir kez kur */ 10483 if(window.__luxCardInit) return; 10484 window.__luxCardInit = true; 10485 10486 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 10487 window.__luxVariantCache = window.__luxVariantCache || {}; 10488 10489 function closeAll(){ 10490 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10491 s.classList.remove('open'); 10492 }); 10493 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10494 c.classList.remove('sizes-open'); 10495 }); 10496 } 10497 10498 function flashSuccess(productId){ 10499 var bag = document.getElementById('lux-bag-' + productId); 10500 if(!bag) return; 10501 bag.classList.add('is-success'); 10502 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 10503 } 10504 10505 /* DıŠtıklama - kapat */ 10506 document.addEventListener('click', function(e){ 10507 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 10508 if(!inside) closeAll(); 10509 }); 10510 10511 document.addEventListener('keydown', function(e){ 10512 if(e.key === 'Escape') closeAll(); 10513 }); 10514 10515 10516 /* ============================================ 10517 MODAL KILLER - yedek güvence 10518 ============================================ */ 10519 var LUX_MODAL_KILL_ACTIVE = false; 10520 10521 function killVisibleModals(){ 10522 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 10523 modals.forEach(function(m){ 10524 var id = (m.id || '').toLowerCase(); 10525 var txt = (m.textContent || '').toLowerCase(); 10526 var isCartModal = id.indexOf('cart') > -1 10527 || id.indexOf('variant') > -1 10528 || id.indexOf('fast') > -1 10529 || id.indexOf('urun') > -1 10530 || txt.indexOf('lütfen seçin') > -1; 10531 10532 if(isCartModal){ 10533 if(typeof jQuery !== 'undefined'){ 10534 try { jQuery(m).modal('hide'); } catch(e){} 10535 } 10536 m.classList.remove('show','in'); 10537 m.style.display = 'none'; 10538 } 10539 }); 10540 10541 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 10542 document.body.classList.remove('modal-open'); 10543 document.body.style.overflow = ''; 10544 document.body.style.paddingRight = ''; 10545 } 10546 10547 function startModalKill(durationMs){ 10548 if(LUX_MODAL_KILL_ACTIVE) return; 10549 LUX_MODAL_KILL_ACTIVE = true; 10550 killVisibleModals(); 10551 var interval = setInterval(killVisibleModals, 50); 10552 setTimeout(function(){ 10553 clearInterval(interval); 10554 LUX_MODAL_KILL_ACTIVE = false; 10555 }, durationMs || 2000); 10556 } 10557 10558 10559 /* ============================================ 10560 AJAX: Varyantları detay sayfasından çek 10561 ============================================ 10562 Ãrün detay sayfasının tam HTML'ini indir, 10563 DOMParser ile parse et, varyantları bul 10564 ============================================ */ 10565 function fetchVariants(productId, productLink, callback){ 10566 10567 /* Cache'te varsa hemen döndür */ 10568 if(window.__luxVariantCache[productId]){ 10569 callback(window.__luxVariantCache[productId]); 10570 return; 10571 } 10572 10573 fetch(productLink, { 10574 method: 'GET', 10575 credentials: 'same-origin', 10576 headers: { 'Accept': 'text/html' } 10577 }) 10578 .then(function(r){ return r.text(); }) 10579 .then(function(html){ 10580 var parser = new DOMParser(); 10581 var doc = parser.parseFromString(html, 'text/html'); 10582 10583 /* Detay sayfasındaki .variant-box'ı bul */ 10584 var variantBox = doc.querySelector('.variant-box'); 10585 if(!variantBox){ 10586 callback({ variants: [], error: 'no_variant_box' }); 10587 return; 10588 } 10589 10590 /* Her varyant grubu için select'leri ve option'ları oku */ 10591 var variants = []; 10592 var variantLis = variantBox.querySelectorAll('.variant'); 10593 10594 variantLis.forEach(function(li, idx){ 10595 var nameEl = li.querySelector('.name'); 10596 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 10597 10598 var values = []; 10599 10600 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 10601 var optLinks = li.querySelectorAll('.options a'); 10602 10603 if(optLinks.length > 0){ 10604 optLinks.forEach(function(a){ 10605 /* Beden/renk deÄerini doÄru attribute'tan oku
10606 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 10607 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 10608 - textContent: fallback */ 10609 var deger = a.getAttribute('data-variant-value') 10610 || a.textContent.trim(); 10611 10612 /* Stok kontrolü - birden fazla yoldan kontrol et */ 10613 var isSoldOut = a.classList.contains('sold-out') 10614 || a.classList.contains('sold_out') 10615 || a.classList.contains('disabled') 10616 || a.classList.contains('stoksuz') 10617 || a.classList.contains('out-of-stock') 10618 || a.hasAttribute('disabled') 10619 || a.getAttribute('data-in-stock') === '0' 10620 || a.getAttribute('data-in-stock') === 'false' 10621 || a.getAttribute('data-stokta-var-mi') === '0' 10622 || a.getAttribute('data-stokta-var-mi') === 'false'; 10623 10624 values.push({ 10625 deger: deger, 10626 inStock: !isSoldOut 10627 }); 10628 }); 10629 } else { 10630 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 10631 var select = li.querySelector('select'); 10632 if(select){ 10633 var opts = select.querySelectorAll('option'); 10634 opts.forEach(function(o){ 10635 if(!o.value) return; 10636 values.push({ 10637 deger: o.value, 10638 inStock: !o.disabled 10639 }); 10640 }); 10641 } 10642 } 10643 10644 variants.push({ 10645 index: idx, 10646 baslik: name, 10647 values: values 10648 }); 10649 }); 10650 10651 var result = { variants: variants }; 10652 window.__luxVariantCache[productId] = result; 10653 callback(result); 10654 }) 10655 .catch(function(err){ 10656 console.error('Varyant çekme hatası:', err); 10657 callback({ variants: [], error: 'fetch_failed' }); 10658 }); 10659 } 10660 10661 10662 /* ============================================ 10663 Beden Åeridini ve gizli variant-box'ı oluÅtur 10664 ============================================ */ 10665 function buildVariantUI(productId, data){ 10666 var card = document.getElementById('card-' + productId); 10667 if(!card) return false; 10668 10669 var holder = card.querySelector('.lux-variant-box'); 10670 var strip = document.getElementById('size-strip-' + productId); 10671 if(!holder || !strip) return false; 10672 10673 if(!data.variants || data.variants.length === 0){ 10674 /* Varyant yok */ 10675 return false; 10676 } 10677 10678 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 10679 var displayVariant = null;
10680 data.variants.forEach(function(v){ 10681 if(!displayVariant && v.values.length > 1){ 10682 displayVariant = v; 10683 } 10684 }); 10685 10686 /* Gizli variant-box HTML */ 10687 var html = '<div class="variant-box"><ul>'; 10688 data.variants.forEach(function(v){ 10689 html += '<li class="variant">'; 10690 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 10691 10692 if(v.values.length > 1){ 10693 html += '<option value="">Lütfen seçin</option>'; 10694 } 10695 10696 v.values.forEach(function(val, i){ 10697 var selected = (v.values.length === 1) ? ' selected' : ''; 10698 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 10699 }); 10700 10701 html += '</select></li>'; 10702 }); 10703 html += '</ul></div>'; 10704 10705 holder.innerHTML = html; 10706 holder.style.display = ''; 10707 10708 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 10709 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 10710 if(displayVariant){ 10711 var stripHtml = ''; 10712 var inStockCount = 0; 10713 10714 /* DEBUG - console'da gör */ 10715 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 10716 10717 displayVariant.values.forEach(function(val){ 10718 /* SADECE stokta olanları ekle */ 10719 if(val.inStock === true){ 10720 stripHtml += '<div class="size-item" ' 10721 + 'data-urun-id="' + productId + '" ' 10722 + 'data-varyant-deger="' + val.deger + '" ' 10723 + 'onclick="return luxAddVariant(event, this);">' 10724 + val.deger + '</div>'; 10725 inStockCount++; 10726 } 10727 }); 10728 10729 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 10730 if(inStockCount === 0){ 10731 strip.setAttribute('data-loaded', '1'); 10732 strip.setAttribute('data-has-variants', '0'); 10733 return false; 10734 } 10735
10736 strip.innerHTML = stripHtml; 10737 strip.setAttribute('data-loaded', '1'); 10738 strip.setAttribute('data-has-variants', '1'); 10739 return true; 10740 } else { 10741 strip.setAttribute('data-loaded', '1'); 10742 strip.setAttribute('data-has-variants', '0'); 10743 return false; 10744 } 10745 } 10746 10747 10748 /* ============================================ 10749 SEPET IKONU TIKLAMASI 10750 ============================================ */ 10751 window.luxBagClick = function(ev, productId){ 10752 ev.preventDefault(); 10753 ev.stopPropagation(); 10754 10755 var card = document.getElementById('card-' + productId); 10756 var strip = document.getElementById('size-strip-' + productId); 10757 var bag = document.getElementById('lux-bag-' + productId); 10758 if(!card || !strip) return false; 10759 10760 /* Strip zaten yüklenmiÅse direkt davran */ 10761 if(strip.getAttribute('data-loaded') === '1'){ 10762 if(strip.getAttribute('data-has-variants') === '1'){ 10763 toggleStrip(productId); 10764 } else { 10765 addToCartSmart(productId); 10766 } 10767 return false; 10768 } 10769 10770 /* İlk tıklama - AJAX ile varyantları çek */ 10771 bag.classList.add('is-loading'); 10772 var productLink = card.getAttribute('data-lux-product-link'); 10773 10774 fetchVariants(productId, productLink, function(data){ 10775 bag.classList.remove('is-loading'); 10776 10777 var hasVariants = buildVariantUI(productId, data); 10778 10779 if(hasVariants){ 10780 /* Bedenler var - Åeridi aç */ 10781 toggleStrip(productId); 10782 } else { 10783 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 10784 addToCartSmart(productId); 10785 } 10786 }); 10787 10788 return false; 10789 }; 10790 10791 function toggleStrip(productId){ 10792 var strip = document.getElementById('size-strip-' + productId); 10793 var card = document.getElementById('card-' + productId); 10794 if(!strip) return; 10795 10796 document.querySelectorAll('.size-strip.open').forEach(function(s){ 10797 if(s !== strip) s.classList.remove('open'); 10798 }); 10799 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 10800 if(c !== card) c.classList.remove('sizes-open'); 10801 }); 10802 10803 strip.classList.toggle('open'); 10804 if(card) card.classList.toggle('sizes-open'); 10805 } 10806 10807 10808 /* ============================================ 10809 BEDEN TIKLAMASI 10810 ============================================ */ 10811 window.luxAddVariant = function(ev, elem){ 10812 ev.preventDefault(); 10813 ev.stopPropagation(); 10814 10815 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 10816 10817 var productId = elem.getAttribute('data-urun-id'); 10818 var varyantDeger = elem.getAttribute('data-varyant-deger'); 10819 10820 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10821 if(!holder) return false; 10822 10823 /* Seçilen bedeni ilk select'e yaz */ 10824 var firstSelect = holder.querySelector('select[data-variant="0"]'); 10825 if(firstSelect){ 10826 firstSelect.value = varyantDeger; 10827 if(typeof jQuery !== "undefined"){ 10828 jQuery(firstSelect).val(varyantDeger).trigger('change'); 10829 } 10830 } 10831 10832 /* DiÄer select'lere ilk geçerli deÄeri koy */ 10833 var allSelects = holder.querySelectorAll('select[data-variant]'); 10834 allSelects.forEach(function(sel, idx){ 10835 if(idx === 0) return; 10836 if(sel.value) return; 10837 var options = sel.querySelectorAll('option'); 10838 for(var i = 0; i < options.length; i++){ 10839 if(options[i].value){ 10840 sel.value = options[i].value; 10841 if(typeof jQuery !== "undefined"){ 10842 jQuery(sel).val(options[i].value).trigger('change'); 10843 } 10844 break; 10845 } 10846 } 10847 }); 10848 10849 /* Görsel feedback */ 10850 elem.classList.add('adding'); 10851 var originalText = elem.textContent; 10852 elem.textContent = 'â'; 10853 10854 /* Sepete ekle */ 10855 addToCartSmart(productId, { 10856 checkVariant: true, 10857 variantCount: allSelects.length, 10858 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 10859 }); 10860 10861 setTimeout(function(){ 10862 elem.textContent = originalText; 10863 elem.classList.remove('adding'); 10864 closeAll(); 10865 }, 800); 10866 10867 return false; 10868 }; 10869 10870 10871 /* ============================================ 10872 SEPETE EKLE - Modal killer ile 10873 ============================================ */ 10874 function addToCartSmart(productId, extraOptions){ 10875 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 10876 10877 var options = { 10878 quantity: 1, 10879 hideNativeModal: 'lux-card-' + productId 10880 }; 10881 10882 if(extraOptions){
10883 Object.keys(extraOptions).forEach(function(k){ 10884 options[k] = extraOptions[k]; 10885 }); 10886 } else if(holder){ 10887 var selects = holder.querySelectorAll('select[data-variant]'); 10888 if(selects.length > 0){ 10889 options.checkVariant = true; 10890 options.variantCount = selects.length; 10891 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 10892 } 10893 } 10894 10895 startModalKill(2000); 10896 10897 if(typeof addCart === "function"){ 10898 try { 10899 addCart(productId, 'card', options); 10900 flashSuccess(productId); 10901 } catch(err){ 10902 console.error('Sepete ekleme hatası:', err); 10903 } 10904 } 10905 } 10906 10907})(); 10908</script>
10908</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 10909 data-lux-product-shell="1" 10910 data-lux-page="1"><style> 10911@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 10912 10913/* ===== VEZZA LUX CARD ===== */ 10914.card-product{ 10915 font-family:'Poppins',sans-serif; 10916 background:#fff !important; 10917 position:relative; 10918} 10919.card-product-inner{ 10920 background:transparent !important; 10921 position:relative; 10922} 10923.card-product .c-p-i-link, 10924.card-product a{ 10925 background:transparent !important; 10926} 10927.card-product-inner > div{ 10928 background:transparent !important; 10929} 10930.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 10931 background:transparent !important; 10932} 10933.card-product .card-product-content, 10934.card-product .price-group, 10935.card-product .prices{ 10936 background:transparent !important; 10937} 10938[class*="skeleton"], 10939[class*="placeholder"], 10940[class*="loading"]{ 10941 background:transparent !important; 10942} 10943 10944/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 10945.image-wrapper{ 10946 position:relative; 10947 width:100%; 10948 aspect-ratio:1/1; 10949 overflow:hidden; 10950 background:#fff !important; 10951} 10952 10953.image{ 10954 position:relative; 10955 width:100%; 10956 height:100%; 10957} 10958 10959.image-wrapper img{ 10960 width:100% !important; 10961 height:100% !important; 10962 object-fit:cover !important; 10963 object-position:center center !important; 10964 display:block; 10965 transition:transform .35s ease; 10966} 10967 10968/* ===== DISCOUNT ===== */ 10969.discount{ 10970 position:absolute; 10971 top:12px; 10972 left:12px; 10973 width:28px; 10974 height:48px; 10975 background:#e10b0b; 10976 color:#fff; 10977 font-size:12px; 10978 font-weight:600; 10979 display:flex; 10980 align-items:center; 10981 justify-content:center; 10982 writing-mode:vertical-rl; 10983 transform:rotate(180deg); 10984 letter-spacing:.5px; 10985 z-index:7; 10986} 10987 10988/* ===== FAV ===== */ 10989.lux-fav{ 10990 position:absolute; 10991 top:12px; 10992 right:12px; 10993 z-index:7; 10994} 10995.lux-fav a, 10996.lux-fav button{ 10997 background:transparent !important; 10998 border:0 !important; 10999 padding:0 !important; 11000 cursor:pointer; 11001 display:inline-flex; 11002 align-items:center; 11003 justify-content:center; 11004} 11005 11006/* ===== SEPET IKON ===== */ 11007.lux-bag{ 11008 position:absolute; 11009 bottom:12px; 11010 right:12px; 11011 z-index:7; 11012 width:34px; 11013 height:34px; 11014 display:inline-flex; 11015 align-items:center; 11016 justify-content:center; 11017 background:rgba(255,255,255,.92); 11018 border:1px solid rgba(0,0,0,.10); 11019 border-radius:10px; 11020 cursor:pointer; 11021 transition:.2s ease; 11022} 11023.lux-bag:hover{ 11024 background:#fff; 11025 border-color:rgba(0,0,0,.25); 11026} 11027.lux-bag.is-loading{ 11028 opacity:.6; 11029 cursor:wait; 11030} 11031.lux-bag.is-success{ 11032 background:#2e7d32 !important; 11033 border-color:#2e7d32 !important; 11034 color:#fff !important; 11035} 11036.card-product.sizes-open .lux-bag{ 11037 opacity:0; 11038 pointer-events:none; 11039} 11040 11041/* Loading spinner */ 11042.lux-bag.is-loading i::before{ 11043 content:"â³"; 11044} 11045 11046/* ===== SIZE STRIP ===== */ 11047.size-strip{ 11048 width:100%; 11049 max-height:0; 11050 overflow:hidden; 11051 background:#fff; 11052 display:flex; 11053 flex-wrap:wrap; 11054 transition:max-height .3s ease, border-color .3s ease; 11055 border-top:1px solid transparent; 11056 border-bottom:1px solid transparent; 11057} 11058.size-strip.open{ 11059 max-height:200px; 11060 border-top-color:rgba(0,0,0,.08); 11061 border-bottom-color:rgba(0,0,0,.08); 11062} 11063.size-item{ 11064 flex:1 0 auto; 11065 min-width:38px; 11066 height:42px; 11067 display:flex; 11068 align-items:center; 11069 justify-content:center; 11070 font-size:13px; 11071 font-weight:500; 11072 color:#111 !important; 11073 cursor:pointer; 11074 user-select:none; 11075 background:transparent; 11076 transition:background .15s ease, color .15s ease; 11077 border-right:1px solid rgba(0,0,0,.08); 11078} 11079.size-item:last-child{ border-right:0; } 11080.size-item:hover:not(.disabled):not(.adding){ 11081 background:#000 !important; 11082 color:#fff !important; 11083} 11084.size-item.disabled{ 11085 color:#111 !important; 11086 text-decoration:line-through !important; 11087 opacity:.30 !important; 11088 cursor:not-allowed; 11089} 11090.size-item.adding{ 11091 background:#2e7d32 !important; 11092 color:#fff !important; 11093 cursor:wait; 11094} 11095 11096/* ===== META ===== */ 11097.lux-meta{ 11098 padding:12px 6px 6px; 11099 background:transparent !important; 11100} 11101.lux-brand{ 11102 font-size:16px; 11103 font-weight:600; 11104 color:#111; 11105 margin-bottom:2px; 11106} 11107.lux-title{ 11108 font-size:14px; 11109 font-weight:400; 11110 line-height:1.45; 11111 color:#111; 11112 margin:0; 11113} 11114.lux-price{ 11115 margin-top:10px; 11116 display:flex; 11117 gap:10px; 11118 align-items:baseline; 11119 background:transparent !important; 11120} 11121.lux-price .list-price{ 11122 font-size:14px; 11123 font-weight:400; 11124 color:#111; 11125 text-decoration:line-through; 11126} 11127.lux-price .sale-price{ 11128 font-size:16px; 11129 font-weight:600; 11130 color:#e10b0b; 11131} 11132 11133.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
11134.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 11135</style><div class="card-product" 11136 id="card-10200" 11137 data-lux-card-id="10200" 11138 data-lux-product-link="https://www.vezzalux.com/gg-855-beyaz-tuylu-erkek-ayakkabi" 11139 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><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" 11140 onclick="userProductFavourite('add', 10200)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 11141 id="lux-bag-10200" 11142 onclick="return luxBagClick(event, 10200);" 11143 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="sale-price">10.499,00 TL</div></div></div></a></div></div>
11143<script> 11144(function(){ 11145 11146 /* Bir kez kur */ 11147 if(window.__luxCardInit) return; 11148 window.__luxCardInit = true; 11149 11150 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 11151 window.__luxVariantCache = window.__luxVariantCache || {}; 11152 11153 function closeAll(){ 11154 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11155 s.classList.remove('open'); 11156 }); 11157 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11158 c.classList.remove('sizes-open'); 11159 }); 11160 } 11161 11162 function flashSuccess(productId){ 11163 var bag = document.getElementById('lux-bag-' + productId); 11164 if(!bag) return; 11165 bag.classList.add('is-success'); 11166 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 11167 } 11168 11169 /* DıŠtıklama - kapat */ 11170 document.addEventListener('click', function(e){ 11171 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 11172 if(!inside) closeAll(); 11173 }); 11174 11175 document.addEventListener('keydown', function(e){ 11176 if(e.key === 'Escape') closeAll(); 11177 }); 11178 11179 11180 /* ============================================ 11181 MODAL KILLER - yedek güvence 11182 ============================================ */ 11183 var LUX_MODAL_KILL_ACTIVE = false; 11184 11185 function killVisibleModals(){ 11186 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 11187 modals.forEach(function(m){ 11188 var id = (m.id || '').toLowerCase(); 11189 var txt = (m.textContent || '').toLowerCase(); 11190 var isCartModal = id.indexOf('cart') > -1 11191 || id.indexOf('variant') > -1 11192 || id.indexOf('fast') > -1 11193 || id.indexOf('urun') > -1 11194 || txt.indexOf('lütfen seçin') > -1; 11195 11196 if(isCartModal){ 11197 if(typeof jQuery !== 'undefined'){ 11198 try { jQuery(m).modal('hide'); } catch(e){} 11199 } 11200 m.classList.remove('show','in'); 11201 m.style.display = 'none'; 11202 } 11203 }); 11204 11205 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 11206 document.body.classList.remove('modal-open'); 11207 document.body.style.overflow = ''; 11208 document.body.style.paddingRight = ''; 11209 } 11210 11211 function startModalKill(durationMs){ 11212 if(LUX_MODAL_KILL_ACTIVE) return; 11213 LUX_MODAL_KILL_ACTIVE = true; 11214 killVisibleModals(); 11215 var interval = setInterval(killVisibleModals, 50); 11216 setTimeout(function(){ 11217 clearInterval(interval); 11218 LUX_MODAL_KILL_ACTIVE = false; 11219 }, durationMs || 2000); 11220 } 11221 11222 11223 /* ============================================ 11224 AJAX: Varyantları detay sayfasından çek 11225 ============================================ 11226 Ãrün detay sayfasının tam HTML'ini indir, 11227 DOMParser ile parse et, varyantları bul 11228 ============================================ */ 11229 function fetchVariants(productId, productLink, callback){ 11230 11231 /* Cache'te varsa hemen döndür */ 11232 if(window.__luxVariantCache[productId]){ 11233 callback(window.__luxVariantCache[productId]); 11234 return; 11235 } 11236 11237 fetch(productLink, { 11238 method: 'GET', 11239 credentials: 'same-origin', 11240 headers: { 'Accept': 'text/html' } 11241 }) 11242 .then(function(r){ return r.text(); }) 11243 .then(function(html){ 11244 var parser = new DOMParser(); 11245 var doc = parser.parseFromString(html, 'text/html'); 11246 11247 /* Detay sayfasındaki .variant-box'ı bul */ 11248 var variantBox = doc.querySelector('.variant-box'); 11249 if(!variantBox){ 11250 callback({ variants: [], error: 'no_variant_box' }); 11251 return; 11252 } 11253 11254 /* Her varyant grubu için select'leri ve option'ları oku */ 11255 var variants = []; 11256 var variantLis = variantBox.querySelectorAll('.variant'); 11257 11258 variantLis.forEach(function(li, idx){ 11259 var nameEl = li.querySelector('.name'); 11260 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 11261 11262 var values = []; 11263 11264 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 11265 var optLinks = li.querySelectorAll('.options a'); 11266 11267 if(optLinks.length > 0){ 11268 optLinks.forEach(function(a){ 11269 /* Beden/renk deÄerini doÄru attribute'tan oku
11270 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 11271 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 11272 - textContent: fallback */ 11273 var deger = a.getAttribute('data-variant-value') 11274 || a.textContent.trim(); 11275 11276 /* Stok kontrolü - birden fazla yoldan kontrol et */ 11277 var isSoldOut = a.classList.contains('sold-out') 11278 || a.classList.contains('sold_out') 11279 || a.classList.contains('disabled') 11280 || a.classList.contains('stoksuz') 11281 || a.classList.contains('out-of-stock') 11282 || a.hasAttribute('disabled') 11283 || a.getAttribute('data-in-stock') === '0' 11284 || a.getAttribute('data-in-stock') === 'false' 11285 || a.getAttribute('data-stokta-var-mi') === '0' 11286 || a.getAttribute('data-stokta-var-mi') === 'false'; 11287 11288 values.push({ 11289 deger: deger, 11290 inStock: !isSoldOut 11291 }); 11292 }); 11293 } else { 11294 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 11295 var select = li.querySelector('select'); 11296 if(select){ 11297 var opts = select.querySelectorAll('option'); 11298 opts.forEach(function(o){ 11299 if(!o.value) return; 11300 values.push({ 11301 deger: o.value, 11302 inStock: !o.disabled 11303 }); 11304 }); 11305 } 11306 } 11307 11308 variants.push({ 11309 index: idx, 11310 baslik: name, 11311 values: values 11312 }); 11313 }); 11314 11315 var result = { variants: variants }; 11316 window.__luxVariantCache[productId] = result; 11317 callback(result); 11318 }) 11319 .catch(function(err){ 11320 console.error('Varyant çekme hatası:', err); 11321 callback({ variants: [], error: 'fetch_failed' }); 11322 }); 11323 } 11324 11325 11326 /* ============================================ 11327 Beden Åeridini ve gizli variant-box'ı oluÅtur 11328 ============================================ */ 11329 function buildVariantUI(productId, data){ 11330 var card = document.getElementById('card-' + productId); 11331 if(!card) return false; 11332 11333 var holder = card.querySelector('.lux-variant-box'); 11334 var strip = document.getElementById('size-strip-' + productId); 11335 if(!holder || !strip) return false; 11336 11337 if(!data.variants || data.variants.length === 0){ 11338 /* Varyant yok */ 11339 return false; 11340 } 11341 11342 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 11343 var displayVariant = null;
11344 data.variants.forEach(function(v){ 11345 if(!displayVariant && v.values.length > 1){ 11346 displayVariant = v; 11347 } 11348 }); 11349 11350 /* Gizli variant-box HTML */ 11351 var html = '<div class="variant-box"><ul>'; 11352 data.variants.forEach(function(v){ 11353 html += '<li class="variant">'; 11354 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 11355 11356 if(v.values.length > 1){ 11357 html += '<option value="">Lütfen seçin</option>'; 11358 } 11359 11360 v.values.forEach(function(val, i){ 11361 var selected = (v.values.length === 1) ? ' selected' : ''; 11362 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 11363 }); 11364 11365 html += '</select></li>'; 11366 }); 11367 html += '</ul></div>'; 11368 11369 holder.innerHTML = html; 11370 holder.style.display = ''; 11371 11372 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 11373 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 11374 if(displayVariant){ 11375 var stripHtml = ''; 11376 var inStockCount = 0; 11377 11378 /* DEBUG - console'da gör */ 11379 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 11380 11381 displayVariant.values.forEach(function(val){ 11382 /* SADECE stokta olanları ekle */ 11383 if(val.inStock === true){ 11384 stripHtml += '<div class="size-item" ' 11385 + 'data-urun-id="' + productId + '" ' 11386 + 'data-varyant-deger="' + val.deger + '" ' 11387 + 'onclick="return luxAddVariant(event, this);">' 11388 + val.deger + '</div>'; 11389 inStockCount++; 11390 } 11391 }); 11392 11393 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 11394 if(inStockCount === 0){ 11395 strip.setAttribute('data-loaded', '1'); 11396 strip.setAttribute('data-has-variants', '0'); 11397 return false; 11398 } 11399
11400 strip.innerHTML = stripHtml; 11401 strip.setAttribute('data-loaded', '1'); 11402 strip.setAttribute('data-has-variants', '1'); 11403 return true; 11404 } else { 11405 strip.setAttribute('data-loaded', '1'); 11406 strip.setAttribute('data-has-variants', '0'); 11407 return false; 11408 } 11409 } 11410 11411 11412 /* ============================================ 11413 SEPET IKONU TIKLAMASI 11414 ============================================ */ 11415 window.luxBagClick = function(ev, productId){ 11416 ev.preventDefault(); 11417 ev.stopPropagation(); 11418 11419 var card = document.getElementById('card-' + productId); 11420 var strip = document.getElementById('size-strip-' + productId); 11421 var bag = document.getElementById('lux-bag-' + productId); 11422 if(!card || !strip) return false; 11423 11424 /* Strip zaten yüklenmiÅse direkt davran */ 11425 if(strip.getAttribute('data-loaded') === '1'){ 11426 if(strip.getAttribute('data-has-variants') === '1'){ 11427 toggleStrip(productId); 11428 } else { 11429 addToCartSmart(productId); 11430 } 11431 return false; 11432 } 11433 11434 /* İlk tıklama - AJAX ile varyantları çek */ 11435 bag.classList.add('is-loading'); 11436 var productLink = card.getAttribute('data-lux-product-link'); 11437 11438 fetchVariants(productId, productLink, function(data){ 11439 bag.classList.remove('is-loading'); 11440 11441 var hasVariants = buildVariantUI(productId, data); 11442 11443 if(hasVariants){ 11444 /* Bedenler var - Åeridi aç */ 11445 toggleStrip(productId); 11446 } else { 11447 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 11448 addToCartSmart(productId); 11449 } 11450 }); 11451 11452 return false; 11453 }; 11454 11455 function toggleStrip(productId){ 11456 var strip = document.getElementById('size-strip-' + productId); 11457 var card = document.getElementById('card-' + productId); 11458 if(!strip) return; 11459 11460 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11461 if(s !== strip) s.classList.remove('open'); 11462 }); 11463 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11464 if(c !== card) c.classList.remove('sizes-open'); 11465 }); 11466 11467 strip.classList.toggle('open'); 11468 if(card) card.classList.toggle('sizes-open'); 11469 } 11470 11471 11472 /* ============================================ 11473 BEDEN TIKLAMASI 11474 ============================================ */ 11475 window.luxAddVariant = function(ev, elem){ 11476 ev.preventDefault(); 11477 ev.stopPropagation(); 11478 11479 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 11480 11481 var productId = elem.getAttribute('data-urun-id'); 11482 var varyantDeger = elem.getAttribute('data-varyant-deger'); 11483 11484 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 11485 if(!holder) return false; 11486 11487 /* Seçilen bedeni ilk select'e yaz */ 11488 var firstSelect = holder.querySelector('select[data-variant="0"]'); 11489 if(firstSelect){ 11490 firstSelect.value = varyantDeger; 11491 if(typeof jQuery !== "undefined"){ 11492 jQuery(firstSelect).val(varyantDeger).trigger('change'); 11493 } 11494 } 11495 11496 /* DiÄer select'lere ilk geçerli deÄeri koy */ 11497 var allSelects = holder.querySelectorAll('select[data-variant]'); 11498 allSelects.forEach(function(sel, idx){ 11499 if(idx === 0) return; 11500 if(sel.value) return; 11501 var options = sel.querySelectorAll('option'); 11502 for(var i = 0; i < options.length; i++){ 11503 if(options[i].value){ 11504 sel.value = options[i].value; 11505 if(typeof jQuery !== "undefined"){ 11506 jQuery(sel).val(options[i].value).trigger('change'); 11507 } 11508 break; 11509 } 11510 } 11511 }); 11512 11513 /* Görsel feedback */ 11514 elem.classList.add('adding'); 11515 var originalText = elem.textContent; 11516 elem.textContent = 'â'; 11517 11518 /* Sepete ekle */ 11519 addToCartSmart(productId, { 11520 checkVariant: true, 11521 variantCount: allSelects.length, 11522 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 11523 }); 11524 11525 setTimeout(function(){ 11526 elem.textContent = originalText; 11527 elem.classList.remove('adding'); 11528 closeAll(); 11529 }, 800); 11530 11531 return false; 11532 }; 11533 11534 11535 /* ============================================ 11536 SEPETE EKLE - Modal killer ile 11537 ============================================ */ 11538 function addToCartSmart(productId, extraOptions){ 11539 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 11540 11541 var options = { 11542 quantity: 1, 11543 hideNativeModal: 'lux-card-' + productId 11544 }; 11545 11546 if(extraOptions){
11547 Object.keys(extraOptions).forEach(function(k){ 11548 options[k] = extraOptions[k]; 11549 }); 11550 } else if(holder){ 11551 var selects = holder.querySelectorAll('select[data-variant]'); 11552 if(selects.length > 0){ 11553 options.checkVariant = true; 11554 options.variantCount = selects.length; 11555 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 11556 } 11557 } 11558 11559 startModalKill(2000); 11560 11561 if(typeof addCart === "function"){ 11562 try { 11563 addCart(productId, 'card', options); 11564 flashSuccess(productId); 11565 } catch(err){ 11566 console.error('Sepete ekleme hatası:', err); 11567 } 11568 } 11569 } 11570 11571})(); 11572</script>
11572</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 11573 data-lux-product-shell="1" 11574 data-lux-page="1"><style> 11575@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 11576 11577/* ===== VEZZA LUX CARD ===== */ 11578.card-product{ 11579 font-family:'Poppins',sans-serif; 11580 background:#fff !important; 11581 position:relative; 11582} 11583.card-product-inner{ 11584 background:transparent !important; 11585 position:relative; 11586} 11587.card-product .c-p-i-link, 11588.card-product a{ 11589 background:transparent !important; 11590} 11591.card-product-inner > div{ 11592 background:transparent !important; 11593} 11594.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 11595 background:transparent !important; 11596} 11597.card-product .card-product-content, 11598.card-product .price-group, 11599.card-product .prices{ 11600 background:transparent !important; 11601} 11602[class*="skeleton"], 11603[class*="placeholder"], 11604[class*="loading"]{ 11605 background:transparent !important; 11606} 11607 11608/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 11609.image-wrapper{ 11610 position:relative; 11611 width:100%; 11612 aspect-ratio:1/1; 11613 overflow:hidden; 11614 background:#fff !important; 11615} 11616 11617.image{ 11618 position:relative; 11619 width:100%; 11620 height:100%; 11621} 11622 11623.image-wrapper img{ 11624 width:100% !important; 11625 height:100% !important; 11626 object-fit:cover !important; 11627 object-position:center center !important; 11628 display:block; 11629 transition:transform .35s ease; 11630} 11631 11632/* ===== DISCOUNT ===== */ 11633.discount{ 11634 position:absolute; 11635 top:12px; 11636 left:12px; 11637 width:28px; 11638 height:48px; 11639 background:#e10b0b; 11640 color:#fff; 11641 font-size:12px; 11642 font-weight:600; 11643 display:flex; 11644 align-items:center; 11645 justify-content:center; 11646 writing-mode:vertical-rl; 11647 transform:rotate(180deg); 11648 letter-spacing:.5px; 11649 z-index:7; 11650} 11651 11652/* ===== FAV ===== */ 11653.lux-fav{ 11654 position:absolute; 11655 top:12px; 11656 right:12px; 11657 z-index:7; 11658} 11659.lux-fav a, 11660.lux-fav button{ 11661 background:transparent !important; 11662 border:0 !important; 11663 padding:0 !important; 11664 cursor:pointer; 11665 display:inline-flex; 11666 align-items:center; 11667 justify-content:center; 11668} 11669 11670/* ===== SEPET IKON ===== */ 11671.lux-bag{ 11672 position:absolute; 11673 bottom:12px; 11674 right:12px; 11675 z-index:7; 11676 width:34px; 11677 height:34px; 11678 display:inline-flex; 11679 align-items:center; 11680 justify-content:center; 11681 background:rgba(255,255,255,.92); 11682 border:1px solid rgba(0,0,0,.10); 11683 border-radius:10px; 11684 cursor:pointer; 11685 transition:.2s ease; 11686} 11687.lux-bag:hover{ 11688 background:#fff; 11689 border-color:rgba(0,0,0,.25); 11690} 11691.lux-bag.is-loading{ 11692 opacity:.6; 11693 cursor:wait; 11694} 11695.lux-bag.is-success{ 11696 background:#2e7d32 !important; 11697 border-color:#2e7d32 !important; 11698 color:#fff !important; 11699} 11700.card-product.sizes-open .lux-bag{ 11701 opacity:0; 11702 pointer-events:none; 11703} 11704 11705/* Loading spinner */ 11706.lux-bag.is-loading i::before{ 11707 content:"â³"; 11708} 11709 11710/* ===== SIZE STRIP ===== */ 11711.size-strip{ 11712 width:100%; 11713 max-height:0; 11714 overflow:hidden; 11715 background:#fff; 11716 display:flex; 11717 flex-wrap:wrap; 11718 transition:max-height .3s ease, border-color .3s ease; 11719 border-top:1px solid transparent; 11720 border-bottom:1px solid transparent; 11721} 11722.size-strip.open{ 11723 max-height:200px; 11724 border-top-color:rgba(0,0,0,.08); 11725 border-bottom-color:rgba(0,0,0,.08); 11726} 11727.size-item{ 11728 flex:1 0 auto; 11729 min-width:38px; 11730 height:42px; 11731 display:flex; 11732 align-items:center; 11733 justify-content:center; 11734 font-size:13px; 11735 font-weight:500; 11736 color:#111 !important; 11737 cursor:pointer; 11738 user-select:none; 11739 background:transparent; 11740 transition:background .15s ease, color .15s ease; 11741 border-right:1px solid rgba(0,0,0,.08); 11742} 11743.size-item:last-child{ border-right:0; } 11744.size-item:hover:not(.disabled):not(.adding){ 11745 background:#000 !important; 11746 color:#fff !important; 11747} 11748.size-item.disabled{ 11749 color:#111 !important; 11750 text-decoration:line-through !important; 11751 opacity:.30 !important; 11752 cursor:not-allowed; 11753} 11754.size-item.adding{ 11755 background:#2e7d32 !important; 11756 color:#fff !important; 11757 cursor:wait; 11758} 11759 11760/* ===== META ===== */ 11761.lux-meta{ 11762 padding:12px 6px 6px; 11763 background:transparent !important; 11764} 11765.lux-brand{ 11766 font-size:16px; 11767 font-weight:600; 11768 color:#111; 11769 margin-bottom:2px; 11770} 11771.lux-title{ 11772 font-size:14px; 11773 font-weight:400; 11774 line-height:1.45; 11775 color:#111; 11776 margin:0; 11777} 11778.lux-price{ 11779 margin-top:10px; 11780 display:flex; 11781 gap:10px; 11782 align-items:baseline; 11783 background:transparent !important; 11784} 11785.lux-price .list-price{ 11786 font-size:14px; 11787 font-weight:400; 11788 color:#111; 11789 text-decoration:line-through; 11790} 11791.lux-price .sale-price{ 11792 font-size:16px; 11793 font-weight:600; 11794 color:#e10b0b; 11795} 11796 11797.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
11798.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 11799</style><div class="card-product" 11800 id="card-10729" 11801 data-lux-card-id="10729" 11802 data-lux-product-link="https://www.vezzalux.com/hermes-1304-terlik-siyah-beyaz-erkek-ayakkabi" 11803 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/hermes-1304-terlik-siyah-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Hermes 1304 Terlik Siyah Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a440b340ca87-12885728-sw800sh800.webp" alt="Hermes 1304 Terlik Siyah Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a440b340ca87-12885728-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a440b353fbad-95389479-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" 11804 onclick="userProductFavourite('add', 10729)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 11805 id="lux-bag-10729" 11806 onclick="return luxBagClick(event, 10729);" 11807 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10729" style="display:none;"></div><div class="size-strip" id="size-strip-10729" data-loaded="0"></div><a href="https://www.vezzalux.com/hermes-1304-terlik-siyah-beyaz-erkek-ayakkabi" class="c-p-i-link" title="Hermes 1304 Terlik Siyah Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Hermes</div><div class="lux-title">Hermes 1304 Terlik Siyah Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
11807<script> 11808(function(){ 11809 11810 /* Bir kez kur */ 11811 if(window.__luxCardInit) return; 11812 window.__luxCardInit = true; 11813 11814 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 11815 window.__luxVariantCache = window.__luxVariantCache || {}; 11816 11817 function closeAll(){ 11818 document.querySelectorAll('.size-strip.open').forEach(function(s){ 11819 s.classList.remove('open'); 11820 }); 11821 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 11822 c.classList.remove('sizes-open'); 11823 }); 11824 } 11825 11826 function flashSuccess(productId){ 11827 var bag = document.getElementById('lux-bag-' + productId); 11828 if(!bag) return; 11829 bag.classList.add('is-success'); 11830 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 11831 } 11832 11833 /* DıŠtıklama - kapat */ 11834 document.addEventListener('click', function(e){ 11835 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 11836 if(!inside) closeAll(); 11837 }); 11838 11839 document.addEventListener('keydown', function(e){ 11840 if(e.key === 'Escape') closeAll(); 11841 }); 11842 11843 11844 /* ============================================ 11845 MODAL KILLER - yedek güvence 11846 ============================================ */ 11847 var LUX_MODAL_KILL_ACTIVE = false; 11848 11849 function killVisibleModals(){ 11850 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 11851 modals.forEach(function(m){ 11852 var id = (m.id || '').toLowerCase(); 11853 var txt = (m.textContent || '').toLowerCase(); 11854 var isCartModal = id.indexOf('cart') > -1 11855 || id.indexOf('variant') > -1 11856 || id.indexOf('fast') > -1 11857 || id.indexOf('urun') > -1 11858 || txt.indexOf('lütfen seçin') > -1; 11859 11860 if(isCartModal){ 11861 if(typeof jQuery !== 'undefined'){ 11862 try { jQuery(m).modal('hide'); } catch(e){} 11863 } 11864 m.classList.remove('show','in'); 11865 m.style.display = 'none'; 11866 } 11867 }); 11868 11869 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 11870 document.body.classList.remove('modal-open'); 11871 document.body.style.overflow = ''; 11872 document.body.style.paddingRight = ''; 11873 } 11874 11875 function startModalKill(durationMs){ 11876 if(LUX_MODAL_KILL_ACTIVE) return; 11877 LUX_MODAL_KILL_ACTIVE = true; 11878 killVisibleModals(); 11879 var interval = setInterval(killVisibleModals, 50); 11880 setTimeout(function(){ 11881 clearInterval(interval); 11882 LUX_MODAL_KILL_ACTIVE = false; 11883 }, durationMs || 2000); 11884 } 11885 11886 11887 /* ============================================ 11888 AJAX: Varyantları detay sayfasından çek 11889 ============================================ 11890 Ãrün detay sayfasının tam HTML'ini indir, 11891 DOMParser ile parse et, varyantları bul 11892 ============================================ */ 11893 function fetchVariants(productId, productLink, callback){ 11894 11895 /* Cache'te varsa hemen döndür */ 11896 if(window.__luxVariantCache[productId]){ 11897 callback(window.__luxVariantCache[productId]); 11898 return; 11899 } 11900 11901 fetch(productLink, { 11902 method: 'GET', 11903 credentials: 'same-origin', 11904 headers: { 'Accept': 'text/html' } 11905 }) 11906 .then(function(r){ return r.text(); }) 11907 .then(function(html){ 11908 var parser = new DOMParser(); 11909 var doc = parser.parseFromString(html, 'text/html'); 11910 11911 /* Detay sayfasındaki .variant-box'ı bul */ 11912 var variantBox = doc.querySelector('.variant-box'); 11913 if(!variantBox){ 11914 callback({ variants: [], error: 'no_variant_box' }); 11915 return; 11916 } 11917 11918 /* Her varyant grubu için select'leri ve option'ları oku */ 11919 var variants = []; 11920 var variantLis = variantBox.querySelectorAll('.variant'); 11921 11922 variantLis.forEach(function(li, idx){ 11923 var nameEl = li.querySelector('.name'); 11924 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 11925 11926 var values = []; 11927 11928 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 11929 var optLinks = li.querySelectorAll('.options a'); 11930 11931 if(optLinks.length > 0){ 11932 optLinks.forEach(function(a){ 11933 /* Beden/renk deÄerini doÄru attribute'tan oku
11934 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 11935 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 11936 - textContent: fallback */ 11937 var deger = a.getAttribute('data-variant-value') 11938 || a.textContent.trim(); 11939 11940 /* Stok kontrolü - birden fazla yoldan kontrol et */ 11941 var isSoldOut = a.classList.contains('sold-out') 11942 || a.classList.contains('sold_out') 11943 || a.classList.contains('disabled') 11944 || a.classList.contains('stoksuz') 11945 || a.classList.contains('out-of-stock') 11946 || a.hasAttribute('disabled') 11947 || a.getAttribute('data-in-stock') === '0' 11948 || a.getAttribute('data-in-stock') === 'false' 11949 || a.getAttribute('data-stokta-var-mi') === '0' 11950 || a.getAttribute('data-stokta-var-mi') === 'false'; 11951 11952 values.push({ 11953 deger: deger, 11954 inStock: !isSoldOut 11955 }); 11956 }); 11957 } else { 11958 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 11959 var select = li.querySelector('select'); 11960 if(select){ 11961 var opts = select.querySelectorAll('option'); 11962 opts.forEach(function(o){ 11963 if(!o.value) return; 11964 values.push({ 11965 deger: o.value, 11966 inStock: !o.disabled 11967 }); 11968 }); 11969 } 11970 } 11971 11972 variants.push({ 11973 index: idx, 11974 baslik: name, 11975 values: values 11976 }); 11977 }); 11978 11979 var result = { variants: variants }; 11980 window.__luxVariantCache[productId] = result; 11981 callback(result); 11982 }) 11983 .catch(function(err){ 11984 console.error('Varyant çekme hatası:', err); 11985 callback({ variants: [], error: 'fetch_failed' }); 11986 }); 11987 } 11988 11989 11990 /* ============================================ 11991 Beden Åeridini ve gizli variant-box'ı oluÅtur 11992 ============================================ */ 11993 function buildVariantUI(productId, data){ 11994 var card = document.getElementById('card-' + productId); 11995 if(!card) return false; 11996 11997 var holder = card.querySelector('.lux-variant-box'); 11998 var strip = document.getElementById('size-strip-' + productId); 11999 if(!holder || !strip) return false; 12000 12001 if(!data.variants || data.variants.length === 0){ 12002 /* Varyant yok */ 12003 return false; 12004 } 12005 12006 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 12007 var displayVariant = null;
12008 data.variants.forEach(function(v){ 12009 if(!displayVariant && v.values.length > 1){ 12010 displayVariant = v; 12011 } 12012 }); 12013 12014 /* Gizli variant-box HTML */ 12015 var html = '<div class="variant-box"><ul>'; 12016 data.variants.forEach(function(v){ 12017 html += '<li class="variant">'; 12018 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 12019 12020 if(v.values.length > 1){ 12021 html += '<option value="">Lütfen seçin</option>'; 12022 } 12023 12024 v.values.forEach(function(val, i){ 12025 var selected = (v.values.length === 1) ? ' selected' : ''; 12026 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 12027 }); 12028 12029 html += '</select></li>'; 12030 }); 12031 html += '</ul></div>'; 12032 12033 holder.innerHTML = html; 12034 holder.style.display = ''; 12035 12036 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 12037 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 12038 if(displayVariant){ 12039 var stripHtml = ''; 12040 var inStockCount = 0; 12041 12042 /* DEBUG - console'da gör */ 12043 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 12044 12045 displayVariant.values.forEach(function(val){ 12046 /* SADECE stokta olanları ekle */ 12047 if(val.inStock === true){ 12048 stripHtml += '<div class="size-item" ' 12049 + 'data-urun-id="' + productId + '" ' 12050 + 'data-varyant-deger="' + val.deger + '" ' 12051 + 'onclick="return luxAddVariant(event, this);">' 12052 + val.deger + '</div>'; 12053 inStockCount++; 12054 } 12055 }); 12056 12057 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 12058 if(inStockCount === 0){ 12059 strip.setAttribute('data-loaded', '1'); 12060 strip.setAttribute('data-has-variants', '0'); 12061 return false; 12062 } 12063
12064 strip.innerHTML = stripHtml; 12065 strip.setAttribute('data-loaded', '1'); 12066 strip.setAttribute('data-has-variants', '1'); 12067 return true; 12068 } else { 12069 strip.setAttribute('data-loaded', '1'); 12070 strip.setAttribute('data-has-variants', '0'); 12071 return false; 12072 } 12073 } 12074 12075 12076 /* ============================================ 12077 SEPET IKONU TIKLAMASI 12078 ============================================ */ 12079 window.luxBagClick = function(ev, productId){ 12080 ev.preventDefault(); 12081 ev.stopPropagation(); 12082 12083 var card = document.getElementById('card-' + productId); 12084 var strip = document.getElementById('size-strip-' + productId); 12085 var bag = document.getElementById('lux-bag-' + productId); 12086 if(!card || !strip) return false; 12087 12088 /* Strip zaten yüklenmiÅse direkt davran */ 12089 if(strip.getAttribute('data-loaded') === '1'){ 12090 if(strip.getAttribute('data-has-variants') === '1'){ 12091 toggleStrip(productId); 12092 } else { 12093 addToCartSmart(productId); 12094 } 12095 return false; 12096 } 12097 12098 /* İlk tıklama - AJAX ile varyantları çek */ 12099 bag.classList.add('is-loading'); 12100 var productLink = card.getAttribute('data-lux-product-link'); 12101 12102 fetchVariants(productId, productLink, function(data){ 12103 bag.classList.remove('is-loading'); 12104 12105 var hasVariants = buildVariantUI(productId, data); 12106 12107 if(hasVariants){ 12108 /* Bedenler var - Åeridi aç */ 12109 toggleStrip(productId); 12110 } else { 12111 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 12112 addToCartSmart(productId); 12113 } 12114 }); 12115 12116 return false; 12117 }; 12118 12119 function toggleStrip(productId){ 12120 var strip = document.getElementById('size-strip-' + productId); 12121 var card = document.getElementById('card-' + productId); 12122 if(!strip) return; 12123 12124 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12125 if(s !== strip) s.classList.remove('open'); 12126 }); 12127 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12128 if(c !== card) c.classList.remove('sizes-open'); 12129 }); 12130 12131 strip.classList.toggle('open'); 12132 if(card) card.classList.toggle('sizes-open'); 12133 } 12134 12135 12136 /* ============================================ 12137 BEDEN TIKLAMASI 12138 ============================================ */ 12139 window.luxAddVariant = function(ev, elem){ 12140 ev.preventDefault(); 12141 ev.stopPropagation(); 12142 12143 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 12144 12145 var productId = elem.getAttribute('data-urun-id'); 12146 var varyantDeger = elem.getAttribute('data-varyant-deger'); 12147 12148 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12149 if(!holder) return false; 12150 12151 /* Seçilen bedeni ilk select'e yaz */ 12152 var firstSelect = holder.querySelector('select[data-variant="0"]'); 12153 if(firstSelect){ 12154 firstSelect.value = varyantDeger; 12155 if(typeof jQuery !== "undefined"){ 12156 jQuery(firstSelect).val(varyantDeger).trigger('change'); 12157 } 12158 } 12159 12160 /* DiÄer select'lere ilk geçerli deÄeri koy */ 12161 var allSelects = holder.querySelectorAll('select[data-variant]'); 12162 allSelects.forEach(function(sel, idx){ 12163 if(idx === 0) return; 12164 if(sel.value) return; 12165 var options = sel.querySelectorAll('option'); 12166 for(var i = 0; i < options.length; i++){ 12167 if(options[i].value){ 12168 sel.value = options[i].value; 12169 if(typeof jQuery !== "undefined"){ 12170 jQuery(sel).val(options[i].value).trigger('change'); 12171 } 12172 break; 12173 } 12174 } 12175 }); 12176 12177 /* Görsel feedback */ 12178 elem.classList.add('adding'); 12179 var originalText = elem.textContent; 12180 elem.textContent = 'â'; 12181 12182 /* Sepete ekle */ 12183 addToCartSmart(productId, { 12184 checkVariant: true, 12185 variantCount: allSelects.length, 12186 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 12187 }); 12188 12189 setTimeout(function(){ 12190 elem.textContent = originalText; 12191 elem.classList.remove('adding'); 12192 closeAll(); 12193 }, 800); 12194 12195 return false; 12196 }; 12197 12198 12199 /* ============================================ 12200 SEPETE EKLE - Modal killer ile 12201 ============================================ */ 12202 function addToCartSmart(productId, extraOptions){ 12203 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12204 12205 var options = { 12206 quantity: 1, 12207 hideNativeModal: 'lux-card-' + productId 12208 }; 12209 12210 if(extraOptions){
12211 Object.keys(extraOptions).forEach(function(k){ 12212 options[k] = extraOptions[k]; 12213 }); 12214 } else if(holder){ 12215 var selects = holder.querySelectorAll('select[data-variant]'); 12216 if(selects.length > 0){ 12217 options.checkVariant = true; 12218 options.variantCount = selects.length; 12219 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 12220 } 12221 } 12222 12223 startModalKill(2000); 12224 12225 if(typeof addCart === "function"){ 12226 try { 12227 addCart(productId, 'card', options); 12228 flashSuccess(productId); 12229 } catch(err){ 12230 console.error('Sepete ekleme hatası:', err); 12231 } 12232 } 12233 } 12234 12235})(); 12236</script>
12236</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 12237 data-lux-product-shell="1" 12238 data-lux-page="1"><style> 12239@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 12240 12241/* ===== VEZZA LUX CARD ===== */ 12242.card-product{ 12243 font-family:'Poppins',sans-serif; 12244 background:#fff !important; 12245 position:relative; 12246} 12247.card-product-inner{ 12248 background:transparent !important; 12249 position:relative; 12250} 12251.card-product .c-p-i-link, 12252.card-product a{ 12253 background:transparent !important; 12254} 12255.card-product-inner > div{ 12256 background:transparent !important; 12257} 12258.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 12259 background:transparent !important; 12260} 12261.card-product .card-product-content, 12262.card-product .price-group, 12263.card-product .prices{ 12264 background:transparent !important; 12265} 12266[class*="skeleton"], 12267[class*="placeholder"], 12268[class*="loading"]{ 12269 background:transparent !important; 12270} 12271 12272/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 12273.image-wrapper{ 12274 position:relative; 12275 width:100%; 12276 aspect-ratio:1/1; 12277 overflow:hidden; 12278 background:#fff !important; 12279} 12280 12281.image{ 12282 position:relative; 12283 width:100%; 12284 height:100%; 12285} 12286 12287.image-wrapper img{ 12288 width:100% !important; 12289 height:100% !important; 12290 object-fit:cover !important; 12291 object-position:center center !important; 12292 display:block; 12293 transition:transform .35s ease; 12294} 12295 12296/* ===== DISCOUNT ===== */ 12297.discount{ 12298 position:absolute; 12299 top:12px; 12300 left:12px; 12301 width:28px; 12302 height:48px; 12303 background:#e10b0b; 12304 color:#fff; 12305 font-size:12px; 12306 font-weight:600; 12307 display:flex; 12308 align-items:center; 12309 justify-content:center; 12310 writing-mode:vertical-rl; 12311 transform:rotate(180deg); 12312 letter-spacing:.5px; 12313 z-index:7; 12314} 12315 12316/* ===== FAV ===== */ 12317.lux-fav{ 12318 position:absolute; 12319 top:12px; 12320 right:12px; 12321 z-index:7; 12322} 12323.lux-fav a, 12324.lux-fav button{ 12325 background:transparent !important; 12326 border:0 !important; 12327 padding:0 !important; 12328 cursor:pointer; 12329 display:inline-flex; 12330 align-items:center; 12331 justify-content:center; 12332} 12333 12334/* ===== SEPET IKON ===== */ 12335.lux-bag{ 12336 position:absolute; 12337 bottom:12px; 12338 right:12px; 12339 z-index:7; 12340 width:34px; 12341 height:34px; 12342 display:inline-flex; 12343 align-items:center; 12344 justify-content:center; 12345 background:rgba(255,255,255,.92); 12346 border:1px solid rgba(0,0,0,.10); 12347 border-radius:10px; 12348 cursor:pointer; 12349 transition:.2s ease; 12350} 12351.lux-bag:hover{ 12352 background:#fff; 12353 border-color:rgba(0,0,0,.25); 12354} 12355.lux-bag.is-loading{ 12356 opacity:.6; 12357 cursor:wait; 12358} 12359.lux-bag.is-success{ 12360 background:#2e7d32 !important; 12361 border-color:#2e7d32 !important; 12362 color:#fff !important; 12363} 12364.card-product.sizes-open .lux-bag{ 12365 opacity:0; 12366 pointer-events:none; 12367} 12368 12369/* Loading spinner */ 12370.lux-bag.is-loading i::before{ 12371 content:"â³"; 12372} 12373 12374/* ===== SIZE STRIP ===== */ 12375.size-strip{ 12376 width:100%; 12377 max-height:0; 12378 overflow:hidden; 12379 background:#fff; 12380 display:flex; 12381 flex-wrap:wrap; 12382 transition:max-height .3s ease, border-color .3s ease; 12383 border-top:1px solid transparent; 12384 border-bottom:1px solid transparent; 12385} 12386.size-strip.open{ 12387 max-height:200px; 12388 border-top-color:rgba(0,0,0,.08); 12389 border-bottom-color:rgba(0,0,0,.08); 12390} 12391.size-item{ 12392 flex:1 0 auto; 12393 min-width:38px; 12394 height:42px; 12395 display:flex; 12396 align-items:center; 12397 justify-content:center; 12398 font-size:13px; 12399 font-weight:500; 12400 color:#111 !important; 12401 cursor:pointer; 12402 user-select:none; 12403 background:transparent; 12404 transition:background .15s ease, color .15s ease; 12405 border-right:1px solid rgba(0,0,0,.08); 12406} 12407.size-item:last-child{ border-right:0; } 12408.size-item:hover:not(.disabled):not(.adding){ 12409 background:#000 !important; 12410 color:#fff !important; 12411} 12412.size-item.disabled{ 12413 color:#111 !important; 12414 text-decoration:line-through !important; 12415 opacity:.30 !important; 12416 cursor:not-allowed; 12417} 12418.size-item.adding{ 12419 background:#2e7d32 !important; 12420 color:#fff !important; 12421 cursor:wait; 12422} 12423 12424/* ===== META ===== */ 12425.lux-meta{ 12426 padding:12px 6px 6px; 12427 background:transparent !important; 12428} 12429.lux-brand{ 12430 font-size:16px; 12431 font-weight:600; 12432 color:#111; 12433 margin-bottom:2px; 12434} 12435.lux-title{ 12436 font-size:14px; 12437 font-weight:400; 12438 line-height:1.45; 12439 color:#111; 12440 margin:0; 12441} 12442.lux-price{ 12443 margin-top:10px; 12444 display:flex; 12445 gap:10px; 12446 align-items:baseline; 12447 background:transparent !important; 12448} 12449.lux-price .list-price{ 12450 font-size:14px; 12451 font-weight:400; 12452 color:#111; 12453 text-decoration:line-through; 12454} 12455.lux-price .sale-price{ 12456 font-size:16px; 12457 font-weight:600; 12458 color:#e10b0b; 12459} 12460 12461.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
12462.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 12463</style><div class="card-product" 12464 id="card-10269" 12465 data-lux-card-id="10269" 12466 data-lux-product-link="https://www.vezzalux.com/dior-939-siyah-erkek-ayakkabi" 12467 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/dior-939-siyah-erkek-ayakkabi" class="c-p-i-link" title="Dior 939 Siyah Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c99443afd-98053537-sw800sh800.webp" alt="Dior 939 Siyah Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c99443afd-98053537-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c9956a485-79012463-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" 12468 onclick="userProductFavourite('add', 10269)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 12469 id="lux-bag-10269" 12470 onclick="return luxBagClick(event, 10269);" 12471 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10269" style="display:none;"></div><div class="size-strip" id="size-strip-10269" data-loaded="0"></div><a href="https://www.vezzalux.com/dior-939-siyah-erkek-ayakkabi" class="c-p-i-link" title="Dior 939 Siyah Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Dior</div><div class="lux-title">Dior 939 Siyah Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.499,00 TL</div></div></div></a></div></div>
12471<script> 12472(function(){ 12473 12474 /* Bir kez kur */ 12475 if(window.__luxCardInit) return; 12476 window.__luxCardInit = true; 12477 12478 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 12479 window.__luxVariantCache = window.__luxVariantCache || {}; 12480 12481 function closeAll(){ 12482 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12483 s.classList.remove('open'); 12484 }); 12485 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12486 c.classList.remove('sizes-open'); 12487 }); 12488 } 12489 12490 function flashSuccess(productId){ 12491 var bag = document.getElementById('lux-bag-' + productId); 12492 if(!bag) return; 12493 bag.classList.add('is-success'); 12494 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 12495 } 12496 12497 /* DıŠtıklama - kapat */ 12498 document.addEventListener('click', function(e){ 12499 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 12500 if(!inside) closeAll(); 12501 }); 12502 12503 document.addEventListener('keydown', function(e){ 12504 if(e.key === 'Escape') closeAll(); 12505 }); 12506 12507 12508 /* ============================================ 12509 MODAL KILLER - yedek güvence 12510 ============================================ */ 12511 var LUX_MODAL_KILL_ACTIVE = false; 12512 12513 function killVisibleModals(){ 12514 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 12515 modals.forEach(function(m){ 12516 var id = (m.id || '').toLowerCase(); 12517 var txt = (m.textContent || '').toLowerCase(); 12518 var isCartModal = id.indexOf('cart') > -1 12519 || id.indexOf('variant') > -1 12520 || id.indexOf('fast') > -1 12521 || id.indexOf('urun') > -1 12522 || txt.indexOf('lütfen seçin') > -1; 12523 12524 if(isCartModal){ 12525 if(typeof jQuery !== 'undefined'){ 12526 try { jQuery(m).modal('hide'); } catch(e){} 12527 } 12528 m.classList.remove('show','in'); 12529 m.style.display = 'none'; 12530 } 12531 }); 12532 12533 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 12534 document.body.classList.remove('modal-open'); 12535 document.body.style.overflow = ''; 12536 document.body.style.paddingRight = ''; 12537 } 12538 12539 function startModalKill(durationMs){ 12540 if(LUX_MODAL_KILL_ACTIVE) return; 12541 LUX_MODAL_KILL_ACTIVE = true; 12542 killVisibleModals(); 12543 var interval = setInterval(killVisibleModals, 50); 12544 setTimeout(function(){ 12545 clearInterval(interval); 12546 LUX_MODAL_KILL_ACTIVE = false; 12547 }, durationMs || 2000); 12548 } 12549 12550 12551 /* ============================================ 12552 AJAX: Varyantları detay sayfasından çek 12553 ============================================ 12554 Ãrün detay sayfasının tam HTML'ini indir, 12555 DOMParser ile parse et, varyantları bul 12556 ============================================ */ 12557 function fetchVariants(productId, productLink, callback){ 12558 12559 /* Cache'te varsa hemen döndür */ 12560 if(window.__luxVariantCache[productId]){ 12561 callback(window.__luxVariantCache[productId]); 12562 return; 12563 } 12564 12565 fetch(productLink, { 12566 method: 'GET', 12567 credentials: 'same-origin', 12568 headers: { 'Accept': 'text/html' } 12569 }) 12570 .then(function(r){ return r.text(); }) 12571 .then(function(html){ 12572 var parser = new DOMParser(); 12573 var doc = parser.parseFromString(html, 'text/html'); 12574 12575 /* Detay sayfasındaki .variant-box'ı bul */ 12576 var variantBox = doc.querySelector('.variant-box'); 12577 if(!variantBox){ 12578 callback({ variants: [], error: 'no_variant_box' }); 12579 return; 12580 } 12581 12582 /* Her varyant grubu için select'leri ve option'ları oku */ 12583 var variants = []; 12584 var variantLis = variantBox.querySelectorAll('.variant'); 12585 12586 variantLis.forEach(function(li, idx){ 12587 var nameEl = li.querySelector('.name'); 12588 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 12589 12590 var values = []; 12591 12592 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 12593 var optLinks = li.querySelectorAll('.options a'); 12594 12595 if(optLinks.length > 0){ 12596 optLinks.forEach(function(a){ 12597 /* Beden/renk deÄerini doÄru attribute'tan oku
12598 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 12599 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 12600 - textContent: fallback */ 12601 var deger = a.getAttribute('data-variant-value') 12602 || a.textContent.trim(); 12603 12604 /* Stok kontrolü - birden fazla yoldan kontrol et */ 12605 var isSoldOut = a.classList.contains('sold-out') 12606 || a.classList.contains('sold_out') 12607 || a.classList.contains('disabled') 12608 || a.classList.contains('stoksuz') 12609 || a.classList.contains('out-of-stock') 12610 || a.hasAttribute('disabled') 12611 || a.getAttribute('data-in-stock') === '0' 12612 || a.getAttribute('data-in-stock') === 'false' 12613 || a.getAttribute('data-stokta-var-mi') === '0' 12614 || a.getAttribute('data-stokta-var-mi') === 'false'; 12615 12616 values.push({ 12617 deger: deger, 12618 inStock: !isSoldOut 12619 }); 12620 }); 12621 } else { 12622 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 12623 var select = li.querySelector('select'); 12624 if(select){ 12625 var opts = select.querySelectorAll('option'); 12626 opts.forEach(function(o){ 12627 if(!o.value) return; 12628 values.push({ 12629 deger: o.value, 12630 inStock: !o.disabled 12631 }); 12632 }); 12633 } 12634 } 12635 12636 variants.push({ 12637 index: idx, 12638 baslik: name, 12639 values: values 12640 }); 12641 }); 12642 12643 var result = { variants: variants }; 12644 window.__luxVariantCache[productId] = result; 12645 callback(result); 12646 }) 12647 .catch(function(err){ 12648 console.error('Varyant çekme hatası:', err); 12649 callback({ variants: [], error: 'fetch_failed' }); 12650 }); 12651 } 12652 12653 12654 /* ============================================ 12655 Beden Åeridini ve gizli variant-box'ı oluÅtur 12656 ============================================ */ 12657 function buildVariantUI(productId, data){ 12658 var card = document.getElementById('card-' + productId); 12659 if(!card) return false; 12660 12661 var holder = card.querySelector('.lux-variant-box'); 12662 var strip = document.getElementById('size-strip-' + productId); 12663 if(!holder || !strip) return false; 12664 12665 if(!data.variants || data.variants.length === 0){ 12666 /* Varyant yok */ 12667 return false; 12668 } 12669 12670 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 12671 var displayVariant = null;
12672 data.variants.forEach(function(v){ 12673 if(!displayVariant && v.values.length > 1){ 12674 displayVariant = v; 12675 } 12676 }); 12677 12678 /* Gizli variant-box HTML */ 12679 var html = '<div class="variant-box"><ul>'; 12680 data.variants.forEach(function(v){ 12681 html += '<li class="variant">'; 12682 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 12683 12684 if(v.values.length > 1){ 12685 html += '<option value="">Lütfen seçin</option>'; 12686 } 12687 12688 v.values.forEach(function(val, i){ 12689 var selected = (v.values.length === 1) ? ' selected' : ''; 12690 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 12691 }); 12692 12693 html += '</select></li>'; 12694 }); 12695 html += '</ul></div>'; 12696 12697 holder.innerHTML = html; 12698 holder.style.display = ''; 12699 12700 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 12701 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 12702 if(displayVariant){ 12703 var stripHtml = ''; 12704 var inStockCount = 0; 12705 12706 /* DEBUG - console'da gör */ 12707 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 12708 12709 displayVariant.values.forEach(function(val){ 12710 /* SADECE stokta olanları ekle */ 12711 if(val.inStock === true){ 12712 stripHtml += '<div class="size-item" ' 12713 + 'data-urun-id="' + productId + '" ' 12714 + 'data-varyant-deger="' + val.deger + '" ' 12715 + 'onclick="return luxAddVariant(event, this);">' 12716 + val.deger + '</div>'; 12717 inStockCount++; 12718 } 12719 }); 12720 12721 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 12722 if(inStockCount === 0){ 12723 strip.setAttribute('data-loaded', '1'); 12724 strip.setAttribute('data-has-variants', '0'); 12725 return false; 12726 } 12727
12728 strip.innerHTML = stripHtml; 12729 strip.setAttribute('data-loaded', '1'); 12730 strip.setAttribute('data-has-variants', '1'); 12731 return true; 12732 } else { 12733 strip.setAttribute('data-loaded', '1'); 12734 strip.setAttribute('data-has-variants', '0'); 12735 return false; 12736 } 12737 } 12738 12739 12740 /* ============================================ 12741 SEPET IKONU TIKLAMASI 12742 ============================================ */ 12743 window.luxBagClick = function(ev, productId){ 12744 ev.preventDefault(); 12745 ev.stopPropagation(); 12746 12747 var card = document.getElementById('card-' + productId); 12748 var strip = document.getElementById('size-strip-' + productId); 12749 var bag = document.getElementById('lux-bag-' + productId); 12750 if(!card || !strip) return false; 12751 12752 /* Strip zaten yüklenmiÅse direkt davran */ 12753 if(strip.getAttribute('data-loaded') === '1'){ 12754 if(strip.getAttribute('data-has-variants') === '1'){ 12755 toggleStrip(productId); 12756 } else { 12757 addToCartSmart(productId); 12758 } 12759 return false; 12760 } 12761 12762 /* İlk tıklama - AJAX ile varyantları çek */ 12763 bag.classList.add('is-loading'); 12764 var productLink = card.getAttribute('data-lux-product-link'); 12765 12766 fetchVariants(productId, productLink, function(data){ 12767 bag.classList.remove('is-loading'); 12768 12769 var hasVariants = buildVariantUI(productId, data); 12770 12771 if(hasVariants){ 12772 /* Bedenler var - Åeridi aç */ 12773 toggleStrip(productId); 12774 } else { 12775 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 12776 addToCartSmart(productId); 12777 } 12778 }); 12779 12780 return false; 12781 }; 12782 12783 function toggleStrip(productId){ 12784 var strip = document.getElementById('size-strip-' + productId); 12785 var card = document.getElementById('card-' + productId); 12786 if(!strip) return; 12787 12788 document.querySelectorAll('.size-strip.open').forEach(function(s){ 12789 if(s !== strip) s.classList.remove('open'); 12790 }); 12791 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 12792 if(c !== card) c.classList.remove('sizes-open'); 12793 }); 12794 12795 strip.classList.toggle('open'); 12796 if(card) card.classList.toggle('sizes-open'); 12797 } 12798 12799 12800 /* ============================================ 12801 BEDEN TIKLAMASI 12802 ============================================ */ 12803 window.luxAddVariant = function(ev, elem){ 12804 ev.preventDefault(); 12805 ev.stopPropagation(); 12806 12807 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 12808 12809 var productId = elem.getAttribute('data-urun-id'); 12810 var varyantDeger = elem.getAttribute('data-varyant-deger'); 12811 12812 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12813 if(!holder) return false; 12814 12815 /* Seçilen bedeni ilk select'e yaz */ 12816 var firstSelect = holder.querySelector('select[data-variant="0"]'); 12817 if(firstSelect){ 12818 firstSelect.value = varyantDeger; 12819 if(typeof jQuery !== "undefined"){ 12820 jQuery(firstSelect).val(varyantDeger).trigger('change'); 12821 } 12822 } 12823 12824 /* DiÄer select'lere ilk geçerli deÄeri koy */ 12825 var allSelects = holder.querySelectorAll('select[data-variant]'); 12826 allSelects.forEach(function(sel, idx){ 12827 if(idx === 0) return; 12828 if(sel.value) return; 12829 var options = sel.querySelectorAll('option'); 12830 for(var i = 0; i < options.length; i++){ 12831 if(options[i].value){ 12832 sel.value = options[i].value; 12833 if(typeof jQuery !== "undefined"){ 12834 jQuery(sel).val(options[i].value).trigger('change'); 12835 } 12836 break; 12837 } 12838 } 12839 }); 12840 12841 /* Görsel feedback */ 12842 elem.classList.add('adding'); 12843 var originalText = elem.textContent; 12844 elem.textContent = 'â'; 12845 12846 /* Sepete ekle */ 12847 addToCartSmart(productId, { 12848 checkVariant: true, 12849 variantCount: allSelects.length, 12850 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 12851 }); 12852 12853 setTimeout(function(){ 12854 elem.textContent = originalText; 12855 elem.classList.remove('adding'); 12856 closeAll(); 12857 }, 800); 12858 12859 return false; 12860 }; 12861 12862 12863 /* ============================================ 12864 SEPETE EKLE - Modal killer ile 12865 ============================================ */ 12866 function addToCartSmart(productId, extraOptions){ 12867 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 12868 12869 var options = { 12870 quantity: 1, 12871 hideNativeModal: 'lux-card-' + productId 12872 }; 12873 12874 if(extraOptions){
12875 Object.keys(extraOptions).forEach(function(k){ 12876 options[k] = extraOptions[k]; 12877 }); 12878 } else if(holder){ 12879 var selects = holder.querySelectorAll('select[data-variant]'); 12880 if(selects.length > 0){ 12881 options.checkVariant = true; 12882 options.variantCount = selects.length; 12883 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 12884 } 12885 } 12886 12887 startModalKill(2000); 12888 12889 if(typeof addCart === "function"){ 12890 try { 12891 addCart(productId, 'card', options); 12892 flashSuccess(productId); 12893 } catch(err){ 12894 console.error('Sepete ekleme hatası:', err); 12895 } 12896 } 12897 } 12898 12899})(); 12900</script>
12900</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 12901 data-lux-product-shell="1" 12902 data-lux-page="1"><style> 12903@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 12904 12905/* ===== VEZZA LUX CARD ===== */ 12906.card-product{ 12907 font-family:'Poppins',sans-serif; 12908 background:#fff !important; 12909 position:relative; 12910} 12911.card-product-inner{ 12912 background:transparent !important; 12913 position:relative; 12914} 12915.card-product .c-p-i-link, 12916.card-product a{ 12917 background:transparent !important; 12918} 12919.card-product-inner > div{ 12920 background:transparent !important; 12921} 12922.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 12923 background:transparent !important; 12924} 12925.card-product .card-product-content, 12926.card-product .price-group, 12927.card-product .prices{ 12928 background:transparent !important; 12929} 12930[class*="skeleton"], 12931[class*="placeholder"], 12932[class*="loading"]{ 12933 background:transparent !important; 12934} 12935 12936/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 12937.image-wrapper{ 12938 position:relative; 12939 width:100%; 12940 aspect-ratio:1/1; 12941 overflow:hidden; 12942 background:#fff !important; 12943} 12944 12945.image{ 12946 position:relative; 12947 width:100%; 12948 height:100%; 12949} 12950 12951.image-wrapper img{ 12952 width:100% !important; 12953 height:100% !important; 12954 object-fit:cover !important; 12955 object-position:center center !important; 12956 display:block; 12957 transition:transform .35s ease; 12958} 12959 12960/* ===== DISCOUNT ===== */ 12961.discount{ 12962 position:absolute; 12963 top:12px; 12964 left:12px; 12965 width:28px; 12966 height:48px; 12967 background:#e10b0b; 12968 color:#fff; 12969 font-size:12px; 12970 font-weight:600; 12971 display:flex; 12972 align-items:center; 12973 justify-content:center; 12974 writing-mode:vertical-rl; 12975 transform:rotate(180deg); 12976 letter-spacing:.5px; 12977 z-index:7; 12978} 12979 12980/* ===== FAV ===== */ 12981.lux-fav{ 12982 position:absolute; 12983 top:12px; 12984 right:12px; 12985 z-index:7; 12986} 12987.lux-fav a, 12988.lux-fav button{ 12989 background:transparent !important; 12990 border:0 !important; 12991 padding:0 !important; 12992 cursor:pointer; 12993 display:inline-flex; 12994 align-items:center; 12995 justify-content:center; 12996} 12997 12998/* ===== SEPET IKON ===== */ 12999.lux-bag{ 13000 position:absolute; 13001 bottom:12px; 13002 right:12px; 13003 z-index:7; 13004 width:34px; 13005 height:34px; 13006 display:inline-flex; 13007 align-items:center; 13008 justify-content:center; 13009 background:rgba(255,255,255,.92); 13010 border:1px solid rgba(0,0,0,.10); 13011 border-radius:10px; 13012 cursor:pointer; 13013 transition:.2s ease; 13014} 13015.lux-bag:hover{ 13016 background:#fff; 13017 border-color:rgba(0,0,0,.25); 13018} 13019.lux-bag.is-loading{ 13020 opacity:.6; 13021 cursor:wait; 13022} 13023.lux-bag.is-success{ 13024 background:#2e7d32 !important; 13025 border-color:#2e7d32 !important; 13026 color:#fff !important; 13027} 13028.card-product.sizes-open .lux-bag{ 13029 opacity:0; 13030 pointer-events:none; 13031} 13032 13033/* Loading spinner */ 13034.lux-bag.is-loading i::before{ 13035 content:"â³"; 13036} 13037 13038/* ===== SIZE STRIP ===== */ 13039.size-strip{ 13040 width:100%; 13041 max-height:0; 13042 overflow:hidden; 13043 background:#fff; 13044 display:flex; 13045 flex-wrap:wrap; 13046 transition:max-height .3s ease, border-color .3s ease; 13047 border-top:1px solid transparent; 13048 border-bottom:1px solid transparent; 13049} 13050.size-strip.open{ 13051 max-height:200px; 13052 border-top-color:rgba(0,0,0,.08); 13053 border-bottom-color:rgba(0,0,0,.08); 13054} 13055.size-item{ 13056 flex:1 0 auto; 13057 min-width:38px; 13058 height:42px; 13059 display:flex; 13060 align-items:center; 13061 justify-content:center; 13062 font-size:13px; 13063 font-weight:500; 13064 color:#111 !important; 13065 cursor:pointer; 13066 user-select:none; 13067 background:transparent; 13068 transition:background .15s ease, color .15s ease; 13069 border-right:1px solid rgba(0,0,0,.08); 13070} 13071.size-item:last-child{ border-right:0; } 13072.size-item:hover:not(.disabled):not(.adding){ 13073 background:#000 !important; 13074 color:#fff !important; 13075} 13076.size-item.disabled{ 13077 color:#111 !important; 13078 text-decoration:line-through !important; 13079 opacity:.30 !important; 13080 cursor:not-allowed; 13081} 13082.size-item.adding{ 13083 background:#2e7d32 !important; 13084 color:#fff !important; 13085 cursor:wait; 13086} 13087 13088/* ===== META ===== */ 13089.lux-meta{ 13090 padding:12px 6px 6px; 13091 background:transparent !important; 13092} 13093.lux-brand{ 13094 font-size:16px; 13095 font-weight:600; 13096 color:#111; 13097 margin-bottom:2px; 13098} 13099.lux-title{ 13100 font-size:14px; 13101 font-weight:400; 13102 line-height:1.45; 13103 color:#111; 13104 margin:0; 13105} 13106.lux-price{ 13107 margin-top:10px; 13108 display:flex; 13109 gap:10px; 13110 align-items:baseline; 13111 background:transparent !important; 13112} 13113.lux-price .list-price{ 13114 font-size:14px; 13115 font-weight:400; 13116 color:#111; 13117 text-decoration:line-through; 13118} 13119.lux-price .sale-price{ 13120 font-size:16px; 13121 font-weight:600; 13122 color:#e10b0b; 13123} 13124 13125.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
13126.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 13127</style><div class="card-product" 13128 id="card-10158" 13129 data-lux-card-id="10158" 13130 data-lux-product-link="https://www.vezzalux.com/gg-799-arkasi-gumus-erkek-ayakkabi" 13131 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><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" 13132 onclick="userProductFavourite('add', 10158)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 13133 id="lux-bag-10158" 13134 onclick="return luxBagClick(event, 10158);" 13135 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="sale-price">10.499,00 TL</div></div></div></a></div></div>
13135<script> 13136(function(){ 13137 13138 /* Bir kez kur */ 13139 if(window.__luxCardInit) return; 13140 window.__luxCardInit = true; 13141 13142 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 13143 window.__luxVariantCache = window.__luxVariantCache || {}; 13144 13145 function closeAll(){ 13146 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13147 s.classList.remove('open'); 13148 }); 13149 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13150 c.classList.remove('sizes-open'); 13151 }); 13152 } 13153 13154 function flashSuccess(productId){ 13155 var bag = document.getElementById('lux-bag-' + productId); 13156 if(!bag) return; 13157 bag.classList.add('is-success'); 13158 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 13159 } 13160 13161 /* DıŠtıklama - kapat */ 13162 document.addEventListener('click', function(e){ 13163 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 13164 if(!inside) closeAll(); 13165 }); 13166 13167 document.addEventListener('keydown', function(e){ 13168 if(e.key === 'Escape') closeAll(); 13169 }); 13170 13171 13172 /* ============================================ 13173 MODAL KILLER - yedek güvence 13174 ============================================ */ 13175 var LUX_MODAL_KILL_ACTIVE = false; 13176 13177 function killVisibleModals(){ 13178 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 13179 modals.forEach(function(m){ 13180 var id = (m.id || '').toLowerCase(); 13181 var txt = (m.textContent || '').toLowerCase(); 13182 var isCartModal = id.indexOf('cart') > -1 13183 || id.indexOf('variant') > -1 13184 || id.indexOf('fast') > -1 13185 || id.indexOf('urun') > -1 13186 || txt.indexOf('lütfen seçin') > -1; 13187 13188 if(isCartModal){ 13189 if(typeof jQuery !== 'undefined'){ 13190 try { jQuery(m).modal('hide'); } catch(e){} 13191 } 13192 m.classList.remove('show','in'); 13193 m.style.display = 'none'; 13194 } 13195 }); 13196 13197 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 13198 document.body.classList.remove('modal-open'); 13199 document.body.style.overflow = ''; 13200 document.body.style.paddingRight = ''; 13201 } 13202 13203 function startModalKill(durationMs){ 13204 if(LUX_MODAL_KILL_ACTIVE) return; 13205 LUX_MODAL_KILL_ACTIVE = true; 13206 killVisibleModals(); 13207 var interval = setInterval(killVisibleModals, 50); 13208 setTimeout(function(){ 13209 clearInterval(interval); 13210 LUX_MODAL_KILL_ACTIVE = false; 13211 }, durationMs || 2000); 13212 } 13213 13214 13215 /* ============================================ 13216 AJAX: Varyantları detay sayfasından çek 13217 ============================================ 13218 Ãrün detay sayfasının tam HTML'ini indir, 13219 DOMParser ile parse et, varyantları bul 13220 ============================================ */ 13221 function fetchVariants(productId, productLink, callback){ 13222 13223 /* Cache'te varsa hemen döndür */ 13224 if(window.__luxVariantCache[productId]){ 13225 callback(window.__luxVariantCache[productId]); 13226 return; 13227 } 13228 13229 fetch(productLink, { 13230 method: 'GET', 13231 credentials: 'same-origin', 13232 headers: { 'Accept': 'text/html' } 13233 }) 13234 .then(function(r){ return r.text(); }) 13235 .then(function(html){ 13236 var parser = new DOMParser(); 13237 var doc = parser.parseFromString(html, 'text/html'); 13238 13239 /* Detay sayfasındaki .variant-box'ı bul */ 13240 var variantBox = doc.querySelector('.variant-box'); 13241 if(!variantBox){ 13242 callback({ variants: [], error: 'no_variant_box' }); 13243 return; 13244 } 13245 13246 /* Her varyant grubu için select'leri ve option'ları oku */ 13247 var variants = []; 13248 var variantLis = variantBox.querySelectorAll('.variant'); 13249 13250 variantLis.forEach(function(li, idx){ 13251 var nameEl = li.querySelector('.name'); 13252 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 13253 13254 var values = []; 13255 13256 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 13257 var optLinks = li.querySelectorAll('.options a'); 13258 13259 if(optLinks.length > 0){ 13260 optLinks.forEach(function(a){ 13261 /* Beden/renk deÄerini doÄru attribute'tan oku
13262 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 13263 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 13264 - textContent: fallback */ 13265 var deger = a.getAttribute('data-variant-value') 13266 || a.textContent.trim(); 13267 13268 /* Stok kontrolü - birden fazla yoldan kontrol et */ 13269 var isSoldOut = a.classList.contains('sold-out') 13270 || a.classList.contains('sold_out') 13271 || a.classList.contains('disabled') 13272 || a.classList.contains('stoksuz') 13273 || a.classList.contains('out-of-stock') 13274 || a.hasAttribute('disabled') 13275 || a.getAttribute('data-in-stock') === '0' 13276 || a.getAttribute('data-in-stock') === 'false' 13277 || a.getAttribute('data-stokta-var-mi') === '0' 13278 || a.getAttribute('data-stokta-var-mi') === 'false'; 13279 13280 values.push({ 13281 deger: deger, 13282 inStock: !isSoldOut 13283 }); 13284 }); 13285 } else { 13286 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 13287 var select = li.querySelector('select'); 13288 if(select){ 13289 var opts = select.querySelectorAll('option'); 13290 opts.forEach(function(o){ 13291 if(!o.value) return; 13292 values.push({ 13293 deger: o.value, 13294 inStock: !o.disabled 13295 }); 13296 }); 13297 } 13298 } 13299 13300 variants.push({ 13301 index: idx, 13302 baslik: name, 13303 values: values 13304 }); 13305 }); 13306 13307 var result = { variants: variants }; 13308 window.__luxVariantCache[productId] = result; 13309 callback(result); 13310 }) 13311 .catch(function(err){ 13312 console.error('Varyant çekme hatası:', err); 13313 callback({ variants: [], error: 'fetch_failed' }); 13314 }); 13315 } 13316 13317 13318 /* ============================================ 13319 Beden Åeridini ve gizli variant-box'ı oluÅtur 13320 ============================================ */ 13321 function buildVariantUI(productId, data){ 13322 var card = document.getElementById('card-' + productId); 13323 if(!card) return false; 13324 13325 var holder = card.querySelector('.lux-variant-box'); 13326 var strip = document.getElementById('size-strip-' + productId); 13327 if(!holder || !strip) return false; 13328 13329 if(!data.variants || data.variants.length === 0){ 13330 /* Varyant yok */ 13331 return false; 13332 } 13333 13334 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 13335 var displayVariant = null;
13336 data.variants.forEach(function(v){ 13337 if(!displayVariant && v.values.length > 1){ 13338 displayVariant = v; 13339 } 13340 }); 13341 13342 /* Gizli variant-box HTML */ 13343 var html = '<div class="variant-box"><ul>'; 13344 data.variants.forEach(function(v){ 13345 html += '<li class="variant">'; 13346 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 13347 13348 if(v.values.length > 1){ 13349 html += '<option value="">Lütfen seçin</option>'; 13350 } 13351 13352 v.values.forEach(function(val, i){ 13353 var selected = (v.values.length === 1) ? ' selected' : ''; 13354 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 13355 }); 13356 13357 html += '</select></li>'; 13358 }); 13359 html += '</ul></div>'; 13360 13361 holder.innerHTML = html; 13362 holder.style.display = ''; 13363 13364 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 13365 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 13366 if(displayVariant){ 13367 var stripHtml = ''; 13368 var inStockCount = 0; 13369 13370 /* DEBUG - console'da gör */ 13371 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 13372 13373 displayVariant.values.forEach(function(val){ 13374 /* SADECE stokta olanları ekle */ 13375 if(val.inStock === true){ 13376 stripHtml += '<div class="size-item" ' 13377 + 'data-urun-id="' + productId + '" ' 13378 + 'data-varyant-deger="' + val.deger + '" ' 13379 + 'onclick="return luxAddVariant(event, this);">' 13380 + val.deger + '</div>'; 13381 inStockCount++; 13382 } 13383 }); 13384 13385 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 13386 if(inStockCount === 0){ 13387 strip.setAttribute('data-loaded', '1'); 13388 strip.setAttribute('data-has-variants', '0'); 13389 return false; 13390 } 13391
13392 strip.innerHTML = stripHtml; 13393 strip.setAttribute('data-loaded', '1'); 13394 strip.setAttribute('data-has-variants', '1'); 13395 return true; 13396 } else { 13397 strip.setAttribute('data-loaded', '1'); 13398 strip.setAttribute('data-has-variants', '0'); 13399 return false; 13400 } 13401 } 13402 13403 13404 /* ============================================ 13405 SEPET IKONU TIKLAMASI 13406 ============================================ */ 13407 window.luxBagClick = function(ev, productId){ 13408 ev.preventDefault(); 13409 ev.stopPropagation(); 13410 13411 var card = document.getElementById('card-' + productId); 13412 var strip = document.getElementById('size-strip-' + productId); 13413 var bag = document.getElementById('lux-bag-' + productId); 13414 if(!card || !strip) return false; 13415 13416 /* Strip zaten yüklenmiÅse direkt davran */ 13417 if(strip.getAttribute('data-loaded') === '1'){ 13418 if(strip.getAttribute('data-has-variants') === '1'){ 13419 toggleStrip(productId); 13420 } else { 13421 addToCartSmart(productId); 13422 } 13423 return false; 13424 } 13425 13426 /* İlk tıklama - AJAX ile varyantları çek */ 13427 bag.classList.add('is-loading'); 13428 var productLink = card.getAttribute('data-lux-product-link'); 13429 13430 fetchVariants(productId, productLink, function(data){ 13431 bag.classList.remove('is-loading'); 13432 13433 var hasVariants = buildVariantUI(productId, data); 13434 13435 if(hasVariants){ 13436 /* Bedenler var - Åeridi aç */ 13437 toggleStrip(productId); 13438 } else { 13439 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 13440 addToCartSmart(productId); 13441 } 13442 }); 13443 13444 return false; 13445 }; 13446 13447 function toggleStrip(productId){ 13448 var strip = document.getElementById('size-strip-' + productId); 13449 var card = document.getElementById('card-' + productId); 13450 if(!strip) return; 13451 13452 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13453 if(s !== strip) s.classList.remove('open'); 13454 }); 13455 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13456 if(c !== card) c.classList.remove('sizes-open'); 13457 }); 13458 13459 strip.classList.toggle('open'); 13460 if(card) card.classList.toggle('sizes-open'); 13461 } 13462 13463 13464 /* ============================================ 13465 BEDEN TIKLAMASI 13466 ============================================ */ 13467 window.luxAddVariant = function(ev, elem){ 13468 ev.preventDefault(); 13469 ev.stopPropagation(); 13470 13471 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 13472 13473 var productId = elem.getAttribute('data-urun-id'); 13474 var varyantDeger = elem.getAttribute('data-varyant-deger'); 13475 13476 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 13477 if(!holder) return false; 13478 13479 /* Seçilen bedeni ilk select'e yaz */ 13480 var firstSelect = holder.querySelector('select[data-variant="0"]'); 13481 if(firstSelect){ 13482 firstSelect.value = varyantDeger; 13483 if(typeof jQuery !== "undefined"){ 13484 jQuery(firstSelect).val(varyantDeger).trigger('change'); 13485 } 13486 } 13487 13488 /* DiÄer select'lere ilk geçerli deÄeri koy */ 13489 var allSelects = holder.querySelectorAll('select[data-variant]'); 13490 allSelects.forEach(function(sel, idx){ 13491 if(idx === 0) return; 13492 if(sel.value) return; 13493 var options = sel.querySelectorAll('option'); 13494 for(var i = 0; i < options.length; i++){ 13495 if(options[i].value){ 13496 sel.value = options[i].value; 13497 if(typeof jQuery !== "undefined"){ 13498 jQuery(sel).val(options[i].value).trigger('change'); 13499 } 13500 break; 13501 } 13502 } 13503 }); 13504 13505 /* Görsel feedback */ 13506 elem.classList.add('adding'); 13507 var originalText = elem.textContent; 13508 elem.textContent = 'â'; 13509 13510 /* Sepete ekle */ 13511 addToCartSmart(productId, { 13512 checkVariant: true, 13513 variantCount: allSelects.length, 13514 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 13515 }); 13516 13517 setTimeout(function(){ 13518 elem.textContent = originalText; 13519 elem.classList.remove('adding'); 13520 closeAll(); 13521 }, 800); 13522 13523 return false; 13524 }; 13525 13526 13527 /* ============================================ 13528 SEPETE EKLE - Modal killer ile 13529 ============================================ */ 13530 function addToCartSmart(productId, extraOptions){ 13531 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 13532 13533 var options = { 13534 quantity: 1, 13535 hideNativeModal: 'lux-card-' + productId 13536 }; 13537 13538 if(extraOptions){
13539 Object.keys(extraOptions).forEach(function(k){ 13540 options[k] = extraOptions[k]; 13541 }); 13542 } else if(holder){ 13543 var selects = holder.querySelectorAll('select[data-variant]'); 13544 if(selects.length > 0){ 13545 options.checkVariant = true; 13546 options.variantCount = selects.length; 13547 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 13548 } 13549 } 13550 13551 startModalKill(2000); 13552 13553 if(typeof addCart === "function"){ 13554 try { 13555 addCart(productId, 'card', options); 13556 flashSuccess(productId); 13557 } catch(err){ 13558 console.error('Sepete ekleme hatası:', err); 13559 } 13560 } 13561 } 13562 13563})(); 13564</script>
13564</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 13565 data-lux-product-shell="1" 13566 data-lux-page="1"><style> 13567@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 13568 13569/* ===== VEZZA LUX CARD ===== */ 13570.card-product{ 13571 font-family:'Poppins',sans-serif; 13572 background:#fff !important; 13573 position:relative; 13574} 13575.card-product-inner{ 13576 background:transparent !important; 13577 position:relative; 13578} 13579.card-product .c-p-i-link, 13580.card-product a{ 13581 background:transparent !important; 13582} 13583.card-product-inner > div{ 13584 background:transparent !important; 13585} 13586.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 13587 background:transparent !important; 13588} 13589.card-product .card-product-content, 13590.card-product .price-group, 13591.card-product .prices{ 13592 background:transparent !important; 13593} 13594[class*="skeleton"], 13595[class*="placeholder"], 13596[class*="loading"]{ 13597 background:transparent !important; 13598} 13599 13600/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 13601.image-wrapper{ 13602 position:relative; 13603 width:100%; 13604 aspect-ratio:1/1; 13605 overflow:hidden; 13606 background:#fff !important; 13607} 13608 13609.image{ 13610 position:relative; 13611 width:100%; 13612 height:100%; 13613} 13614 13615.image-wrapper img{ 13616 width:100% !important; 13617 height:100% !important; 13618 object-fit:cover !important; 13619 object-position:center center !important; 13620 display:block; 13621 transition:transform .35s ease; 13622} 13623 13624/* ===== DISCOUNT ===== */ 13625.discount{ 13626 position:absolute; 13627 top:12px; 13628 left:12px; 13629 width:28px; 13630 height:48px; 13631 background:#e10b0b; 13632 color:#fff; 13633 font-size:12px; 13634 font-weight:600; 13635 display:flex; 13636 align-items:center; 13637 justify-content:center; 13638 writing-mode:vertical-rl; 13639 transform:rotate(180deg); 13640 letter-spacing:.5px; 13641 z-index:7; 13642} 13643 13644/* ===== FAV ===== */ 13645.lux-fav{ 13646 position:absolute; 13647 top:12px; 13648 right:12px; 13649 z-index:7; 13650} 13651.lux-fav a, 13652.lux-fav button{ 13653 background:transparent !important; 13654 border:0 !important; 13655 padding:0 !important; 13656 cursor:pointer; 13657 display:inline-flex; 13658 align-items:center; 13659 justify-content:center; 13660} 13661 13662/* ===== SEPET IKON ===== */ 13663.lux-bag{ 13664 position:absolute; 13665 bottom:12px; 13666 right:12px; 13667 z-index:7; 13668 width:34px; 13669 height:34px; 13670 display:inline-flex; 13671 align-items:center; 13672 justify-content:center; 13673 background:rgba(255,255,255,.92); 13674 border:1px solid rgba(0,0,0,.10); 13675 border-radius:10px; 13676 cursor:pointer; 13677 transition:.2s ease; 13678} 13679.lux-bag:hover{ 13680 background:#fff; 13681 border-color:rgba(0,0,0,.25); 13682} 13683.lux-bag.is-loading{ 13684 opacity:.6; 13685 cursor:wait; 13686} 13687.lux-bag.is-success{ 13688 background:#2e7d32 !important; 13689 border-color:#2e7d32 !important; 13690 color:#fff !important; 13691} 13692.card-product.sizes-open .lux-bag{ 13693 opacity:0; 13694 pointer-events:none; 13695} 13696 13697/* Loading spinner */ 13698.lux-bag.is-loading i::before{ 13699 content:"â³"; 13700} 13701 13702/* ===== SIZE STRIP ===== */ 13703.size-strip{ 13704 width:100%; 13705 max-height:0; 13706 overflow:hidden; 13707 background:#fff; 13708 display:flex; 13709 flex-wrap:wrap; 13710 transition:max-height .3s ease, border-color .3s ease; 13711 border-top:1px solid transparent; 13712 border-bottom:1px solid transparent; 13713} 13714.size-strip.open{ 13715 max-height:200px; 13716 border-top-color:rgba(0,0,0,.08); 13717 border-bottom-color:rgba(0,0,0,.08); 13718} 13719.size-item{ 13720 flex:1 0 auto; 13721 min-width:38px; 13722 height:42px; 13723 display:flex; 13724 align-items:center; 13725 justify-content:center; 13726 font-size:13px; 13727 font-weight:500; 13728 color:#111 !important; 13729 cursor:pointer; 13730 user-select:none; 13731 background:transparent; 13732 transition:background .15s ease, color .15s ease; 13733 border-right:1px solid rgba(0,0,0,.08); 13734} 13735.size-item:last-child{ border-right:0; } 13736.size-item:hover:not(.disabled):not(.adding){ 13737 background:#000 !important; 13738 color:#fff !important; 13739} 13740.size-item.disabled{ 13741 color:#111 !important; 13742 text-decoration:line-through !important; 13743 opacity:.30 !important; 13744 cursor:not-allowed; 13745} 13746.size-item.adding{ 13747 background:#2e7d32 !important; 13748 color:#fff !important; 13749 cursor:wait; 13750} 13751 13752/* ===== META ===== */ 13753.lux-meta{ 13754 padding:12px 6px 6px; 13755 background:transparent !important; 13756} 13757.lux-brand{ 13758 font-size:16px; 13759 font-weight:600; 13760 color:#111; 13761 margin-bottom:2px; 13762} 13763.lux-title{ 13764 font-size:14px; 13765 font-weight:400; 13766 line-height:1.45; 13767 color:#111; 13768 margin:0; 13769} 13770.lux-price{ 13771 margin-top:10px; 13772 display:flex; 13773 gap:10px; 13774 align-items:baseline; 13775 background:transparent !important; 13776} 13777.lux-price .list-price{ 13778 font-size:14px; 13779 font-weight:400; 13780 color:#111; 13781 text-decoration:line-through; 13782} 13783.lux-price .sale-price{ 13784 font-size:16px; 13785 font-weight:600; 13786 color:#e10b0b; 13787} 13788 13789.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
13790.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 13791</style><div class="card-product" 13792 id="card-10333" 13793 data-lux-card-id="10333" 13794 data-lux-product-link="https://www.vezzalux.com/cl-1013-siyah-kirmizi-erkek-ayakkabi" 13795 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/cl-1013-siyah-kirmizi-erkek-ayakkabi" class="c-p-i-link" title="Cl 1013 Siyah Kırmızı Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb38ab673-52518619-sw1200sh1200.webp" alt="Cl 1013 Siyah Kırmızı Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb38ab673-52518619-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cb3a51d21-23177296-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" 13796 onclick="userProductFavourite('add', 10333)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 13797 id="lux-bag-10333" 13798 onclick="return luxBagClick(event, 10333);" 13799 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10333" style="display:none;"></div><div class="size-strip" id="size-strip-10333" data-loaded="0"></div><a href="https://www.vezzalux.com/cl-1013-siyah-kirmizi-erkek-ayakkabi" class="c-p-i-link" title="Cl 1013 Siyah Kırmızı Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Christian Louboutin</div><div class="lux-title">Cl 1013 Siyah Kırmızı Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
13799<script> 13800(function(){ 13801 13802 /* Bir kez kur */ 13803 if(window.__luxCardInit) return; 13804 window.__luxCardInit = true; 13805 13806 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 13807 window.__luxVariantCache = window.__luxVariantCache || {}; 13808 13809 function closeAll(){ 13810 document.querySelectorAll('.size-strip.open').forEach(function(s){ 13811 s.classList.remove('open'); 13812 }); 13813 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 13814 c.classList.remove('sizes-open'); 13815 }); 13816 } 13817 13818 function flashSuccess(productId){ 13819 var bag = document.getElementById('lux-bag-' + productId); 13820 if(!bag) return; 13821 bag.classList.add('is-success'); 13822 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 13823 } 13824 13825 /* DıŠtıklama - kapat */ 13826 document.addEventListener('click', function(e){ 13827 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 13828 if(!inside) closeAll(); 13829 }); 13830 13831 document.addEventListener('keydown', function(e){ 13832 if(e.key === 'Escape') closeAll(); 13833 }); 13834 13835 13836 /* ============================================ 13837 MODAL KILLER - yedek güvence 13838 ============================================ */ 13839 var LUX_MODAL_KILL_ACTIVE = false; 13840 13841 function killVisibleModals(){ 13842 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 13843 modals.forEach(function(m){ 13844 var id = (m.id || '').toLowerCase(); 13845 var txt = (m.textContent || '').toLowerCase(); 13846 var isCartModal = id.indexOf('cart') > -1 13847 || id.indexOf('variant') > -1 13848 || id.indexOf('fast') > -1 13849 || id.indexOf('urun') > -1 13850 || txt.indexOf('lütfen seçin') > -1; 13851 13852 if(isCartModal){ 13853 if(typeof jQuery !== 'undefined'){ 13854 try { jQuery(m).modal('hide'); } catch(e){} 13855 } 13856 m.classList.remove('show','in'); 13857 m.style.display = 'none'; 13858 } 13859 }); 13860 13861 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 13862 document.body.classList.remove('modal-open'); 13863 document.body.style.overflow = ''; 13864 document.body.style.paddingRight = ''; 13865 } 13866 13867 function startModalKill(durationMs){ 13868 if(LUX_MODAL_KILL_ACTIVE) return; 13869 LUX_MODAL_KILL_ACTIVE = true; 13870 killVisibleModals(); 13871 var interval = setInterval(killVisibleModals, 50); 13872 setTimeout(function(){ 13873 clearInterval(interval); 13874 LUX_MODAL_KILL_ACTIVE = false; 13875 }, durationMs || 2000); 13876 } 13877 13878 13879 /* ============================================ 13880 AJAX: Varyantları detay sayfasından çek 13881 ============================================ 13882 Ãrün detay sayfasının tam HTML'ini indir, 13883 DOMParser ile parse et, varyantları bul 13884 ============================================ */ 13885 function fetchVariants(productId, productLink, callback){ 13886 13887 /* Cache'te varsa hemen döndür */ 13888 if(window.__luxVariantCache[productId]){ 13889 callback(window.__luxVariantCache[productId]); 13890 return; 13891 } 13892 13893 fetch(productLink, { 13894 method: 'GET', 13895 credentials: 'same-origin', 13896 headers: { 'Accept': 'text/html' } 13897 }) 13898 .then(function(r){ return r.text(); }) 13899 .then(function(html){ 13900 var parser = new DOMParser(); 13901 var doc = parser.parseFromString(html, 'text/html'); 13902 13903 /* Detay sayfasındaki .variant-box'ı bul */ 13904 var variantBox = doc.querySelector('.variant-box'); 13905 if(!variantBox){ 13906 callback({ variants: [], error: 'no_variant_box' }); 13907 return; 13908 } 13909 13910 /* Her varyant grubu için select'leri ve option'ları oku */ 13911 var variants = []; 13912 var variantLis = variantBox.querySelectorAll('.variant'); 13913 13914 variantLis.forEach(function(li, idx){ 13915 var nameEl = li.querySelector('.name'); 13916 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 13917 13918 var values = []; 13919 13920 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 13921 var optLinks = li.querySelectorAll('.options a'); 13922 13923 if(optLinks.length > 0){ 13924 optLinks.forEach(function(a){ 13925 /* Beden/renk deÄerini doÄru attribute'tan oku
13926 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 13927 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 13928 - textContent: fallback */ 13929 var deger = a.getAttribute('data-variant-value') 13930 || a.textContent.trim(); 13931 13932 /* Stok kontrolü - birden fazla yoldan kontrol et */ 13933 var isSoldOut = a.classList.contains('sold-out') 13934 || a.classList.contains('sold_out') 13935 || a.classList.contains('disabled') 13936 || a.classList.contains('stoksuz') 13937 || a.classList.contains('out-of-stock') 13938 || a.hasAttribute('disabled') 13939 || a.getAttribute('data-in-stock') === '0' 13940 || a.getAttribute('data-in-stock') === 'false' 13941 || a.getAttribute('data-stokta-var-mi') === '0' 13942 || a.getAttribute('data-stokta-var-mi') === 'false'; 13943 13944 values.push({ 13945 deger: deger, 13946 inStock: !isSoldOut 13947 }); 13948 }); 13949 } else { 13950 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 13951 var select = li.querySelector('select'); 13952 if(select){ 13953 var opts = select.querySelectorAll('option'); 13954 opts.forEach(function(o){ 13955 if(!o.value) return; 13956 values.push({ 13957 deger: o.value, 13958 inStock: !o.disabled 13959 }); 13960 }); 13961 } 13962 } 13963 13964 variants.push({ 13965 index: idx, 13966 baslik: name, 13967 values: values 13968 }); 13969 }); 13970 13971 var result = { variants: variants }; 13972 window.__luxVariantCache[productId] = result; 13973 callback(result); 13974 }) 13975 .catch(function(err){ 13976 console.error('Varyant çekme hatası:', err); 13977 callback({ variants: [], error: 'fetch_failed' }); 13978 }); 13979 } 13980 13981 13982 /* ============================================ 13983 Beden Åeridini ve gizli variant-box'ı oluÅtur 13984 ============================================ */ 13985 function buildVariantUI(productId, data){ 13986 var card = document.getElementById('card-' + productId); 13987 if(!card) return false; 13988 13989 var holder = card.querySelector('.lux-variant-box'); 13990 var strip = document.getElementById('size-strip-' + productId); 13991 if(!holder || !strip) return false; 13992 13993 if(!data.variants || data.variants.length === 0){ 13994 /* Varyant yok */ 13995 return false; 13996 } 13997 13998 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 13999 var displayVariant = null;
14000 data.variants.forEach(function(v){ 14001 if(!displayVariant && v.values.length > 1){ 14002 displayVariant = v; 14003 } 14004 }); 14005 14006 /* Gizli variant-box HTML */ 14007 var html = '<div class="variant-box"><ul>'; 14008 data.variants.forEach(function(v){ 14009 html += '<li class="variant">'; 14010 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 14011 14012 if(v.values.length > 1){ 14013 html += '<option value="">Lütfen seçin</option>'; 14014 } 14015 14016 v.values.forEach(function(val, i){ 14017 var selected = (v.values.length === 1) ? ' selected' : ''; 14018 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 14019 }); 14020 14021 html += '</select></li>'; 14022 }); 14023 html += '</ul></div>'; 14024 14025 holder.innerHTML = html; 14026 holder.style.display = ''; 14027 14028 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 14029 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 14030 if(displayVariant){ 14031 var stripHtml = ''; 14032 var inStockCount = 0; 14033 14034 /* DEBUG - console'da gör */ 14035 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 14036 14037 displayVariant.values.forEach(function(val){ 14038 /* SADECE stokta olanları ekle */ 14039 if(val.inStock === true){ 14040 stripHtml += '<div class="size-item" ' 14041 + 'data-urun-id="' + productId + '" ' 14042 + 'data-varyant-deger="' + val.deger + '" ' 14043 + 'onclick="return luxAddVariant(event, this);">' 14044 + val.deger + '</div>'; 14045 inStockCount++; 14046 } 14047 }); 14048 14049 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 14050 if(inStockCount === 0){ 14051 strip.setAttribute('data-loaded', '1'); 14052 strip.setAttribute('data-has-variants', '0'); 14053 return false; 14054 } 14055
14056 strip.innerHTML = stripHtml; 14057 strip.setAttribute('data-loaded', '1'); 14058 strip.setAttribute('data-has-variants', '1'); 14059 return true; 14060 } else { 14061 strip.setAttribute('data-loaded', '1'); 14062 strip.setAttribute('data-has-variants', '0'); 14063 return false; 14064 } 14065 } 14066 14067 14068 /* ============================================ 14069 SEPET IKONU TIKLAMASI 14070 ============================================ */ 14071 window.luxBagClick = function(ev, productId){ 14072 ev.preventDefault(); 14073 ev.stopPropagation(); 14074 14075 var card = document.getElementById('card-' + productId); 14076 var strip = document.getElementById('size-strip-' + productId); 14077 var bag = document.getElementById('lux-bag-' + productId); 14078 if(!card || !strip) return false; 14079 14080 /* Strip zaten yüklenmiÅse direkt davran */ 14081 if(strip.getAttribute('data-loaded') === '1'){ 14082 if(strip.getAttribute('data-has-variants') === '1'){ 14083 toggleStrip(productId); 14084 } else { 14085 addToCartSmart(productId); 14086 } 14087 return false; 14088 } 14089 14090 /* İlk tıklama - AJAX ile varyantları çek */ 14091 bag.classList.add('is-loading'); 14092 var productLink = card.getAttribute('data-lux-product-link'); 14093 14094 fetchVariants(productId, productLink, function(data){ 14095 bag.classList.remove('is-loading'); 14096 14097 var hasVariants = buildVariantUI(productId, data); 14098 14099 if(hasVariants){ 14100 /* Bedenler var - Åeridi aç */ 14101 toggleStrip(productId); 14102 } else { 14103 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 14104 addToCartSmart(productId); 14105 } 14106 }); 14107 14108 return false; 14109 }; 14110 14111 function toggleStrip(productId){ 14112 var strip = document.getElementById('size-strip-' + productId); 14113 var card = document.getElementById('card-' + productId); 14114 if(!strip) return; 14115 14116 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14117 if(s !== strip) s.classList.remove('open'); 14118 }); 14119 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14120 if(c !== card) c.classList.remove('sizes-open'); 14121 }); 14122 14123 strip.classList.toggle('open'); 14124 if(card) card.classList.toggle('sizes-open'); 14125 } 14126 14127 14128 /* ============================================ 14129 BEDEN TIKLAMASI 14130 ============================================ */ 14131 window.luxAddVariant = function(ev, elem){ 14132 ev.preventDefault(); 14133 ev.stopPropagation(); 14134 14135 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 14136 14137 var productId = elem.getAttribute('data-urun-id'); 14138 var varyantDeger = elem.getAttribute('data-varyant-deger'); 14139 14140 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14141 if(!holder) return false; 14142 14143 /* Seçilen bedeni ilk select'e yaz */ 14144 var firstSelect = holder.querySelector('select[data-variant="0"]'); 14145 if(firstSelect){ 14146 firstSelect.value = varyantDeger; 14147 if(typeof jQuery !== "undefined"){ 14148 jQuery(firstSelect).val(varyantDeger).trigger('change'); 14149 } 14150 } 14151 14152 /* DiÄer select'lere ilk geçerli deÄeri koy */ 14153 var allSelects = holder.querySelectorAll('select[data-variant]'); 14154 allSelects.forEach(function(sel, idx){ 14155 if(idx === 0) return; 14156 if(sel.value) return; 14157 var options = sel.querySelectorAll('option'); 14158 for(var i = 0; i < options.length; i++){ 14159 if(options[i].value){ 14160 sel.value = options[i].value; 14161 if(typeof jQuery !== "undefined"){ 14162 jQuery(sel).val(options[i].value).trigger('change'); 14163 } 14164 break; 14165 } 14166 } 14167 }); 14168 14169 /* Görsel feedback */ 14170 elem.classList.add('adding'); 14171 var originalText = elem.textContent; 14172 elem.textContent = 'â'; 14173 14174 /* Sepete ekle */ 14175 addToCartSmart(productId, { 14176 checkVariant: true, 14177 variantCount: allSelects.length, 14178 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 14179 }); 14180 14181 setTimeout(function(){ 14182 elem.textContent = originalText; 14183 elem.classList.remove('adding'); 14184 closeAll(); 14185 }, 800); 14186 14187 return false; 14188 }; 14189 14190 14191 /* ============================================ 14192 SEPETE EKLE - Modal killer ile 14193 ============================================ */ 14194 function addToCartSmart(productId, extraOptions){ 14195 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14196 14197 var options = { 14198 quantity: 1, 14199 hideNativeModal: 'lux-card-' + productId 14200 }; 14201 14202 if(extraOptions){
14203 Object.keys(extraOptions).forEach(function(k){ 14204 options[k] = extraOptions[k]; 14205 }); 14206 } else if(holder){ 14207 var selects = holder.querySelectorAll('select[data-variant]'); 14208 if(selects.length > 0){ 14209 options.checkVariant = true; 14210 options.variantCount = selects.length; 14211 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 14212 } 14213 } 14214 14215 startModalKill(2000); 14216 14217 if(typeof addCart === "function"){ 14218 try { 14219 addCart(productId, 'card', options); 14220 flashSuccess(productId); 14221 } catch(err){ 14222 console.error('Sepete ekleme hatası:', err); 14223 } 14224 } 14225 } 14226 14227})(); 14228</script>
14228</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 14229 data-lux-product-shell="1" 14230 data-lux-page="1"><style> 14231@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 14232 14233/* ===== VEZZA LUX CARD ===== */ 14234.card-product{ 14235 font-family:'Poppins',sans-serif; 14236 background:#fff !important; 14237 position:relative; 14238} 14239.card-product-inner{ 14240 background:transparent !important; 14241 position:relative; 14242} 14243.card-product .c-p-i-link, 14244.card-product a{ 14245 background:transparent !important; 14246} 14247.card-product-inner > div{ 14248 background:transparent !important; 14249} 14250.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 14251 background:transparent !important; 14252} 14253.card-product .card-product-content, 14254.card-product .price-group, 14255.card-product .prices{ 14256 background:transparent !important; 14257} 14258[class*="skeleton"], 14259[class*="placeholder"], 14260[class*="loading"]{ 14261 background:transparent !important; 14262} 14263 14264/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 14265.image-wrapper{ 14266 position:relative; 14267 width:100%; 14268 aspect-ratio:1/1; 14269 overflow:hidden; 14270 background:#fff !important; 14271} 14272 14273.image{ 14274 position:relative; 14275 width:100%; 14276 height:100%; 14277} 14278 14279.image-wrapper img{ 14280 width:100% !important; 14281 height:100% !important; 14282 object-fit:cover !important; 14283 object-position:center center !important; 14284 display:block; 14285 transition:transform .35s ease; 14286} 14287 14288/* ===== DISCOUNT ===== */ 14289.discount{ 14290 position:absolute; 14291 top:12px; 14292 left:12px; 14293 width:28px; 14294 height:48px; 14295 background:#e10b0b; 14296 color:#fff; 14297 font-size:12px; 14298 font-weight:600; 14299 display:flex; 14300 align-items:center; 14301 justify-content:center; 14302 writing-mode:vertical-rl; 14303 transform:rotate(180deg); 14304 letter-spacing:.5px; 14305 z-index:7; 14306} 14307 14308/* ===== FAV ===== */ 14309.lux-fav{ 14310 position:absolute; 14311 top:12px; 14312 right:12px; 14313 z-index:7; 14314} 14315.lux-fav a, 14316.lux-fav button{ 14317 background:transparent !important; 14318 border:0 !important; 14319 padding:0 !important; 14320 cursor:pointer; 14321 display:inline-flex; 14322 align-items:center; 14323 justify-content:center; 14324} 14325 14326/* ===== SEPET IKON ===== */ 14327.lux-bag{ 14328 position:absolute; 14329 bottom:12px; 14330 right:12px; 14331 z-index:7; 14332 width:34px; 14333 height:34px; 14334 display:inline-flex; 14335 align-items:center; 14336 justify-content:center; 14337 background:rgba(255,255,255,.92); 14338 border:1px solid rgba(0,0,0,.10); 14339 border-radius:10px; 14340 cursor:pointer; 14341 transition:.2s ease; 14342} 14343.lux-bag:hover{ 14344 background:#fff; 14345 border-color:rgba(0,0,0,.25); 14346} 14347.lux-bag.is-loading{ 14348 opacity:.6; 14349 cursor:wait; 14350} 14351.lux-bag.is-success{ 14352 background:#2e7d32 !important; 14353 border-color:#2e7d32 !important; 14354 color:#fff !important; 14355} 14356.card-product.sizes-open .lux-bag{ 14357 opacity:0; 14358 pointer-events:none; 14359} 14360 14361/* Loading spinner */ 14362.lux-bag.is-loading i::before{ 14363 content:"â³"; 14364} 14365 14366/* ===== SIZE STRIP ===== */ 14367.size-strip{ 14368 width:100%; 14369 max-height:0; 14370 overflow:hidden; 14371 background:#fff; 14372 display:flex; 14373 flex-wrap:wrap; 14374 transition:max-height .3s ease, border-color .3s ease; 14375 border-top:1px solid transparent; 14376 border-bottom:1px solid transparent; 14377} 14378.size-strip.open{ 14379 max-height:200px; 14380 border-top-color:rgba(0,0,0,.08); 14381 border-bottom-color:rgba(0,0,0,.08); 14382} 14383.size-item{ 14384 flex:1 0 auto; 14385 min-width:38px; 14386 height:42px; 14387 display:flex; 14388 align-items:center; 14389 justify-content:center; 14390 font-size:13px; 14391 font-weight:500; 14392 color:#111 !important; 14393 cursor:pointer; 14394 user-select:none; 14395 background:transparent; 14396 transition:background .15s ease, color .15s ease; 14397 border-right:1px solid rgba(0,0,0,.08); 14398} 14399.size-item:last-child{ border-right:0; } 14400.size-item:hover:not(.disabled):not(.adding){ 14401 background:#000 !important; 14402 color:#fff !important; 14403} 14404.size-item.disabled{ 14405 color:#111 !important; 14406 text-decoration:line-through !important; 14407 opacity:.30 !important; 14408 cursor:not-allowed; 14409} 14410.size-item.adding{ 14411 background:#2e7d32 !important; 14412 color:#fff !important; 14413 cursor:wait; 14414} 14415 14416/* ===== META ===== */ 14417.lux-meta{ 14418 padding:12px 6px 6px; 14419 background:transparent !important; 14420} 14421.lux-brand{ 14422 font-size:16px; 14423 font-weight:600; 14424 color:#111; 14425 margin-bottom:2px; 14426} 14427.lux-title{ 14428 font-size:14px; 14429 font-weight:400; 14430 line-height:1.45; 14431 color:#111; 14432 margin:0; 14433} 14434.lux-price{ 14435 margin-top:10px; 14436 display:flex; 14437 gap:10px; 14438 align-items:baseline; 14439 background:transparent !important; 14440} 14441.lux-price .list-price{ 14442 font-size:14px; 14443 font-weight:400; 14444 color:#111; 14445 text-decoration:line-through; 14446} 14447.lux-price .sale-price{ 14448 font-size:16px; 14449 font-weight:600; 14450 color:#e10b0b; 14451} 14452 14453.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
14454.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 14455</style><div class="card-product" 14456 id="card-10228" 14457 data-lux-card-id="10228" 14458 data-lux-product-link="https://www.vezzalux.com/lv-885-siyah-turuncu-bagcik-erkek-ayakkabi" 14459 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/lv-885-siyah-turuncu-bagcik-erkek-ayakkabi" class="c-p-i-link" title="Lv 885 Siyah Turuncu BaÄcık Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c89999b68-85964029-sw1200sh1200.webp" alt="Lv 885 Siyah Turuncu BaÄcık Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c89999b68-85964029-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c89799bda-26855059-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" 14460 onclick="userProductFavourite('add', 10228)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 14461 id="lux-bag-10228" 14462 onclick="return luxBagClick(event, 10228);" 14463 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10228" style="display:none;"></div><div class="size-strip" id="size-strip-10228" data-loaded="0"></div><a href="https://www.vezzalux.com/lv-885-siyah-turuncu-bagcik-erkek-ayakkabi" class="c-p-i-link" title="Lv 885 Siyah Turuncu BaÄcık Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Louis Vuitton</div><div class="lux-title">Lv 885 Siyah Turuncu BaÄcık Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
14463<script> 14464(function(){ 14465 14466 /* Bir kez kur */ 14467 if(window.__luxCardInit) return; 14468 window.__luxCardInit = true; 14469 14470 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 14471 window.__luxVariantCache = window.__luxVariantCache || {}; 14472 14473 function closeAll(){ 14474 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14475 s.classList.remove('open'); 14476 }); 14477 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14478 c.classList.remove('sizes-open'); 14479 }); 14480 } 14481 14482 function flashSuccess(productId){ 14483 var bag = document.getElementById('lux-bag-' + productId); 14484 if(!bag) return; 14485 bag.classList.add('is-success'); 14486 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 14487 } 14488 14489 /* DıŠtıklama - kapat */ 14490 document.addEventListener('click', function(e){ 14491 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 14492 if(!inside) closeAll(); 14493 }); 14494 14495 document.addEventListener('keydown', function(e){ 14496 if(e.key === 'Escape') closeAll(); 14497 }); 14498 14499 14500 /* ============================================ 14501 MODAL KILLER - yedek güvence 14502 ============================================ */ 14503 var LUX_MODAL_KILL_ACTIVE = false; 14504 14505 function killVisibleModals(){ 14506 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 14507 modals.forEach(function(m){ 14508 var id = (m.id || '').toLowerCase(); 14509 var txt = (m.textContent || '').toLowerCase(); 14510 var isCartModal = id.indexOf('cart') > -1 14511 || id.indexOf('variant') > -1 14512 || id.indexOf('fast') > -1 14513 || id.indexOf('urun') > -1 14514 || txt.indexOf('lütfen seçin') > -1; 14515 14516 if(isCartModal){ 14517 if(typeof jQuery !== 'undefined'){ 14518 try { jQuery(m).modal('hide'); } catch(e){} 14519 } 14520 m.classList.remove('show','in'); 14521 m.style.display = 'none'; 14522 } 14523 }); 14524 14525 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 14526 document.body.classList.remove('modal-open'); 14527 document.body.style.overflow = ''; 14528 document.body.style.paddingRight = ''; 14529 } 14530 14531 function startModalKill(durationMs){ 14532 if(LUX_MODAL_KILL_ACTIVE) return; 14533 LUX_MODAL_KILL_ACTIVE = true; 14534 killVisibleModals(); 14535 var interval = setInterval(killVisibleModals, 50); 14536 setTimeout(function(){ 14537 clearInterval(interval); 14538 LUX_MODAL_KILL_ACTIVE = false; 14539 }, durationMs || 2000); 14540 } 14541 14542 14543 /* ============================================ 14544 AJAX: Varyantları detay sayfasından çek 14545 ============================================ 14546 Ãrün detay sayfasının tam HTML'ini indir, 14547 DOMParser ile parse et, varyantları bul 14548 ============================================ */ 14549 function fetchVariants(productId, productLink, callback){ 14550 14551 /* Cache'te varsa hemen döndür */ 14552 if(window.__luxVariantCache[productId]){ 14553 callback(window.__luxVariantCache[productId]); 14554 return; 14555 } 14556 14557 fetch(productLink, { 14558 method: 'GET', 14559 credentials: 'same-origin', 14560 headers: { 'Accept': 'text/html' } 14561 }) 14562 .then(function(r){ return r.text(); }) 14563 .then(function(html){ 14564 var parser = new DOMParser(); 14565 var doc = parser.parseFromString(html, 'text/html'); 14566 14567 /* Detay sayfasındaki .variant-box'ı bul */ 14568 var variantBox = doc.querySelector('.variant-box'); 14569 if(!variantBox){ 14570 callback({ variants: [], error: 'no_variant_box' }); 14571 return; 14572 } 14573 14574 /* Her varyant grubu için select'leri ve option'ları oku */ 14575 var variants = []; 14576 var variantLis = variantBox.querySelectorAll('.variant'); 14577 14578 variantLis.forEach(function(li, idx){ 14579 var nameEl = li.querySelector('.name'); 14580 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 14581 14582 var values = []; 14583 14584 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 14585 var optLinks = li.querySelectorAll('.options a'); 14586 14587 if(optLinks.length > 0){ 14588 optLinks.forEach(function(a){ 14589 /* Beden/renk deÄerini doÄru attribute'tan oku
14590 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 14591 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 14592 - textContent: fallback */ 14593 var deger = a.getAttribute('data-variant-value') 14594 || a.textContent.trim(); 14595 14596 /* Stok kontrolü - birden fazla yoldan kontrol et */ 14597 var isSoldOut = a.classList.contains('sold-out') 14598 || a.classList.contains('sold_out') 14599 || a.classList.contains('disabled') 14600 || a.classList.contains('stoksuz') 14601 || a.classList.contains('out-of-stock') 14602 || a.hasAttribute('disabled') 14603 || a.getAttribute('data-in-stock') === '0' 14604 || a.getAttribute('data-in-stock') === 'false' 14605 || a.getAttribute('data-stokta-var-mi') === '0' 14606 || a.getAttribute('data-stokta-var-mi') === 'false'; 14607 14608 values.push({ 14609 deger: deger, 14610 inStock: !isSoldOut 14611 }); 14612 }); 14613 } else { 14614 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 14615 var select = li.querySelector('select'); 14616 if(select){ 14617 var opts = select.querySelectorAll('option'); 14618 opts.forEach(function(o){ 14619 if(!o.value) return; 14620 values.push({ 14621 deger: o.value, 14622 inStock: !o.disabled 14623 }); 14624 }); 14625 } 14626 } 14627 14628 variants.push({ 14629 index: idx, 14630 baslik: name, 14631 values: values 14632 }); 14633 }); 14634 14635 var result = { variants: variants }; 14636 window.__luxVariantCache[productId] = result; 14637 callback(result); 14638 }) 14639 .catch(function(err){ 14640 console.error('Varyant çekme hatası:', err); 14641 callback({ variants: [], error: 'fetch_failed' }); 14642 }); 14643 } 14644 14645 14646 /* ============================================ 14647 Beden Åeridini ve gizli variant-box'ı oluÅtur 14648 ============================================ */ 14649 function buildVariantUI(productId, data){ 14650 var card = document.getElementById('card-' + productId); 14651 if(!card) return false; 14652 14653 var holder = card.querySelector('.lux-variant-box'); 14654 var strip = document.getElementById('size-strip-' + productId); 14655 if(!holder || !strip) return false; 14656 14657 if(!data.variants || data.variants.length === 0){ 14658 /* Varyant yok */ 14659 return false; 14660 } 14661 14662 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 14663 var displayVariant = null;
14664 data.variants.forEach(function(v){ 14665 if(!displayVariant && v.values.length > 1){ 14666 displayVariant = v; 14667 } 14668 }); 14669 14670 /* Gizli variant-box HTML */ 14671 var html = '<div class="variant-box"><ul>'; 14672 data.variants.forEach(function(v){ 14673 html += '<li class="variant">'; 14674 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 14675 14676 if(v.values.length > 1){ 14677 html += '<option value="">Lütfen seçin</option>'; 14678 } 14679 14680 v.values.forEach(function(val, i){ 14681 var selected = (v.values.length === 1) ? ' selected' : ''; 14682 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 14683 }); 14684 14685 html += '</select></li>'; 14686 }); 14687 html += '</ul></div>'; 14688 14689 holder.innerHTML = html; 14690 holder.style.display = ''; 14691 14692 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 14693 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 14694 if(displayVariant){ 14695 var stripHtml = ''; 14696 var inStockCount = 0; 14697 14698 /* DEBUG - console'da gör */ 14699 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 14700 14701 displayVariant.values.forEach(function(val){ 14702 /* SADECE stokta olanları ekle */ 14703 if(val.inStock === true){ 14704 stripHtml += '<div class="size-item" ' 14705 + 'data-urun-id="' + productId + '" ' 14706 + 'data-varyant-deger="' + val.deger + '" ' 14707 + 'onclick="return luxAddVariant(event, this);">' 14708 + val.deger + '</div>'; 14709 inStockCount++; 14710 } 14711 }); 14712 14713 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 14714 if(inStockCount === 0){ 14715 strip.setAttribute('data-loaded', '1'); 14716 strip.setAttribute('data-has-variants', '0'); 14717 return false; 14718 } 14719
14720 strip.innerHTML = stripHtml; 14721 strip.setAttribute('data-loaded', '1'); 14722 strip.setAttribute('data-has-variants', '1'); 14723 return true; 14724 } else { 14725 strip.setAttribute('data-loaded', '1'); 14726 strip.setAttribute('data-has-variants', '0'); 14727 return false; 14728 } 14729 } 14730 14731 14732 /* ============================================ 14733 SEPET IKONU TIKLAMASI 14734 ============================================ */ 14735 window.luxBagClick = function(ev, productId){ 14736 ev.preventDefault(); 14737 ev.stopPropagation(); 14738 14739 var card = document.getElementById('card-' + productId); 14740 var strip = document.getElementById('size-strip-' + productId); 14741 var bag = document.getElementById('lux-bag-' + productId); 14742 if(!card || !strip) return false; 14743 14744 /* Strip zaten yüklenmiÅse direkt davran */ 14745 if(strip.getAttribute('data-loaded') === '1'){ 14746 if(strip.getAttribute('data-has-variants') === '1'){ 14747 toggleStrip(productId); 14748 } else { 14749 addToCartSmart(productId); 14750 } 14751 return false; 14752 } 14753 14754 /* İlk tıklama - AJAX ile varyantları çek */ 14755 bag.classList.add('is-loading'); 14756 var productLink = card.getAttribute('data-lux-product-link'); 14757 14758 fetchVariants(productId, productLink, function(data){ 14759 bag.classList.remove('is-loading'); 14760 14761 var hasVariants = buildVariantUI(productId, data); 14762 14763 if(hasVariants){ 14764 /* Bedenler var - Åeridi aç */ 14765 toggleStrip(productId); 14766 } else { 14767 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 14768 addToCartSmart(productId); 14769 } 14770 }); 14771 14772 return false; 14773 }; 14774 14775 function toggleStrip(productId){ 14776 var strip = document.getElementById('size-strip-' + productId); 14777 var card = document.getElementById('card-' + productId); 14778 if(!strip) return; 14779 14780 document.querySelectorAll('.size-strip.open').forEach(function(s){ 14781 if(s !== strip) s.classList.remove('open'); 14782 }); 14783 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 14784 if(c !== card) c.classList.remove('sizes-open'); 14785 }); 14786 14787 strip.classList.toggle('open'); 14788 if(card) card.classList.toggle('sizes-open'); 14789 } 14790 14791 14792 /* ============================================ 14793 BEDEN TIKLAMASI 14794 ============================================ */ 14795 window.luxAddVariant = function(ev, elem){ 14796 ev.preventDefault(); 14797 ev.stopPropagation(); 14798 14799 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 14800 14801 var productId = elem.getAttribute('data-urun-id'); 14802 var varyantDeger = elem.getAttribute('data-varyant-deger'); 14803 14804 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14805 if(!holder) return false; 14806 14807 /* Seçilen bedeni ilk select'e yaz */ 14808 var firstSelect = holder.querySelector('select[data-variant="0"]'); 14809 if(firstSelect){ 14810 firstSelect.value = varyantDeger; 14811 if(typeof jQuery !== "undefined"){ 14812 jQuery(firstSelect).val(varyantDeger).trigger('change'); 14813 } 14814 } 14815 14816 /* DiÄer select'lere ilk geçerli deÄeri koy */ 14817 var allSelects = holder.querySelectorAll('select[data-variant]'); 14818 allSelects.forEach(function(sel, idx){ 14819 if(idx === 0) return; 14820 if(sel.value) return; 14821 var options = sel.querySelectorAll('option'); 14822 for(var i = 0; i < options.length; i++){ 14823 if(options[i].value){ 14824 sel.value = options[i].value; 14825 if(typeof jQuery !== "undefined"){ 14826 jQuery(sel).val(options[i].value).trigger('change'); 14827 } 14828 break; 14829 } 14830 } 14831 }); 14832 14833 /* Görsel feedback */ 14834 elem.classList.add('adding'); 14835 var originalText = elem.textContent; 14836 elem.textContent = 'â'; 14837 14838 /* Sepete ekle */ 14839 addToCartSmart(productId, { 14840 checkVariant: true, 14841 variantCount: allSelects.length, 14842 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 14843 }); 14844 14845 setTimeout(function(){ 14846 elem.textContent = originalText; 14847 elem.classList.remove('adding'); 14848 closeAll(); 14849 }, 800); 14850 14851 return false; 14852 }; 14853 14854 14855 /* ============================================ 14856 SEPETE EKLE - Modal killer ile 14857 ============================================ */ 14858 function addToCartSmart(productId, extraOptions){ 14859 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 14860 14861 var options = { 14862 quantity: 1, 14863 hideNativeModal: 'lux-card-' + productId 14864 }; 14865 14866 if(extraOptions){
14867 Object.keys(extraOptions).forEach(function(k){ 14868 options[k] = extraOptions[k]; 14869 }); 14870 } else if(holder){ 14871 var selects = holder.querySelectorAll('select[data-variant]'); 14872 if(selects.length > 0){ 14873 options.checkVariant = true; 14874 options.variantCount = selects.length; 14875 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 14876 } 14877 } 14878 14879 startModalKill(2000); 14880 14881 if(typeof addCart === "function"){ 14882 try { 14883 addCart(productId, 'card', options); 14884 flashSuccess(productId); 14885 } catch(err){ 14886 console.error('Sepete ekleme hatası:', err); 14887 } 14888 } 14889 } 14890 14891})(); 14892</script>
14892</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 14893 data-lux-product-shell="1" 14894 data-lux-page="1"><style> 14895@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 14896 14897/* ===== VEZZA LUX CARD ===== */ 14898.card-product{ 14899 font-family:'Poppins',sans-serif; 14900 background:#fff !important; 14901 position:relative; 14902} 14903.card-product-inner{ 14904 background:transparent !important; 14905 position:relative; 14906} 14907.card-product .c-p-i-link, 14908.card-product a{ 14909 background:transparent !important; 14910} 14911.card-product-inner > div{ 14912 background:transparent !important; 14913} 14914.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 14915 background:transparent !important; 14916} 14917.card-product .card-product-content, 14918.card-product .price-group, 14919.card-product .prices{ 14920 background:transparent !important; 14921} 14922[class*="skeleton"], 14923[class*="placeholder"], 14924[class*="loading"]{ 14925 background:transparent !important; 14926} 14927 14928/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 14929.image-wrapper{ 14930 position:relative; 14931 width:100%; 14932 aspect-ratio:1/1; 14933 overflow:hidden; 14934 background:#fff !important; 14935} 14936 14937.image{ 14938 position:relative; 14939 width:100%; 14940 height:100%; 14941} 14942 14943.image-wrapper img{ 14944 width:100% !important; 14945 height:100% !important; 14946 object-fit:cover !important; 14947 object-position:center center !important; 14948 display:block; 14949 transition:transform .35s ease; 14950} 14951 14952/* ===== DISCOUNT ===== */ 14953.discount{ 14954 position:absolute; 14955 top:12px; 14956 left:12px; 14957 width:28px; 14958 height:48px; 14959 background:#e10b0b; 14960 color:#fff; 14961 font-size:12px; 14962 font-weight:600; 14963 display:flex; 14964 align-items:center; 14965 justify-content:center; 14966 writing-mode:vertical-rl; 14967 transform:rotate(180deg); 14968 letter-spacing:.5px; 14969 z-index:7; 14970} 14971 14972/* ===== FAV ===== */ 14973.lux-fav{ 14974 position:absolute; 14975 top:12px; 14976 right:12px; 14977 z-index:7; 14978} 14979.lux-fav a, 14980.lux-fav button{ 14981 background:transparent !important; 14982 border:0 !important; 14983 padding:0 !important; 14984 cursor:pointer; 14985 display:inline-flex; 14986 align-items:center; 14987 justify-content:center; 14988} 14989 14990/* ===== SEPET IKON ===== */ 14991.lux-bag{ 14992 position:absolute; 14993 bottom:12px; 14994 right:12px; 14995 z-index:7; 14996 width:34px; 14997 height:34px; 14998 display:inline-flex; 14999 align-items:center; 15000 justify-content:center; 15001 background:rgba(255,255,255,.92); 15002 border:1px solid rgba(0,0,0,.10); 15003 border-radius:10px; 15004 cursor:pointer; 15005 transition:.2s ease; 15006} 15007.lux-bag:hover{ 15008 background:#fff; 15009 border-color:rgba(0,0,0,.25); 15010} 15011.lux-bag.is-loading{ 15012 opacity:.6; 15013 cursor:wait; 15014} 15015.lux-bag.is-success{ 15016 background:#2e7d32 !important; 15017 border-color:#2e7d32 !important; 15018 color:#fff !important; 15019} 15020.card-product.sizes-open .lux-bag{ 15021 opacity:0; 15022 pointer-events:none; 15023} 15024 15025/* Loading spinner */ 15026.lux-bag.is-loading i::before{ 15027 content:"â³"; 15028} 15029 15030/* ===== SIZE STRIP ===== */ 15031.size-strip{ 15032 width:100%; 15033 max-height:0; 15034 overflow:hidden; 15035 background:#fff; 15036 display:flex; 15037 flex-wrap:wrap; 15038 transition:max-height .3s ease, border-color .3s ease; 15039 border-top:1px solid transparent; 15040 border-bottom:1px solid transparent; 15041} 15042.size-strip.open{ 15043 max-height:200px; 15044 border-top-color:rgba(0,0,0,.08); 15045 border-bottom-color:rgba(0,0,0,.08); 15046} 15047.size-item{ 15048 flex:1 0 auto; 15049 min-width:38px; 15050 height:42px; 15051 display:flex; 15052 align-items:center; 15053 justify-content:center; 15054 font-size:13px; 15055 font-weight:500; 15056 color:#111 !important; 15057 cursor:pointer; 15058 user-select:none; 15059 background:transparent; 15060 transition:background .15s ease, color .15s ease; 15061 border-right:1px solid rgba(0,0,0,.08); 15062} 15063.size-item:last-child{ border-right:0; } 15064.size-item:hover:not(.disabled):not(.adding){ 15065 background:#000 !important; 15066 color:#fff !important; 15067} 15068.size-item.disabled{ 15069 color:#111 !important; 15070 text-decoration:line-through !important; 15071 opacity:.30 !important; 15072 cursor:not-allowed; 15073} 15074.size-item.adding{ 15075 background:#2e7d32 !important; 15076 color:#fff !important; 15077 cursor:wait; 15078} 15079 15080/* ===== META ===== */ 15081.lux-meta{ 15082 padding:12px 6px 6px; 15083 background:transparent !important; 15084} 15085.lux-brand{ 15086 font-size:16px; 15087 font-weight:600; 15088 color:#111; 15089 margin-bottom:2px; 15090} 15091.lux-title{ 15092 font-size:14px; 15093 font-weight:400; 15094 line-height:1.45; 15095 color:#111; 15096 margin:0; 15097} 15098.lux-price{ 15099 margin-top:10px; 15100 display:flex; 15101 gap:10px; 15102 align-items:baseline; 15103 background:transparent !important; 15104} 15105.lux-price .list-price{ 15106 font-size:14px; 15107 font-weight:400; 15108 color:#111; 15109 text-decoration:line-through; 15110} 15111.lux-price .sale-price{ 15112 font-size:16px; 15113 font-weight:600; 15114 color:#e10b0b; 15115} 15116 15117.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
15118.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 15119</style><div class="card-product" 15120 id="card-10294" 15121 data-lux-card-id="10294" 15122 data-lux-product-link="https://www.vezzalux.com/hermes-969-terlik-bej-erkek-ayakkabi" 15123 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/hermes-969-terlik-bej-erkek-ayakkabi" class="c-p-i-link" title="Hermes 969 Terlik Bej Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca30d6694-48562929-sw1200sh1200.webp" alt="Hermes 969 Terlik Bej Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca30d6694-48562929-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0ca32c7730-59336277-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" 15124 onclick="userProductFavourite('add', 10294)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 15125 id="lux-bag-10294" 15126 onclick="return luxBagClick(event, 10294);" 15127 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10294" style="display:none;"></div><div class="size-strip" id="size-strip-10294" data-loaded="0"></div><a href="https://www.vezzalux.com/hermes-969-terlik-bej-erkek-ayakkabi" class="c-p-i-link" title="Hermes 969 Terlik Bej Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Hermes</div><div class="lux-title">Hermes 969 Terlik Bej Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
15127<script> 15128(function(){ 15129 15130 /* Bir kez kur */ 15131 if(window.__luxCardInit) return; 15132 window.__luxCardInit = true; 15133 15134 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 15135 window.__luxVariantCache = window.__luxVariantCache || {}; 15136 15137 function closeAll(){ 15138 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15139 s.classList.remove('open'); 15140 }); 15141 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15142 c.classList.remove('sizes-open'); 15143 }); 15144 } 15145 15146 function flashSuccess(productId){ 15147 var bag = document.getElementById('lux-bag-' + productId); 15148 if(!bag) return; 15149 bag.classList.add('is-success'); 15150 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 15151 } 15152 15153 /* DıŠtıklama - kapat */ 15154 document.addEventListener('click', function(e){ 15155 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 15156 if(!inside) closeAll(); 15157 }); 15158 15159 document.addEventListener('keydown', function(e){ 15160 if(e.key === 'Escape') closeAll(); 15161 }); 15162 15163 15164 /* ============================================ 15165 MODAL KILLER - yedek güvence 15166 ============================================ */ 15167 var LUX_MODAL_KILL_ACTIVE = false; 15168 15169 function killVisibleModals(){ 15170 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 15171 modals.forEach(function(m){ 15172 var id = (m.id || '').toLowerCase(); 15173 var txt = (m.textContent || '').toLowerCase(); 15174 var isCartModal = id.indexOf('cart') > -1 15175 || id.indexOf('variant') > -1 15176 || id.indexOf('fast') > -1 15177 || id.indexOf('urun') > -1 15178 || txt.indexOf('lütfen seçin') > -1; 15179 15180 if(isCartModal){ 15181 if(typeof jQuery !== 'undefined'){ 15182 try { jQuery(m).modal('hide'); } catch(e){} 15183 } 15184 m.classList.remove('show','in'); 15185 m.style.display = 'none'; 15186 } 15187 }); 15188 15189 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 15190 document.body.classList.remove('modal-open'); 15191 document.body.style.overflow = ''; 15192 document.body.style.paddingRight = ''; 15193 } 15194 15195 function startModalKill(durationMs){ 15196 if(LUX_MODAL_KILL_ACTIVE) return; 15197 LUX_MODAL_KILL_ACTIVE = true; 15198 killVisibleModals(); 15199 var interval = setInterval(killVisibleModals, 50); 15200 setTimeout(function(){ 15201 clearInterval(interval); 15202 LUX_MODAL_KILL_ACTIVE = false; 15203 }, durationMs || 2000); 15204 } 15205 15206 15207 /* ============================================ 15208 AJAX: Varyantları detay sayfasından çek 15209 ============================================ 15210 Ãrün detay sayfasının tam HTML'ini indir, 15211 DOMParser ile parse et, varyantları bul 15212 ============================================ */ 15213 function fetchVariants(productId, productLink, callback){ 15214 15215 /* Cache'te varsa hemen döndür */ 15216 if(window.__luxVariantCache[productId]){ 15217 callback(window.__luxVariantCache[productId]); 15218 return; 15219 } 15220 15221 fetch(productLink, { 15222 method: 'GET', 15223 credentials: 'same-origin', 15224 headers: { 'Accept': 'text/html' } 15225 }) 15226 .then(function(r){ return r.text(); }) 15227 .then(function(html){ 15228 var parser = new DOMParser(); 15229 var doc = parser.parseFromString(html, 'text/html'); 15230 15231 /* Detay sayfasındaki .variant-box'ı bul */ 15232 var variantBox = doc.querySelector('.variant-box'); 15233 if(!variantBox){ 15234 callback({ variants: [], error: 'no_variant_box' }); 15235 return; 15236 } 15237 15238 /* Her varyant grubu için select'leri ve option'ları oku */ 15239 var variants = []; 15240 var variantLis = variantBox.querySelectorAll('.variant'); 15241 15242 variantLis.forEach(function(li, idx){ 15243 var nameEl = li.querySelector('.name'); 15244 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 15245 15246 var values = []; 15247 15248 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 15249 var optLinks = li.querySelectorAll('.options a'); 15250 15251 if(optLinks.length > 0){ 15252 optLinks.forEach(function(a){ 15253 /* Beden/renk deÄerini doÄru attribute'tan oku
15254 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 15255 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 15256 - textContent: fallback */ 15257 var deger = a.getAttribute('data-variant-value') 15258 || a.textContent.trim(); 15259 15260 /* Stok kontrolü - birden fazla yoldan kontrol et */ 15261 var isSoldOut = a.classList.contains('sold-out') 15262 || a.classList.contains('sold_out') 15263 || a.classList.contains('disabled') 15264 || a.classList.contains('stoksuz') 15265 || a.classList.contains('out-of-stock') 15266 || a.hasAttribute('disabled') 15267 || a.getAttribute('data-in-stock') === '0' 15268 || a.getAttribute('data-in-stock') === 'false' 15269 || a.getAttribute('data-stokta-var-mi') === '0' 15270 || a.getAttribute('data-stokta-var-mi') === 'false'; 15271 15272 values.push({ 15273 deger: deger, 15274 inStock: !isSoldOut 15275 }); 15276 }); 15277 } else { 15278 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 15279 var select = li.querySelector('select'); 15280 if(select){ 15281 var opts = select.querySelectorAll('option'); 15282 opts.forEach(function(o){ 15283 if(!o.value) return; 15284 values.push({ 15285 deger: o.value, 15286 inStock: !o.disabled 15287 }); 15288 }); 15289 } 15290 } 15291 15292 variants.push({ 15293 index: idx, 15294 baslik: name, 15295 values: values 15296 }); 15297 }); 15298 15299 var result = { variants: variants }; 15300 window.__luxVariantCache[productId] = result; 15301 callback(result); 15302 }) 15303 .catch(function(err){ 15304 console.error('Varyant çekme hatası:', err); 15305 callback({ variants: [], error: 'fetch_failed' }); 15306 }); 15307 } 15308 15309 15310 /* ============================================ 15311 Beden Åeridini ve gizli variant-box'ı oluÅtur 15312 ============================================ */ 15313 function buildVariantUI(productId, data){ 15314 var card = document.getElementById('card-' + productId); 15315 if(!card) return false; 15316 15317 var holder = card.querySelector('.lux-variant-box'); 15318 var strip = document.getElementById('size-strip-' + productId); 15319 if(!holder || !strip) return false; 15320 15321 if(!data.variants || data.variants.length === 0){ 15322 /* Varyant yok */ 15323 return false; 15324 } 15325 15326 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 15327 var displayVariant = null;
15328 data.variants.forEach(function(v){ 15329 if(!displayVariant && v.values.length > 1){ 15330 displayVariant = v; 15331 } 15332 }); 15333 15334 /* Gizli variant-box HTML */ 15335 var html = '<div class="variant-box"><ul>'; 15336 data.variants.forEach(function(v){ 15337 html += '<li class="variant">'; 15338 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 15339 15340 if(v.values.length > 1){ 15341 html += '<option value="">Lütfen seçin</option>'; 15342 } 15343 15344 v.values.forEach(function(val, i){ 15345 var selected = (v.values.length === 1) ? ' selected' : ''; 15346 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 15347 }); 15348 15349 html += '</select></li>'; 15350 }); 15351 html += '</ul></div>'; 15352 15353 holder.innerHTML = html; 15354 holder.style.display = ''; 15355 15356 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 15357 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 15358 if(displayVariant){ 15359 var stripHtml = ''; 15360 var inStockCount = 0; 15361 15362 /* DEBUG - console'da gör */ 15363 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 15364 15365 displayVariant.values.forEach(function(val){ 15366 /* SADECE stokta olanları ekle */ 15367 if(val.inStock === true){ 15368 stripHtml += '<div class="size-item" ' 15369 + 'data-urun-id="' + productId + '" ' 15370 + 'data-varyant-deger="' + val.deger + '" ' 15371 + 'onclick="return luxAddVariant(event, this);">' 15372 + val.deger + '</div>'; 15373 inStockCount++; 15374 } 15375 }); 15376 15377 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 15378 if(inStockCount === 0){ 15379 strip.setAttribute('data-loaded', '1'); 15380 strip.setAttribute('data-has-variants', '0'); 15381 return false; 15382 } 15383
15384 strip.innerHTML = stripHtml; 15385 strip.setAttribute('data-loaded', '1'); 15386 strip.setAttribute('data-has-variants', '1'); 15387 return true; 15388 } else { 15389 strip.setAttribute('data-loaded', '1'); 15390 strip.setAttribute('data-has-variants', '0'); 15391 return false; 15392 } 15393 } 15394 15395 15396 /* ============================================ 15397 SEPET IKONU TIKLAMASI 15398 ============================================ */ 15399 window.luxBagClick = function(ev, productId){ 15400 ev.preventDefault(); 15401 ev.stopPropagation(); 15402 15403 var card = document.getElementById('card-' + productId); 15404 var strip = document.getElementById('size-strip-' + productId); 15405 var bag = document.getElementById('lux-bag-' + productId); 15406 if(!card || !strip) return false; 15407 15408 /* Strip zaten yüklenmiÅse direkt davran */ 15409 if(strip.getAttribute('data-loaded') === '1'){ 15410 if(strip.getAttribute('data-has-variants') === '1'){ 15411 toggleStrip(productId); 15412 } else { 15413 addToCartSmart(productId); 15414 } 15415 return false; 15416 } 15417 15418 /* İlk tıklama - AJAX ile varyantları çek */ 15419 bag.classList.add('is-loading'); 15420 var productLink = card.getAttribute('data-lux-product-link'); 15421 15422 fetchVariants(productId, productLink, function(data){ 15423 bag.classList.remove('is-loading'); 15424 15425 var hasVariants = buildVariantUI(productId, data); 15426 15427 if(hasVariants){ 15428 /* Bedenler var - Åeridi aç */ 15429 toggleStrip(productId); 15430 } else { 15431 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 15432 addToCartSmart(productId); 15433 } 15434 }); 15435 15436 return false; 15437 }; 15438 15439 function toggleStrip(productId){ 15440 var strip = document.getElementById('size-strip-' + productId); 15441 var card = document.getElementById('card-' + productId); 15442 if(!strip) return; 15443 15444 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15445 if(s !== strip) s.classList.remove('open'); 15446 }); 15447 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15448 if(c !== card) c.classList.remove('sizes-open'); 15449 }); 15450 15451 strip.classList.toggle('open'); 15452 if(card) card.classList.toggle('sizes-open'); 15453 } 15454 15455 15456 /* ============================================ 15457 BEDEN TIKLAMASI 15458 ============================================ */ 15459 window.luxAddVariant = function(ev, elem){ 15460 ev.preventDefault(); 15461 ev.stopPropagation(); 15462 15463 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 15464 15465 var productId = elem.getAttribute('data-urun-id'); 15466 var varyantDeger = elem.getAttribute('data-varyant-deger'); 15467 15468 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 15469 if(!holder) return false; 15470 15471 /* Seçilen bedeni ilk select'e yaz */ 15472 var firstSelect = holder.querySelector('select[data-variant="0"]'); 15473 if(firstSelect){ 15474 firstSelect.value = varyantDeger; 15475 if(typeof jQuery !== "undefined"){ 15476 jQuery(firstSelect).val(varyantDeger).trigger('change'); 15477 } 15478 } 15479 15480 /* DiÄer select'lere ilk geçerli deÄeri koy */ 15481 var allSelects = holder.querySelectorAll('select[data-variant]'); 15482 allSelects.forEach(function(sel, idx){ 15483 if(idx === 0) return; 15484 if(sel.value) return; 15485 var options = sel.querySelectorAll('option'); 15486 for(var i = 0; i < options.length; i++){ 15487 if(options[i].value){ 15488 sel.value = options[i].value; 15489 if(typeof jQuery !== "undefined"){ 15490 jQuery(sel).val(options[i].value).trigger('change'); 15491 } 15492 break; 15493 } 15494 } 15495 }); 15496 15497 /* Görsel feedback */ 15498 elem.classList.add('adding'); 15499 var originalText = elem.textContent; 15500 elem.textContent = 'â'; 15501 15502 /* Sepete ekle */ 15503 addToCartSmart(productId, { 15504 checkVariant: true, 15505 variantCount: allSelects.length, 15506 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 15507 }); 15508 15509 setTimeout(function(){ 15510 elem.textContent = originalText; 15511 elem.classList.remove('adding'); 15512 closeAll(); 15513 }, 800); 15514 15515 return false; 15516 }; 15517 15518 15519 /* ============================================ 15520 SEPETE EKLE - Modal killer ile 15521 ============================================ */ 15522 function addToCartSmart(productId, extraOptions){ 15523 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 15524 15525 var options = { 15526 quantity: 1, 15527 hideNativeModal: 'lux-card-' + productId 15528 }; 15529 15530 if(extraOptions){
15531 Object.keys(extraOptions).forEach(function(k){ 15532 options[k] = extraOptions[k]; 15533 }); 15534 } else if(holder){ 15535 var selects = holder.querySelectorAll('select[data-variant]'); 15536 if(selects.length > 0){ 15537 options.checkVariant = true; 15538 options.variantCount = selects.length; 15539 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 15540 } 15541 } 15542 15543 startModalKill(2000); 15544 15545 if(typeof addCart === "function"){ 15546 try { 15547 addCart(productId, 'card', options); 15548 flashSuccess(productId); 15549 } catch(err){ 15550 console.error('Sepete ekleme hatası:', err); 15551 } 15552 } 15553 } 15554 15555})(); 15556</script>
15556</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 15557 data-lux-product-shell="1" 15558 data-lux-page="1"><style> 15559@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 15560 15561/* ===== VEZZA LUX CARD ===== */ 15562.card-product{ 15563 font-family:'Poppins',sans-serif; 15564 background:#fff !important; 15565 position:relative; 15566} 15567.card-product-inner{ 15568 background:transparent !important; 15569 position:relative; 15570} 15571.card-product .c-p-i-link, 15572.card-product a{ 15573 background:transparent !important; 15574} 15575.card-product-inner > div{ 15576 background:transparent !important; 15577} 15578.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 15579 background:transparent !important; 15580} 15581.card-product .card-product-content, 15582.card-product .price-group, 15583.card-product .prices{ 15584 background:transparent !important; 15585} 15586[class*="skeleton"], 15587[class*="placeholder"], 15588[class*="loading"]{ 15589 background:transparent !important; 15590} 15591 15592/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 15593.image-wrapper{ 15594 position:relative; 15595 width:100%; 15596 aspect-ratio:1/1; 15597 overflow:hidden; 15598 background:#fff !important; 15599} 15600 15601.image{ 15602 position:relative; 15603 width:100%; 15604 height:100%; 15605} 15606 15607.image-wrapper img{ 15608 width:100% !important; 15609 height:100% !important; 15610 object-fit:cover !important; 15611 object-position:center center !important; 15612 display:block; 15613 transition:transform .35s ease; 15614} 15615 15616/* ===== DISCOUNT ===== */ 15617.discount{ 15618 position:absolute; 15619 top:12px; 15620 left:12px; 15621 width:28px; 15622 height:48px; 15623 background:#e10b0b; 15624 color:#fff; 15625 font-size:12px; 15626 font-weight:600; 15627 display:flex; 15628 align-items:center; 15629 justify-content:center; 15630 writing-mode:vertical-rl; 15631 transform:rotate(180deg); 15632 letter-spacing:.5px; 15633 z-index:7; 15634} 15635 15636/* ===== FAV ===== */ 15637.lux-fav{ 15638 position:absolute; 15639 top:12px; 15640 right:12px; 15641 z-index:7; 15642} 15643.lux-fav a, 15644.lux-fav button{ 15645 background:transparent !important; 15646 border:0 !important; 15647 padding:0 !important; 15648 cursor:pointer; 15649 display:inline-flex; 15650 align-items:center; 15651 justify-content:center; 15652} 15653 15654/* ===== SEPET IKON ===== */ 15655.lux-bag{ 15656 position:absolute; 15657 bottom:12px; 15658 right:12px; 15659 z-index:7; 15660 width:34px; 15661 height:34px; 15662 display:inline-flex; 15663 align-items:center; 15664 justify-content:center; 15665 background:rgba(255,255,255,.92); 15666 border:1px solid rgba(0,0,0,.10); 15667 border-radius:10px; 15668 cursor:pointer; 15669 transition:.2s ease; 15670} 15671.lux-bag:hover{ 15672 background:#fff; 15673 border-color:rgba(0,0,0,.25); 15674} 15675.lux-bag.is-loading{ 15676 opacity:.6; 15677 cursor:wait; 15678} 15679.lux-bag.is-success{ 15680 background:#2e7d32 !important; 15681 border-color:#2e7d32 !important; 15682 color:#fff !important; 15683} 15684.card-product.sizes-open .lux-bag{ 15685 opacity:0; 15686 pointer-events:none; 15687} 15688 15689/* Loading spinner */ 15690.lux-bag.is-loading i::before{ 15691 content:"â³"; 15692} 15693 15694/* ===== SIZE STRIP ===== */ 15695.size-strip{ 15696 width:100%; 15697 max-height:0; 15698 overflow:hidden; 15699 background:#fff; 15700 display:flex; 15701 flex-wrap:wrap; 15702 transition:max-height .3s ease, border-color .3s ease; 15703 border-top:1px solid transparent; 15704 border-bottom:1px solid transparent; 15705} 15706.size-strip.open{ 15707 max-height:200px; 15708 border-top-color:rgba(0,0,0,.08); 15709 border-bottom-color:rgba(0,0,0,.08); 15710} 15711.size-item{ 15712 flex:1 0 auto; 15713 min-width:38px; 15714 height:42px; 15715 display:flex; 15716 align-items:center; 15717 justify-content:center; 15718 font-size:13px; 15719 font-weight:500; 15720 color:#111 !important; 15721 cursor:pointer; 15722 user-select:none; 15723 background:transparent; 15724 transition:background .15s ease, color .15s ease; 15725 border-right:1px solid rgba(0,0,0,.08); 15726} 15727.size-item:last-child{ border-right:0; } 15728.size-item:hover:not(.disabled):not(.adding){ 15729 background:#000 !important; 15730 color:#fff !important; 15731} 15732.size-item.disabled{ 15733 color:#111 !important; 15734 text-decoration:line-through !important; 15735 opacity:.30 !important; 15736 cursor:not-allowed; 15737} 15738.size-item.adding{ 15739 background:#2e7d32 !important; 15740 color:#fff !important; 15741 cursor:wait; 15742} 15743 15744/* ===== META ===== */ 15745.lux-meta{ 15746 padding:12px 6px 6px; 15747 background:transparent !important; 15748} 15749.lux-brand{ 15750 font-size:16px; 15751 font-weight:600; 15752 color:#111; 15753 margin-bottom:2px; 15754} 15755.lux-title{ 15756 font-size:14px; 15757 font-weight:400; 15758 line-height:1.45; 15759 color:#111; 15760 margin:0; 15761} 15762.lux-price{ 15763 margin-top:10px; 15764 display:flex; 15765 gap:10px; 15766 align-items:baseline; 15767 background:transparent !important; 15768} 15769.lux-price .list-price{ 15770 font-size:14px; 15771 font-weight:400; 15772 color:#111; 15773 text-decoration:line-through; 15774} 15775.lux-price .sale-price{ 15776 font-size:16px; 15777 font-weight:600; 15778 color:#e10b0b; 15779} 15780 15781.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
15782.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 15783</style><div class="card-product" 15784 id="card-10317" 15785 data-lux-card-id="10317" 15786 data-lux-product-link="https://www.vezzalux.com/lv-995-arkasi-siyah-beyaz-desenli-erkek-ayakkabi" 15787 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/lv-995-arkasi-siyah-beyaz-desenli-erkek-ayakkabi" class="c-p-i-link" title="Lv 995 Arkası Siyah Beyaz Desenli Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cacca7ae4-86124824-sw1200sh1200.webp" alt="Lv 995 Arkası Siyah Beyaz Desenli Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cacca7ae4-86124824-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0cace305b5-91968583-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" 15788 onclick="userProductFavourite('add', 10317)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 15789 id="lux-bag-10317" 15790 onclick="return luxBagClick(event, 10317);" 15791 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10317" style="display:none;"></div><div class="size-strip" id="size-strip-10317" data-loaded="0"></div><a href="https://www.vezzalux.com/lv-995-arkasi-siyah-beyaz-desenli-erkek-ayakkabi" class="c-p-i-link" title="Lv 995 Arkası Siyah Beyaz Desenli Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Louis Vuitton</div><div class="lux-title">Lv 995 Arkası Siyah Beyaz Desenli Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
15791<script> 15792(function(){ 15793 15794 /* Bir kez kur */ 15795 if(window.__luxCardInit) return; 15796 window.__luxCardInit = true; 15797 15798 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 15799 window.__luxVariantCache = window.__luxVariantCache || {}; 15800 15801 function closeAll(){ 15802 document.querySelectorAll('.size-strip.open').forEach(function(s){ 15803 s.classList.remove('open'); 15804 }); 15805 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 15806 c.classList.remove('sizes-open'); 15807 }); 15808 } 15809 15810 function flashSuccess(productId){ 15811 var bag = document.getElementById('lux-bag-' + productId); 15812 if(!bag) return; 15813 bag.classList.add('is-success'); 15814 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 15815 } 15816 15817 /* DıŠtıklama - kapat */ 15818 document.addEventListener('click', function(e){ 15819 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 15820 if(!inside) closeAll(); 15821 }); 15822 15823 document.addEventListener('keydown', function(e){ 15824 if(e.key === 'Escape') closeAll(); 15825 }); 15826 15827 15828 /* ============================================ 15829 MODAL KILLER - yedek güvence 15830 ============================================ */ 15831 var LUX_MODAL_KILL_ACTIVE = false; 15832 15833 function killVisibleModals(){ 15834 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 15835 modals.forEach(function(m){ 15836 var id = (m.id || '').toLowerCase(); 15837 var txt = (m.textContent || '').toLowerCase(); 15838 var isCartModal = id.indexOf('cart') > -1 15839 || id.indexOf('variant') > -1 15840 || id.indexOf('fast') > -1 15841 || id.indexOf('urun') > -1 15842 || txt.indexOf('lütfen seçin') > -1; 15843 15844 if(isCartModal){ 15845 if(typeof jQuery !== 'undefined'){ 15846 try { jQuery(m).modal('hide'); } catch(e){} 15847 } 15848 m.classList.remove('show','in'); 15849 m.style.display = 'none'; 15850 } 15851 }); 15852 15853 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 15854 document.body.classList.remove('modal-open'); 15855 document.body.style.overflow = ''; 15856 document.body.style.paddingRight = ''; 15857 } 15858 15859 function startModalKill(durationMs){ 15860 if(LUX_MODAL_KILL_ACTIVE) return; 15861 LUX_MODAL_KILL_ACTIVE = true; 15862 killVisibleModals(); 15863 var interval = setInterval(killVisibleModals, 50); 15864 setTimeout(function(){ 15865 clearInterval(interval); 15866 LUX_MODAL_KILL_ACTIVE = false; 15867 }, durationMs || 2000); 15868 } 15869 15870 15871 /* ============================================ 15872 AJAX: Varyantları detay sayfasından çek 15873 ============================================ 15874 Ãrün detay sayfasının tam HTML'ini indir, 15875 DOMParser ile parse et, varyantları bul 15876 ============================================ */ 15877 function fetchVariants(productId, productLink, callback){ 15878 15879 /* Cache'te varsa hemen döndür */ 15880 if(window.__luxVariantCache[productId]){ 15881 callback(window.__luxVariantCache[productId]); 15882 return; 15883 } 15884 15885 fetch(productLink, { 15886 method: 'GET', 15887 credentials: 'same-origin', 15888 headers: { 'Accept': 'text/html' } 15889 }) 15890 .then(function(r){ return r.text(); }) 15891 .then(function(html){ 15892 var parser = new DOMParser(); 15893 var doc = parser.parseFromString(html, 'text/html'); 15894 15895 /* Detay sayfasındaki .variant-box'ı bul */ 15896 var variantBox = doc.querySelector('.variant-box'); 15897 if(!variantBox){ 15898 callback({ variants: [], error: 'no_variant_box' }); 15899 return; 15900 } 15901 15902 /* Her varyant grubu için select'leri ve option'ları oku */ 15903 var variants = []; 15904 var variantLis = variantBox.querySelectorAll('.variant'); 15905 15906 variantLis.forEach(function(li, idx){ 15907 var nameEl = li.querySelector('.name'); 15908 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 15909 15910 var values = []; 15911 15912 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 15913 var optLinks = li.querySelectorAll('.options a'); 15914 15915 if(optLinks.length > 0){ 15916 optLinks.forEach(function(a){ 15917 /* Beden/renk deÄerini doÄru attribute'tan oku
15918 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 15919 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 15920 - textContent: fallback */ 15921 var deger = a.getAttribute('data-variant-value') 15922 || a.textContent.trim(); 15923 15924 /* Stok kontrolü - birden fazla yoldan kontrol et */ 15925 var isSoldOut = a.classList.contains('sold-out') 15926 || a.classList.contains('sold_out') 15927 || a.classList.contains('disabled') 15928 || a.classList.contains('stoksuz') 15929 || a.classList.contains('out-of-stock') 15930 || a.hasAttribute('disabled') 15931 || a.getAttribute('data-in-stock') === '0' 15932 || a.getAttribute('data-in-stock') === 'false' 15933 || a.getAttribute('data-stokta-var-mi') === '0' 15934 || a.getAttribute('data-stokta-var-mi') === 'false'; 15935 15936 values.push({ 15937 deger: deger, 15938 inStock: !isSoldOut 15939 }); 15940 }); 15941 } else { 15942 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 15943 var select = li.querySelector('select'); 15944 if(select){ 15945 var opts = select.querySelectorAll('option'); 15946 opts.forEach(function(o){ 15947 if(!o.value) return; 15948 values.push({ 15949 deger: o.value, 15950 inStock: !o.disabled 15951 }); 15952 }); 15953 } 15954 } 15955 15956 variants.push({ 15957 index: idx, 15958 baslik: name, 15959 values: values 15960 }); 15961 }); 15962 15963 var result = { variants: variants }; 15964 window.__luxVariantCache[productId] = result; 15965 callback(result); 15966 }) 15967 .catch(function(err){ 15968 console.error('Varyant çekme hatası:', err); 15969 callback({ variants: [], error: 'fetch_failed' }); 15970 }); 15971 } 15972 15973 15974 /* ============================================ 15975 Beden Åeridini ve gizli variant-box'ı oluÅtur 15976 ============================================ */ 15977 function buildVariantUI(productId, data){ 15978 var card = document.getElementById('card-' + productId); 15979 if(!card) return false; 15980 15981 var holder = card.querySelector('.lux-variant-box'); 15982 var strip = document.getElementById('size-strip-' + productId); 15983 if(!holder || !strip) return false; 15984 15985 if(!data.variants || data.variants.length === 0){ 15986 /* Varyant yok */ 15987 return false; 15988 } 15989 15990 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 15991 var displayVariant = null;
15992 data.variants.forEach(function(v){ 15993 if(!displayVariant && v.values.length > 1){ 15994 displayVariant = v; 15995 } 15996 }); 15997 15998 /* Gizli variant-box HTML */ 15999 var html = '<div class="variant-box"><ul>'; 16000 data.variants.forEach(function(v){ 16001 html += '<li class="variant">'; 16002 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 16003 16004 if(v.values.length > 1){ 16005 html += '<option value="">Lütfen seçin</option>'; 16006 } 16007 16008 v.values.forEach(function(val, i){ 16009 var selected = (v.values.length === 1) ? ' selected' : ''; 16010 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 16011 }); 16012 16013 html += '</select></li>'; 16014 }); 16015 html += '</ul></div>'; 16016 16017 holder.innerHTML = html; 16018 holder.style.display = ''; 16019 16020 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 16021 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 16022 if(displayVariant){ 16023 var stripHtml = ''; 16024 var inStockCount = 0; 16025 16026 /* DEBUG - console'da gör */ 16027 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 16028 16029 displayVariant.values.forEach(function(val){ 16030 /* SADECE stokta olanları ekle */ 16031 if(val.inStock === true){ 16032 stripHtml += '<div class="size-item" ' 16033 + 'data-urun-id="' + productId + '" ' 16034 + 'data-varyant-deger="' + val.deger + '" ' 16035 + 'onclick="return luxAddVariant(event, this);">' 16036 + val.deger + '</div>'; 16037 inStockCount++; 16038 } 16039 }); 16040 16041 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 16042 if(inStockCount === 0){ 16043 strip.setAttribute('data-loaded', '1'); 16044 strip.setAttribute('data-has-variants', '0'); 16045 return false; 16046 } 16047
16048 strip.innerHTML = stripHtml; 16049 strip.setAttribute('data-loaded', '1'); 16050 strip.setAttribute('data-has-variants', '1'); 16051 return true; 16052 } else { 16053 strip.setAttribute('data-loaded', '1'); 16054 strip.setAttribute('data-has-variants', '0'); 16055 return false; 16056 } 16057 } 16058 16059 16060 /* ============================================ 16061 SEPET IKONU TIKLAMASI 16062 ============================================ */ 16063 window.luxBagClick = function(ev, productId){ 16064 ev.preventDefault(); 16065 ev.stopPropagation(); 16066 16067 var card = document.getElementById('card-' + productId); 16068 var strip = document.getElementById('size-strip-' + productId); 16069 var bag = document.getElementById('lux-bag-' + productId); 16070 if(!card || !strip) return false; 16071 16072 /* Strip zaten yüklenmiÅse direkt davran */ 16073 if(strip.getAttribute('data-loaded') === '1'){ 16074 if(strip.getAttribute('data-has-variants') === '1'){ 16075 toggleStrip(productId); 16076 } else { 16077 addToCartSmart(productId); 16078 } 16079 return false; 16080 } 16081 16082 /* İlk tıklama - AJAX ile varyantları çek */ 16083 bag.classList.add('is-loading'); 16084 var productLink = card.getAttribute('data-lux-product-link'); 16085 16086 fetchVariants(productId, productLink, function(data){ 16087 bag.classList.remove('is-loading'); 16088 16089 var hasVariants = buildVariantUI(productId, data); 16090 16091 if(hasVariants){ 16092 /* Bedenler var - Åeridi aç */ 16093 toggleStrip(productId); 16094 } else { 16095 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 16096 addToCartSmart(productId); 16097 } 16098 }); 16099 16100 return false; 16101 }; 16102 16103 function toggleStrip(productId){ 16104 var strip = document.getElementById('size-strip-' + productId); 16105 var card = document.getElementById('card-' + productId); 16106 if(!strip) return; 16107 16108 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16109 if(s !== strip) s.classList.remove('open'); 16110 }); 16111 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16112 if(c !== card) c.classList.remove('sizes-open'); 16113 }); 16114 16115 strip.classList.toggle('open'); 16116 if(card) card.classList.toggle('sizes-open'); 16117 } 16118 16119 16120 /* ============================================ 16121 BEDEN TIKLAMASI 16122 ============================================ */ 16123 window.luxAddVariant = function(ev, elem){ 16124 ev.preventDefault(); 16125 ev.stopPropagation(); 16126 16127 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 16128 16129 var productId = elem.getAttribute('data-urun-id'); 16130 var varyantDeger = elem.getAttribute('data-varyant-deger'); 16131 16132 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16133 if(!holder) return false; 16134 16135 /* Seçilen bedeni ilk select'e yaz */ 16136 var firstSelect = holder.querySelector('select[data-variant="0"]'); 16137 if(firstSelect){ 16138 firstSelect.value = varyantDeger; 16139 if(typeof jQuery !== "undefined"){ 16140 jQuery(firstSelect).val(varyantDeger).trigger('change'); 16141 } 16142 } 16143 16144 /* DiÄer select'lere ilk geçerli deÄeri koy */ 16145 var allSelects = holder.querySelectorAll('select[data-variant]'); 16146 allSelects.forEach(function(sel, idx){ 16147 if(idx === 0) return; 16148 if(sel.value) return; 16149 var options = sel.querySelectorAll('option'); 16150 for(var i = 0; i < options.length; i++){ 16151 if(options[i].value){ 16152 sel.value = options[i].value; 16153 if(typeof jQuery !== "undefined"){ 16154 jQuery(sel).val(options[i].value).trigger('change'); 16155 } 16156 break; 16157 } 16158 } 16159 }); 16160 16161 /* Görsel feedback */ 16162 elem.classList.add('adding'); 16163 var originalText = elem.textContent; 16164 elem.textContent = 'â'; 16165 16166 /* Sepete ekle */ 16167 addToCartSmart(productId, { 16168 checkVariant: true, 16169 variantCount: allSelects.length, 16170 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 16171 }); 16172 16173 setTimeout(function(){ 16174 elem.textContent = originalText; 16175 elem.classList.remove('adding'); 16176 closeAll(); 16177 }, 800); 16178 16179 return false; 16180 }; 16181 16182 16183 /* ============================================ 16184 SEPETE EKLE - Modal killer ile 16185 ============================================ */ 16186 function addToCartSmart(productId, extraOptions){ 16187 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16188 16189 var options = { 16190 quantity: 1, 16191 hideNativeModal: 'lux-card-' + productId 16192 }; 16193 16194 if(extraOptions){
16195 Object.keys(extraOptions).forEach(function(k){ 16196 options[k] = extraOptions[k]; 16197 }); 16198 } else if(holder){ 16199 var selects = holder.querySelectorAll('select[data-variant]'); 16200 if(selects.length > 0){ 16201 options.checkVariant = true; 16202 options.variantCount = selects.length; 16203 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 16204 } 16205 } 16206 16207 startModalKill(2000); 16208 16209 if(typeof addCart === "function"){ 16210 try { 16211 addCart(productId, 'card', options); 16212 flashSuccess(productId); 16213 } catch(err){ 16214 console.error('Sepete ekleme hatası:', err); 16215 } 16216 } 16217 } 16218 16219})(); 16220</script>
16220</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 16221 data-lux-product-shell="1" 16222 data-lux-page="1"><style> 16223@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 16224 16225/* ===== VEZZA LUX CARD ===== */ 16226.card-product{ 16227 font-family:'Poppins',sans-serif; 16228 background:#fff !important; 16229 position:relative; 16230} 16231.card-product-inner{ 16232 background:transparent !important; 16233 position:relative; 16234} 16235.card-product .c-p-i-link, 16236.card-product a{ 16237 background:transparent !important; 16238} 16239.card-product-inner > div{ 16240 background:transparent !important; 16241} 16242.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 16243 background:transparent !important; 16244} 16245.card-product .card-product-content, 16246.card-product .price-group, 16247.card-product .prices{ 16248 background:transparent !important; 16249} 16250[class*="skeleton"], 16251[class*="placeholder"], 16252[class*="loading"]{ 16253 background:transparent !important; 16254} 16255 16256/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 16257.image-wrapper{ 16258 position:relative; 16259 width:100%; 16260 aspect-ratio:1/1; 16261 overflow:hidden; 16262 background:#fff !important; 16263} 16264 16265.image{ 16266 position:relative; 16267 width:100%; 16268 height:100%; 16269} 16270 16271.image-wrapper img{ 16272 width:100% !important; 16273 height:100% !important; 16274 object-fit:cover !important; 16275 object-position:center center !important; 16276 display:block; 16277 transition:transform .35s ease; 16278} 16279 16280/* ===== DISCOUNT ===== */ 16281.discount{ 16282 position:absolute; 16283 top:12px; 16284 left:12px; 16285 width:28px; 16286 height:48px; 16287 background:#e10b0b; 16288 color:#fff; 16289 font-size:12px; 16290 font-weight:600; 16291 display:flex; 16292 align-items:center; 16293 justify-content:center; 16294 writing-mode:vertical-rl; 16295 transform:rotate(180deg); 16296 letter-spacing:.5px; 16297 z-index:7; 16298} 16299 16300/* ===== FAV ===== */ 16301.lux-fav{ 16302 position:absolute; 16303 top:12px; 16304 right:12px; 16305 z-index:7; 16306} 16307.lux-fav a, 16308.lux-fav button{ 16309 background:transparent !important; 16310 border:0 !important; 16311 padding:0 !important; 16312 cursor:pointer; 16313 display:inline-flex; 16314 align-items:center; 16315 justify-content:center; 16316} 16317 16318/* ===== SEPET IKON ===== */ 16319.lux-bag{ 16320 position:absolute; 16321 bottom:12px; 16322 right:12px; 16323 z-index:7; 16324 width:34px; 16325 height:34px; 16326 display:inline-flex; 16327 align-items:center; 16328 justify-content:center; 16329 background:rgba(255,255,255,.92); 16330 border:1px solid rgba(0,0,0,.10); 16331 border-radius:10px; 16332 cursor:pointer; 16333 transition:.2s ease; 16334} 16335.lux-bag:hover{ 16336 background:#fff; 16337 border-color:rgba(0,0,0,.25); 16338} 16339.lux-bag.is-loading{ 16340 opacity:.6; 16341 cursor:wait; 16342} 16343.lux-bag.is-success{ 16344 background:#2e7d32 !important; 16345 border-color:#2e7d32 !important; 16346 color:#fff !important; 16347} 16348.card-product.sizes-open .lux-bag{ 16349 opacity:0; 16350 pointer-events:none; 16351} 16352 16353/* Loading spinner */ 16354.lux-bag.is-loading i::before{ 16355 content:"â³"; 16356} 16357 16358/* ===== SIZE STRIP ===== */ 16359.size-strip{ 16360 width:100%; 16361 max-height:0; 16362 overflow:hidden; 16363 background:#fff; 16364 display:flex; 16365 flex-wrap:wrap; 16366 transition:max-height .3s ease, border-color .3s ease; 16367 border-top:1px solid transparent; 16368 border-bottom:1px solid transparent; 16369} 16370.size-strip.open{ 16371 max-height:200px; 16372 border-top-color:rgba(0,0,0,.08); 16373 border-bottom-color:rgba(0,0,0,.08); 16374} 16375.size-item{ 16376 flex:1 0 auto; 16377 min-width:38px; 16378 height:42px; 16379 display:flex; 16380 align-items:center; 16381 justify-content:center; 16382 font-size:13px; 16383 font-weight:500; 16384 color:#111 !important; 16385 cursor:pointer; 16386 user-select:none; 16387 background:transparent; 16388 transition:background .15s ease, color .15s ease; 16389 border-right:1px solid rgba(0,0,0,.08); 16390} 16391.size-item:last-child{ border-right:0; } 16392.size-item:hover:not(.disabled):not(.adding){ 16393 background:#000 !important; 16394 color:#fff !important; 16395} 16396.size-item.disabled{ 16397 color:#111 !important; 16398 text-decoration:line-through !important; 16399 opacity:.30 !important; 16400 cursor:not-allowed; 16401} 16402.size-item.adding{ 16403 background:#2e7d32 !important; 16404 color:#fff !important; 16405 cursor:wait; 16406} 16407 16408/* ===== META ===== */ 16409.lux-meta{ 16410 padding:12px 6px 6px; 16411 background:transparent !important; 16412} 16413.lux-brand{ 16414 font-size:16px; 16415 font-weight:600; 16416 color:#111; 16417 margin-bottom:2px; 16418} 16419.lux-title{ 16420 font-size:14px; 16421 font-weight:400; 16422 line-height:1.45; 16423 color:#111; 16424 margin:0; 16425} 16426.lux-price{ 16427 margin-top:10px; 16428 display:flex; 16429 gap:10px; 16430 align-items:baseline; 16431 background:transparent !important; 16432} 16433.lux-price .list-price{ 16434 font-size:14px; 16435 font-weight:400; 16436 color:#111; 16437 text-decoration:line-through; 16438} 16439.lux-price .sale-price{ 16440 font-size:16px; 16441 font-weight:600; 16442 color:#e10b0b; 16443} 16444 16445.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
16446.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 16447</style><div class="card-product" 16448 id="card-10213" 16449 data-lux-card-id="10213" 16450 data-lux-product-link="https://www.vezzalux.com/lv-870-kot-erkek-ayakkabi" 16451 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/lv-870-kot-erkek-ayakkabi" class="c-p-i-link" title="Lv 870 Kot Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c838846be-25252411-sw1200sh1200.webp" alt="Lv 870 Kot Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c838846be-25252411-sw1200sh1200.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/69e0c834dbcee-9256114-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" 16452 onclick="userProductFavourite('add', 10213)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 16453 id="lux-bag-10213" 16454 onclick="return luxBagClick(event, 10213);" 16455 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10213" style="display:none;"></div><div class="size-strip" id="size-strip-10213" data-loaded="0"></div><a href="https://www.vezzalux.com/lv-870-kot-erkek-ayakkabi" class="c-p-i-link" title="Lv 870 Kot Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Louis Vuitton</div><div class="lux-title">Lv 870 Kot Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">12.500,00 TL</div></div></div></a></div></div>
16455<script> 16456(function(){ 16457 16458 /* Bir kez kur */ 16459 if(window.__luxCardInit) return; 16460 window.__luxCardInit = true; 16461 16462 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 16463 window.__luxVariantCache = window.__luxVariantCache || {}; 16464 16465 function closeAll(){ 16466 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16467 s.classList.remove('open'); 16468 }); 16469 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16470 c.classList.remove('sizes-open'); 16471 }); 16472 } 16473 16474 function flashSuccess(productId){ 16475 var bag = document.getElementById('lux-bag-' + productId); 16476 if(!bag) return; 16477 bag.classList.add('is-success'); 16478 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 16479 } 16480 16481 /* DıŠtıklama - kapat */ 16482 document.addEventListener('click', function(e){ 16483 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 16484 if(!inside) closeAll(); 16485 }); 16486 16487 document.addEventListener('keydown', function(e){ 16488 if(e.key === 'Escape') closeAll(); 16489 }); 16490 16491 16492 /* ============================================ 16493 MODAL KILLER - yedek güvence 16494 ============================================ */ 16495 var LUX_MODAL_KILL_ACTIVE = false; 16496 16497 function killVisibleModals(){ 16498 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 16499 modals.forEach(function(m){ 16500 var id = (m.id || '').toLowerCase(); 16501 var txt = (m.textContent || '').toLowerCase(); 16502 var isCartModal = id.indexOf('cart') > -1 16503 || id.indexOf('variant') > -1 16504 || id.indexOf('fast') > -1 16505 || id.indexOf('urun') > -1 16506 || txt.indexOf('lütfen seçin') > -1; 16507 16508 if(isCartModal){ 16509 if(typeof jQuery !== 'undefined'){ 16510 try { jQuery(m).modal('hide'); } catch(e){} 16511 } 16512 m.classList.remove('show','in'); 16513 m.style.display = 'none'; 16514 } 16515 }); 16516 16517 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 16518 document.body.classList.remove('modal-open'); 16519 document.body.style.overflow = ''; 16520 document.body.style.paddingRight = ''; 16521 } 16522 16523 function startModalKill(durationMs){ 16524 if(LUX_MODAL_KILL_ACTIVE) return; 16525 LUX_MODAL_KILL_ACTIVE = true; 16526 killVisibleModals(); 16527 var interval = setInterval(killVisibleModals, 50); 16528 setTimeout(function(){ 16529 clearInterval(interval); 16530 LUX_MODAL_KILL_ACTIVE = false; 16531 }, durationMs || 2000); 16532 } 16533 16534 16535 /* ============================================ 16536 AJAX: Varyantları detay sayfasından çek 16537 ============================================ 16538 Ãrün detay sayfasının tam HTML'ini indir, 16539 DOMParser ile parse et, varyantları bul 16540 ============================================ */ 16541 function fetchVariants(productId, productLink, callback){ 16542 16543 /* Cache'te varsa hemen döndür */ 16544 if(window.__luxVariantCache[productId]){ 16545 callback(window.__luxVariantCache[productId]); 16546 return; 16547 } 16548 16549 fetch(productLink, { 16550 method: 'GET', 16551 credentials: 'same-origin', 16552 headers: { 'Accept': 'text/html' } 16553 }) 16554 .then(function(r){ return r.text(); }) 16555 .then(function(html){ 16556 var parser = new DOMParser(); 16557 var doc = parser.parseFromString(html, 'text/html'); 16558 16559 /* Detay sayfasındaki .variant-box'ı bul */ 16560 var variantBox = doc.querySelector('.variant-box'); 16561 if(!variantBox){ 16562 callback({ variants: [], error: 'no_variant_box' }); 16563 return; 16564 } 16565 16566 /* Her varyant grubu için select'leri ve option'ları oku */ 16567 var variants = []; 16568 var variantLis = variantBox.querySelectorAll('.variant'); 16569 16570 variantLis.forEach(function(li, idx){ 16571 var nameEl = li.querySelector('.name'); 16572 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 16573 16574 var values = []; 16575 16576 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 16577 var optLinks = li.querySelectorAll('.options a'); 16578 16579 if(optLinks.length > 0){ 16580 optLinks.forEach(function(a){ 16581 /* Beden/renk deÄerini doÄru attribute'tan oku
16582 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 16583 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 16584 - textContent: fallback */ 16585 var deger = a.getAttribute('data-variant-value') 16586 || a.textContent.trim(); 16587 16588 /* Stok kontrolü - birden fazla yoldan kontrol et */ 16589 var isSoldOut = a.classList.contains('sold-out') 16590 || a.classList.contains('sold_out') 16591 || a.classList.contains('disabled') 16592 || a.classList.contains('stoksuz') 16593 || a.classList.contains('out-of-stock') 16594 || a.hasAttribute('disabled') 16595 || a.getAttribute('data-in-stock') === '0' 16596 || a.getAttribute('data-in-stock') === 'false' 16597 || a.getAttribute('data-stokta-var-mi') === '0' 16598 || a.getAttribute('data-stokta-var-mi') === 'false'; 16599 16600 values.push({ 16601 deger: deger, 16602 inStock: !isSoldOut 16603 }); 16604 }); 16605 } else { 16606 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 16607 var select = li.querySelector('select'); 16608 if(select){ 16609 var opts = select.querySelectorAll('option'); 16610 opts.forEach(function(o){ 16611 if(!o.value) return; 16612 values.push({ 16613 deger: o.value, 16614 inStock: !o.disabled 16615 }); 16616 }); 16617 } 16618 } 16619 16620 variants.push({ 16621 index: idx, 16622 baslik: name, 16623 values: values 16624 }); 16625 }); 16626 16627 var result = { variants: variants }; 16628 window.__luxVariantCache[productId] = result; 16629 callback(result); 16630 }) 16631 .catch(function(err){ 16632 console.error('Varyant çekme hatası:', err); 16633 callback({ variants: [], error: 'fetch_failed' }); 16634 }); 16635 } 16636 16637 16638 /* ============================================ 16639 Beden Åeridini ve gizli variant-box'ı oluÅtur 16640 ============================================ */ 16641 function buildVariantUI(productId, data){ 16642 var card = document.getElementById('card-' + productId); 16643 if(!card) return false; 16644 16645 var holder = card.querySelector('.lux-variant-box'); 16646 var strip = document.getElementById('size-strip-' + productId); 16647 if(!holder || !strip) return false; 16648 16649 if(!data.variants || data.variants.length === 0){ 16650 /* Varyant yok */ 16651 return false; 16652 } 16653 16654 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 16655 var displayVariant = null;
16656 data.variants.forEach(function(v){ 16657 if(!displayVariant && v.values.length > 1){ 16658 displayVariant = v; 16659 } 16660 }); 16661 16662 /* Gizli variant-box HTML */ 16663 var html = '<div class="variant-box"><ul>'; 16664 data.variants.forEach(function(v){ 16665 html += '<li class="variant">'; 16666 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 16667 16668 if(v.values.length > 1){ 16669 html += '<option value="">Lütfen seçin</option>'; 16670 } 16671 16672 v.values.forEach(function(val, i){ 16673 var selected = (v.values.length === 1) ? ' selected' : ''; 16674 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 16675 }); 16676 16677 html += '</select></li>'; 16678 }); 16679 html += '</ul></div>'; 16680 16681 holder.innerHTML = html; 16682 holder.style.display = ''; 16683 16684 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 16685 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 16686 if(displayVariant){ 16687 var stripHtml = ''; 16688 var inStockCount = 0; 16689 16690 /* DEBUG - console'da gör */ 16691 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 16692 16693 displayVariant.values.forEach(function(val){ 16694 /* SADECE stokta olanları ekle */ 16695 if(val.inStock === true){ 16696 stripHtml += '<div class="size-item" ' 16697 + 'data-urun-id="' + productId + '" ' 16698 + 'data-varyant-deger="' + val.deger + '" ' 16699 + 'onclick="return luxAddVariant(event, this);">' 16700 + val.deger + '</div>'; 16701 inStockCount++; 16702 } 16703 }); 16704 16705 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 16706 if(inStockCount === 0){ 16707 strip.setAttribute('data-loaded', '1'); 16708 strip.setAttribute('data-has-variants', '0'); 16709 return false; 16710 } 16711
16712 strip.innerHTML = stripHtml; 16713 strip.setAttribute('data-loaded', '1'); 16714 strip.setAttribute('data-has-variants', '1'); 16715 return true; 16716 } else { 16717 strip.setAttribute('data-loaded', '1'); 16718 strip.setAttribute('data-has-variants', '0'); 16719 return false; 16720 } 16721 } 16722 16723 16724 /* ============================================ 16725 SEPET IKONU TIKLAMASI 16726 ============================================ */ 16727 window.luxBagClick = function(ev, productId){ 16728 ev.preventDefault(); 16729 ev.stopPropagation(); 16730 16731 var card = document.getElementById('card-' + productId); 16732 var strip = document.getElementById('size-strip-' + productId); 16733 var bag = document.getElementById('lux-bag-' + productId); 16734 if(!card || !strip) return false; 16735 16736 /* Strip zaten yüklenmiÅse direkt davran */ 16737 if(strip.getAttribute('data-loaded') === '1'){ 16738 if(strip.getAttribute('data-has-variants') === '1'){ 16739 toggleStrip(productId); 16740 } else { 16741 addToCartSmart(productId); 16742 } 16743 return false; 16744 } 16745 16746 /* İlk tıklama - AJAX ile varyantları çek */ 16747 bag.classList.add('is-loading'); 16748 var productLink = card.getAttribute('data-lux-product-link'); 16749 16750 fetchVariants(productId, productLink, function(data){ 16751 bag.classList.remove('is-loading'); 16752 16753 var hasVariants = buildVariantUI(productId, data); 16754 16755 if(hasVariants){ 16756 /* Bedenler var - Åeridi aç */ 16757 toggleStrip(productId); 16758 } else { 16759 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 16760 addToCartSmart(productId); 16761 } 16762 }); 16763 16764 return false; 16765 }; 16766 16767 function toggleStrip(productId){ 16768 var strip = document.getElementById('size-strip-' + productId); 16769 var card = document.getElementById('card-' + productId); 16770 if(!strip) return; 16771 16772 document.querySelectorAll('.size-strip.open').forEach(function(s){ 16773 if(s !== strip) s.classList.remove('open'); 16774 }); 16775 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 16776 if(c !== card) c.classList.remove('sizes-open'); 16777 }); 16778 16779 strip.classList.toggle('open'); 16780 if(card) card.classList.toggle('sizes-open'); 16781 } 16782 16783 16784 /* ============================================ 16785 BEDEN TIKLAMASI 16786 ============================================ */ 16787 window.luxAddVariant = function(ev, elem){ 16788 ev.preventDefault(); 16789 ev.stopPropagation(); 16790 16791 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 16792 16793 var productId = elem.getAttribute('data-urun-id'); 16794 var varyantDeger = elem.getAttribute('data-varyant-deger'); 16795 16796 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16797 if(!holder) return false; 16798 16799 /* Seçilen bedeni ilk select'e yaz */ 16800 var firstSelect = holder.querySelector('select[data-variant="0"]'); 16801 if(firstSelect){ 16802 firstSelect.value = varyantDeger; 16803 if(typeof jQuery !== "undefined"){ 16804 jQuery(firstSelect).val(varyantDeger).trigger('change'); 16805 } 16806 } 16807 16808 /* DiÄer select'lere ilk geçerli deÄeri koy */ 16809 var allSelects = holder.querySelectorAll('select[data-variant]'); 16810 allSelects.forEach(function(sel, idx){ 16811 if(idx === 0) return; 16812 if(sel.value) return; 16813 var options = sel.querySelectorAll('option'); 16814 for(var i = 0; i < options.length; i++){ 16815 if(options[i].value){ 16816 sel.value = options[i].value; 16817 if(typeof jQuery !== "undefined"){ 16818 jQuery(sel).val(options[i].value).trigger('change'); 16819 } 16820 break; 16821 } 16822 } 16823 }); 16824 16825 /* Görsel feedback */ 16826 elem.classList.add('adding'); 16827 var originalText = elem.textContent; 16828 elem.textContent = 'â'; 16829 16830 /* Sepete ekle */ 16831 addToCartSmart(productId, { 16832 checkVariant: true, 16833 variantCount: allSelects.length, 16834 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 16835 }); 16836 16837 setTimeout(function(){ 16838 elem.textContent = originalText; 16839 elem.classList.remove('adding'); 16840 closeAll(); 16841 }, 800); 16842 16843 return false; 16844 }; 16845 16846 16847 /* ============================================ 16848 SEPETE EKLE - Modal killer ile 16849 ============================================ */ 16850 function addToCartSmart(productId, extraOptions){ 16851 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 16852 16853 var options = { 16854 quantity: 1, 16855 hideNativeModal: 'lux-card-' + productId 16856 }; 16857 16858 if(extraOptions){
16859 Object.keys(extraOptions).forEach(function(k){ 16860 options[k] = extraOptions[k]; 16861 }); 16862 } else if(holder){ 16863 var selects = holder.querySelectorAll('select[data-variant]'); 16864 if(selects.length > 0){ 16865 options.checkVariant = true; 16866 options.variantCount = selects.length; 16867 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 16868 } 16869 } 16870 16871 startModalKill(2000); 16872 16873 if(typeof addCart === "function"){ 16874 try { 16875 addCart(productId, 'card', options); 16876 flashSuccess(productId); 16877 } catch(err){ 16878 console.error('Sepete ekleme hatası:', err); 16879 } 16880 } 16881 } 16882 16883})(); 16884</script>
16884</div><div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 col-list-p-v-1" 16885 data-lux-product-shell="1" 16886 data-lux-page="1"><style> 16887@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap'); 16888 16889/* ===== VEZZA LUX CARD ===== */ 16890.card-product{ 16891 font-family:'Poppins',sans-serif; 16892 background:#fff !important; 16893 position:relative; 16894} 16895.card-product-inner{ 16896 background:transparent !important; 16897 position:relative; 16898} 16899.card-product .c-p-i-link, 16900.card-product a{ 16901 background:transparent !important; 16902} 16903.card-product-inner > div{ 16904 background:transparent !important; 16905} 16906.card-product-inner > div:not(.image-wrapper):not(.lux-meta):not(.size-strip){ 16907 background:transparent !important; 16908} 16909.card-product .card-product-content, 16910.card-product .price-group, 16911.card-product .prices{ 16912 background:transparent !important; 16913} 16914[class*="skeleton"], 16915[class*="placeholder"], 16916[class*="loading"]{ 16917 background:transparent !important; 16918} 16919 16920/* ===== IMAGE AREA - KARE GÃRSEL ===== */ 16921.image-wrapper{ 16922 position:relative; 16923 width:100%; 16924 aspect-ratio:1/1; 16925 overflow:hidden; 16926 background:#fff !important; 16927} 16928 16929.image{ 16930 position:relative; 16931 width:100%; 16932 height:100%; 16933} 16934 16935.image-wrapper img{ 16936 width:100% !important; 16937 height:100% !important; 16938 object-fit:cover !important; 16939 object-position:center center !important; 16940 display:block; 16941 transition:transform .35s ease; 16942} 16943 16944/* ===== DISCOUNT ===== */ 16945.discount{ 16946 position:absolute; 16947 top:12px; 16948 left:12px; 16949 width:28px; 16950 height:48px; 16951 background:#e10b0b; 16952 color:#fff; 16953 font-size:12px; 16954 font-weight:600; 16955 display:flex; 16956 align-items:center; 16957 justify-content:center; 16958 writing-mode:vertical-rl; 16959 transform:rotate(180deg); 16960 letter-spacing:.5px; 16961 z-index:7; 16962} 16963 16964/* ===== FAV ===== */ 16965.lux-fav{ 16966 position:absolute; 16967 top:12px; 16968 right:12px; 16969 z-index:7; 16970} 16971.lux-fav a, 16972.lux-fav button{ 16973 background:transparent !important; 16974 border:0 !important; 16975 padding:0 !important; 16976 cursor:pointer; 16977 display:inline-flex; 16978 align-items:center; 16979 justify-content:center; 16980} 16981 16982/* ===== SEPET IKON ===== */ 16983.lux-bag{ 16984 position:absolute; 16985 bottom:12px; 16986 right:12px; 16987 z-index:7; 16988 width:34px; 16989 height:34px; 16990 display:inline-flex; 16991 align-items:center; 16992 justify-content:center; 16993 background:rgba(255,255,255,.92); 16994 border:1px solid rgba(0,0,0,.10); 16995 border-radius:10px; 16996 cursor:pointer; 16997 transition:.2s ease; 16998} 16999.lux-bag:hover{ 17000 background:#fff; 17001 border-color:rgba(0,0,0,.25); 17002} 17003.lux-bag.is-loading{ 17004 opacity:.6; 17005 cursor:wait; 17006} 17007.lux-bag.is-success{ 17008 background:#2e7d32 !important; 17009 border-color:#2e7d32 !important; 17010 color:#fff !important; 17011} 17012.card-product.sizes-open .lux-bag{ 17013 opacity:0; 17014 pointer-events:none; 17015} 17016 17017/* Loading spinner */ 17018.lux-bag.is-loading i::before{ 17019 content:"â³"; 17020} 17021 17022/* ===== SIZE STRIP ===== */ 17023.size-strip{ 17024 width:100%; 17025 max-height:0; 17026 overflow:hidden; 17027 background:#fff; 17028 display:flex; 17029 flex-wrap:wrap; 17030 transition:max-height .3s ease, border-color .3s ease; 17031 border-top:1px solid transparent; 17032 border-bottom:1px solid transparent; 17033} 17034.size-strip.open{ 17035 max-height:200px; 17036 border-top-color:rgba(0,0,0,.08); 17037 border-bottom-color:rgba(0,0,0,.08); 17038} 17039.size-item{ 17040 flex:1 0 auto; 17041 min-width:38px; 17042 height:42px; 17043 display:flex; 17044 align-items:center; 17045 justify-content:center; 17046 font-size:13px; 17047 font-weight:500; 17048 color:#111 !important; 17049 cursor:pointer; 17050 user-select:none; 17051 background:transparent; 17052 transition:background .15s ease, color .15s ease; 17053 border-right:1px solid rgba(0,0,0,.08); 17054} 17055.size-item:last-child{ border-right:0; } 17056.size-item:hover:not(.disabled):not(.adding){ 17057 background:#000 !important; 17058 color:#fff !important; 17059} 17060.size-item.disabled{ 17061 color:#111 !important; 17062 text-decoration:line-through !important; 17063 opacity:.30 !important; 17064 cursor:not-allowed; 17065} 17066.size-item.adding{ 17067 background:#2e7d32 !important; 17068 color:#fff !important; 17069 cursor:wait; 17070} 17071 17072/* ===== META ===== */ 17073.lux-meta{ 17074 padding:12px 6px 6px; 17075 background:transparent !important; 17076} 17077.lux-brand{ 17078 font-size:16px; 17079 font-weight:600; 17080 color:#111; 17081 margin-bottom:2px; 17082} 17083.lux-title{ 17084 font-size:14px; 17085 font-weight:400; 17086 line-height:1.45; 17087 color:#111; 17088 margin:0; 17089} 17090.lux-price{ 17091 margin-top:10px; 17092 display:flex; 17093 gap:10px; 17094 align-items:baseline; 17095 background:transparent !important; 17096} 17097.lux-price .list-price{ 17098 font-size:14px; 17099 font-weight:400; 17100 color:#111; 17101 text-decoration:line-through; 17102} 17103.lux-price .sale-price{ 17104 font-size:16px; 17105 font-weight:600; 17106 color:#e10b0b; 17107} 17108 17109.buttons-wrapper,.buttons,.quantity,.product-code,.barcode{display:none!important;}
17110.btn-cart,.btn-cart-right,.btn-preview,.btn-show{display:none!important;} 17111</style><div class="card-product" 17112 id="card-10740" 17113 data-lux-card-id="10740" 17114 data-lux-product-link="https://www.vezzalux.com/bottega-1315-suet-kahverengi-gri-loafer-erkek-ayakkabi" 17115 data-lux-has-stock="1"><div class="card-product-inner"><div class="image-wrapper"><a href="https://www.vezzalux.com/bottega-1315-suet-kahverengi-gri-loafer-erkek-ayakkabi" class="c-p-i-link" title="Bottega 1315 Süet Gri Loafer Erkek Ayakkabı"><div class="image"><img class="img-auto lazy-load " data-src="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a60396467ba9-87647597-sw800sh800.webp" alt="Bottega 1315 Süet Gri Loafer Erkek Ayakkabı" data-image-1="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a60396467ba9-87647597-sw800sh800.webp" data-image-2="https://percdn.com/f/607271/cG96WmFtNG0vcUp3ZUdGdkg4OG5iYmdQYmNFPQ/p/6a603965c31b2-84945590-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" 17116 onclick="userProductFavourite('add', 10740)"><i class="far fa-heart"></i></a></div></div><a href="javascript:;" class="lux-bag" 17117 id="lux-bag-10740" 17118 onclick="return luxBagClick(event, 10740);" 17119 aria-label="Sepete Ekle"><i class="coreicon-cart-2"></i></a></div><div class="lux-variant-box" data-lux-card-id="10740" style="display:none;"></div><div class="size-strip" id="size-strip-10740" data-loaded="0"></div><a href="https://www.vezzalux.com/bottega-1315-suet-kahverengi-gri-loafer-erkek-ayakkabi" class="c-p-i-link" title="Bottega 1315 Süet Gri Loafer Erkek Ayakkabı"><div class="lux-meta"><div class="lux-brand">Bottega Veneta</div><div class="lux-title">Bottega 1315 Süet Gri Loafer Erkek Ayakkabı</div><div class="lux-price"><div class="sale-price">13.500,00 TL</div></div></div></a></div></div>
17119<script> 17120(function(){ 17121 17122 /* Bir kez kur */ 17123 if(window.__luxCardInit) return; 17124 window.__luxCardInit = true; 17125 17126 /* Varyant cache - aynı ürüne tekrar tıklanırsa tekrar AJAX yapma */ 17127 window.__luxVariantCache = window.__luxVariantCache || {}; 17128 17129 function closeAll(){ 17130 document.querySelectorAll('.size-strip.open').forEach(function(s){ 17131 s.classList.remove('open'); 17132 }); 17133 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 17134 c.classList.remove('sizes-open'); 17135 }); 17136 } 17137 17138 function flashSuccess(productId){ 17139 var bag = document.getElementById('lux-bag-' + productId); 17140 if(!bag) return; 17141 bag.classList.add('is-success'); 17142 setTimeout(function(){ bag.classList.remove('is-success'); }, 1200); 17143 } 17144 17145 /* DıŠtıklama - kapat */ 17146 document.addEventListener('click', function(e){ 17147 var inside = e.target.closest('.size-strip') || e.target.closest('.lux-bag'); 17148 if(!inside) closeAll(); 17149 }); 17150 17151 document.addEventListener('keydown', function(e){ 17152 if(e.key === 'Escape') closeAll(); 17153 }); 17154 17155 17156 /* ============================================ 17157 MODAL KILLER - yedek güvence 17158 ============================================ */ 17159 var LUX_MODAL_KILL_ACTIVE = false; 17160 17161 function killVisibleModals(){ 17162 var modals = document.querySelectorAll('.modal.show, .modal.in, .modal.fade.in'); 17163 modals.forEach(function(m){ 17164 var id = (m.id || '').toLowerCase(); 17165 var txt = (m.textContent || '').toLowerCase(); 17166 var isCartModal = id.indexOf('cart') > -1 17167 || id.indexOf('variant') > -1 17168 || id.indexOf('fast') > -1 17169 || id.indexOf('urun') > -1 17170 || txt.indexOf('lütfen seçin') > -1; 17171 17172 if(isCartModal){ 17173 if(typeof jQuery !== 'undefined'){ 17174 try { jQuery(m).modal('hide'); } catch(e){} 17175 } 17176 m.classList.remove('show','in'); 17177 m.style.display = 'none'; 17178 } 17179 }); 17180 17181 document.querySelectorAll('.modal-backdrop').forEach(function(b){ b.remove(); }); 17182 document.body.classList.remove('modal-open'); 17183 document.body.style.overflow = ''; 17184 document.body.style.paddingRight = ''; 17185 } 17186 17187 function startModalKill(durationMs){ 17188 if(LUX_MODAL_KILL_ACTIVE) return; 17189 LUX_MODAL_KILL_ACTIVE = true; 17190 killVisibleModals(); 17191 var interval = setInterval(killVisibleModals, 50); 17192 setTimeout(function(){ 17193 clearInterval(interval); 17194 LUX_MODAL_KILL_ACTIVE = false; 17195 }, durationMs || 2000); 17196 } 17197 17198 17199 /* ============================================ 17200 AJAX: Varyantları detay sayfasından çek 17201 ============================================ 17202 Ãrün detay sayfasının tam HTML'ini indir, 17203 DOMParser ile parse et, varyantları bul 17204 ============================================ */ 17205 function fetchVariants(productId, productLink, callback){ 17206 17207 /* Cache'te varsa hemen döndür */ 17208 if(window.__luxVariantCache[productId]){ 17209 callback(window.__luxVariantCache[productId]); 17210 return; 17211 } 17212 17213 fetch(productLink, { 17214 method: 'GET', 17215 credentials: 'same-origin', 17216 headers: { 'Accept': 'text/html' } 17217 }) 17218 .then(function(r){ return r.text(); }) 17219 .then(function(html){ 17220 var parser = new DOMParser(); 17221 var doc = parser.parseFromString(html, 'text/html'); 17222 17223 /* Detay sayfasındaki .variant-box'ı bul */ 17224 var variantBox = doc.querySelector('.variant-box'); 17225 if(!variantBox){ 17226 callback({ variants: [], error: 'no_variant_box' }); 17227 return; 17228 } 17229 17230 /* Her varyant grubu için select'leri ve option'ları oku */ 17231 var variants = []; 17232 var variantLis = variantBox.querySelectorAll('.variant'); 17233 17234 variantLis.forEach(function(li, idx){ 17235 var nameEl = li.querySelector('.name'); 17236 var name = nameEl ? nameEl.textContent.replace(':','').trim() : ('Varyant ' + (idx+1)); 17237 17238 var values = []; 17239 17240 /* ÃNCE options'tan oku - çünkü stok bilgisi orada */ 17241 var optLinks = li.querySelectorAll('.options a'); 17242 17243 if(optLinks.length > 0){ 17244 optLinks.forEach(function(a){ 17245 /* Beden/renk deÄerini doÄru attribute'tan oku
17246 - data-variant-value: asıl deÄer (örn: "38", "KAHVE") 17247 - data-variant: grup index'i (örn: 0, 1) - DEÄER DEÄİL! 17248 - textContent: fallback */ 17249 var deger = a.getAttribute('data-variant-value') 17250 || a.textContent.trim(); 17251 17252 /* Stok kontrolü - birden fazla yoldan kontrol et */ 17253 var isSoldOut = a.classList.contains('sold-out') 17254 || a.classList.contains('sold_out') 17255 || a.classList.contains('disabled') 17256 || a.classList.contains('stoksuz') 17257 || a.classList.contains('out-of-stock') 17258 || a.hasAttribute('disabled') 17259 || a.getAttribute('data-in-stock') === '0' 17260 || a.getAttribute('data-in-stock') === 'false' 17261 || a.getAttribute('data-stokta-var-mi') === '0' 17262 || a.getAttribute('data-stokta-var-mi') === 'false'; 17263 17264 values.push({ 17265 deger: deger, 17266 inStock: !isSoldOut 17267 }); 17268 }); 17269 } else { 17270 /* Options yoksa select'ten oku - stok bilgisi olmayacak, hepsi stokta say */ 17271 var select = li.querySelector('select'); 17272 if(select){ 17273 var opts = select.querySelectorAll('option'); 17274 opts.forEach(function(o){ 17275 if(!o.value) return; 17276 values.push({ 17277 deger: o.value, 17278 inStock: !o.disabled 17279 }); 17280 }); 17281 } 17282 } 17283 17284 variants.push({ 17285 index: idx, 17286 baslik: name, 17287 values: values 17288 }); 17289 }); 17290 17291 var result = { variants: variants }; 17292 window.__luxVariantCache[productId] = result; 17293 callback(result); 17294 }) 17295 .catch(function(err){ 17296 console.error('Varyant çekme hatası:', err); 17297 callback({ variants: [], error: 'fetch_failed' }); 17298 }); 17299 } 17300 17301 17302 /* ============================================ 17303 Beden Åeridini ve gizli variant-box'ı oluÅtur 17304 ============================================ */ 17305 function buildVariantUI(productId, data){ 17306 var card = document.getElementById('card-' + productId); 17307 if(!card) return false; 17308 17309 var holder = card.querySelector('.lux-variant-box'); 17310 var strip = document.getElementById('size-strip-' + productId); 17311 if(!holder || !strip) return false; 17312 17313 if(!data.variants || data.variants.length === 0){ 17314 /* Varyant yok */ 17315 return false; 17316 } 17317 17318 /* Ãoklu deÄerli ilk varyantı bul (beden) */ 17319 var displayVariant = null;
17320 data.variants.forEach(function(v){ 17321 if(!displayVariant && v.values.length > 1){ 17322 displayVariant = v; 17323 } 17324 }); 17325 17326 /* Gizli variant-box HTML */ 17327 var html = '<div class="variant-box"><ul>'; 17328 data.variants.forEach(function(v){ 17329 html += '<li class="variant">'; 17330 html += '<select class="form-control" data-variant="' + v.index + '" data-variant-name="' + v.baslik + '">'; 17331 17332 if(v.values.length > 1){ 17333 html += '<option value="">Lütfen seçin</option>'; 17334 } 17335 17336 v.values.forEach(function(val, i){ 17337 var selected = (v.values.length === 1) ? ' selected' : ''; 17338 html += '<option value="' + val.deger + '"' + selected + '>' + val.deger + '</option>'; 17339 }); 17340 17341 html += '</select></li>'; 17342 }); 17343 html += '</ul></div>'; 17344 17345 holder.innerHTML = html; 17346 holder.style.display = ''; 17347 17348 /* Strip HTML (sadece çoklu deÄerli varyantlar için) 17349 Stokta olmayanlar görünmez - sadece alınabilecek bedenler */ 17350 if(displayVariant){ 17351 var stripHtml = ''; 17352 var inStockCount = 0; 17353 17354 /* DEBUG - console'da gör */ 17355 console.log('[LUX] Ãrün ' + productId + ' varyantları:', displayVariant.values); 17356 17357 displayVariant.values.forEach(function(val){ 17358 /* SADECE stokta olanları ekle */ 17359 if(val.inStock === true){ 17360 stripHtml += '<div class="size-item" ' 17361 + 'data-urun-id="' + productId + '" ' 17362 + 'data-varyant-deger="' + val.deger + '" ' 17363 + 'onclick="return luxAddVariant(event, this);">' 17364 + val.deger + '</div>'; 17365 inStockCount++; 17366 } 17367 }); 17368 17369 /* EÄer stokta hiç beden yoksa Åeridi gösterme */ 17370 if(inStockCount === 0){ 17371 strip.setAttribute('data-loaded', '1'); 17372 strip.setAttribute('data-has-variants', '0'); 17373 return false; 17374 } 17375
17376 strip.innerHTML = stripHtml; 17377 strip.setAttribute('data-loaded', '1'); 17378 strip.setAttribute('data-has-variants', '1'); 17379 return true; 17380 } else { 17381 strip.setAttribute('data-loaded', '1'); 17382 strip.setAttribute('data-has-variants', '0'); 17383 return false; 17384 } 17385 } 17386 17387 17388 /* ============================================ 17389 SEPET IKONU TIKLAMASI 17390 ============================================ */ 17391 window.luxBagClick = function(ev, productId){ 17392 ev.preventDefault(); 17393 ev.stopPropagation(); 17394 17395 var card = document.getElementById('card-' + productId); 17396 var strip = document.getElementById('size-strip-' + productId); 17397 var bag = document.getElementById('lux-bag-' + productId); 17398 if(!card || !strip) return false; 17399 17400 /* Strip zaten yüklenmiÅse direkt davran */ 17401 if(strip.getAttribute('data-loaded') === '1'){ 17402 if(strip.getAttribute('data-has-variants') === '1'){ 17403 toggleStrip(productId); 17404 } else { 17405 addToCartSmart(productId); 17406 } 17407 return false; 17408 } 17409 17410 /* İlk tıklama - AJAX ile varyantları çek */ 17411 bag.classList.add('is-loading'); 17412 var productLink = card.getAttribute('data-lux-product-link'); 17413 17414 fetchVariants(productId, productLink, function(data){ 17415 bag.classList.remove('is-loading'); 17416 17417 var hasVariants = buildVariantUI(productId, data); 17418 17419 if(hasVariants){ 17420 /* Bedenler var - Åeridi aç */ 17421 toggleStrip(productId); 17422 } else { 17423 /* Varyant yok veya hepsi tek deÄerli - direkt sepete ekle */ 17424 addToCartSmart(productId); 17425 } 17426 }); 17427 17428 return false; 17429 }; 17430 17431 function toggleStrip(productId){ 17432 var strip = document.getElementById('size-strip-' + productId); 17433 var card = document.getElementById('card-' + productId); 17434 if(!strip) return; 17435 17436 document.querySelectorAll('.size-strip.open').forEach(function(s){ 17437 if(s !== strip) s.classList.remove('open'); 17438 }); 17439 document.querySelectorAll('.card-product.sizes-open').forEach(function(c){ 17440 if(c !== card) c.classList.remove('sizes-open'); 17441 }); 17442 17443 strip.classList.toggle('open'); 17444 if(card) card.classList.toggle('sizes-open'); 17445 } 17446 17447 17448 /* ============================================ 17449 BEDEN TIKLAMASI 17450 ============================================ */ 17451 window.luxAddVariant = function(ev, elem){ 17452 ev.preventDefault(); 17453 ev.stopPropagation(); 17454 17455 if(elem.classList.contains('adding') || elem.classList.contains('disabled')) return false; 17456 17457 var productId = elem.getAttribute('data-urun-id'); 17458 var varyantDeger = elem.getAttribute('data-varyant-deger'); 17459 17460 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 17461 if(!holder) return false; 17462 17463 /* Seçilen bedeni ilk select'e yaz */ 17464 var firstSelect = holder.querySelector('select[data-variant="0"]'); 17465 if(firstSelect){ 17466 firstSelect.value = varyantDeger; 17467 if(typeof jQuery !== "undefined"){ 17468 jQuery(firstSelect).val(varyantDeger).trigger('change'); 17469 } 17470 } 17471 17472 /* DiÄer select'lere ilk geçerli deÄeri koy */ 17473 var allSelects = holder.querySelectorAll('select[data-variant]'); 17474 allSelects.forEach(function(sel, idx){ 17475 if(idx === 0) return; 17476 if(sel.value) return; 17477 var options = sel.querySelectorAll('option'); 17478 for(var i = 0; i < options.length; i++){ 17479 if(options[i].value){ 17480 sel.value = options[i].value; 17481 if(typeof jQuery !== "undefined"){ 17482 jQuery(sel).val(options[i].value).trigger('change'); 17483 } 17484 break; 17485 } 17486 } 17487 }); 17488 17489 /* Görsel feedback */ 17490 elem.classList.add('adding'); 17491 var originalText = elem.textContent; 17492 elem.textContent = 'â'; 17493 17494 /* Sepete ekle */ 17495 addToCartSmart(productId, { 17496 checkVariant: true, 17497 variantCount: allSelects.length, 17498 variantDiv: '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box' 17499 }); 17500 17501 setTimeout(function(){ 17502 elem.textContent = originalText; 17503 elem.classList.remove('adding'); 17504 closeAll(); 17505 }, 800); 17506 17507 return false; 17508 }; 17509 17510 17511 /* ============================================ 17512 SEPETE EKLE - Modal killer ile 17513 ============================================ */ 17514 function addToCartSmart(productId, extraOptions){ 17515 var holder = document.querySelector('.lux-variant-box[data-lux-card-id="' + productId + '"]'); 17516 17517 var options = { 17518 quantity: 1, 17519 hideNativeModal: 'lux-card-' + productId 17520 }; 17521 17522 if(extraOptions){
17523 Object.keys(extraOptions).forEach(function(k){ 17524 options[k] = extraOptions[k]; 17525 }); 17526 } else if(holder){ 17527 var selects = holder.querySelectorAll('select[data-variant]'); 17528 if(selects.length > 0){ 17529 options.checkVariant = true; 17530 options.variantCount = selects.length; 17531 options.variantDiv = '.lux-variant-box[data-lux-card-id="' + productId + '"] .variant-box'; 17532 } 17533 } 17534 17535 startModalKill(2000); 17536 17537 if(typeof addCart === "function"){ 17538 try { 17539 addCart(productId, 'card', options); 17540 flashSuccess(productId); 17541 } catch(err){ 17542 console.error('Sepete ekleme hatası:', err); 17543 } 17544 } 17545 } 17546 17547})(); 17548</script>
17548</div></div><div class="lux-custom-empty" id="luxCustomEmpty" style="display:none;"> 17549 Seçilen bedene uygun ürün bulunamadı. 17550 </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=7">7</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> 17551 .social-media { 17552 display: flex; 17553 align-items: center; 17554 gap: 10px; 17555 flex-wrap: wrap; 17556} 17557 17558.social-media-title { 17559 font-size: 11px; 17560 letter-spacing: 0.15em; 17561 text-transform: uppercase; 17562 color: #555; 17563 margin-right: 4px; 17564} 17565 17566.social-icon { 17567 width: 38px; 17568 height: 38px; 17569 border: 0.5px solid #333; 17570 border-radius: 50%; 17571 display: flex; 17572 align-items: center; 17573 justify-content: center; 17574 color: #888; 17575 font-size: 14px; 17576 text-decoration: none; 17577 transition: border-color 0.2s, color 0.2s; 17578} 17579 17580.social-icon:hover { 17581 border-color: #fff; 17582 color: #fff; 17583} 17584.footer-newsletter-band { 17585 background: #f5c518; 17586 padding: 18px 0; 17587} 17588 17589.footer-newsletter-band form { 17590 max-width: 700px; 17591 margin: 0 auto; 17592 display: flex; 17593 align-items: center; 17594 gap: 14px; 17595 padding: 0 20px; 17596 flex-wrap: wrap; 17597 justify-content: center; 17598} 17599 17600.fnb-icon { 17601 color: #000; 17602 font-size: 16px; 17603 flex-shrink: 0; 17604} 17605 17606.fnb-text { 17607 font-size: 11px; 17608 letter-spacing: 0.08em; 17609 color: #000; 17610 font-weight: 500; 17611 flex: 1; 17612 min-width: 200px; 17613 text-align: left; 17614} 17615 17616.fnb-input { 17617 background: transparent; 17618 border: none; 17619 border-bottom: 1px solid rgba(0,0,0,0.3); 17620 color: #000; 17621 font-size: 12px; 17622 padding: 6px 0; 17623 width: 220px; 17624 outline: none; 17625 transition: border-color 0.2s; 17626} 17627 17628.fnb-input:focus { 17629 border-bottom-color: #000; 17630} 17631 17632.fnb-input::placeholder { 17633 color: rgba(0,0,0,0.4); 17634} 17635 17636.fnb-btn { 17637 background: #000; 17638 border: none; 17639 border-radius: 4px; 17640 color: #f5c518; 17641 font-size: 11px; 17642 letter-spacing: 0.12em; 17643 text-transform: uppercase; 17644 padding: 8px 20px; 17645 cursor: pointer; 17646 flex-shrink: 0; 17647 transition: background 0.2s; 17648} 17649 17650.fnb-btn:hover { 17651 background: #222; 17652} 17653 </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">
17653Mobil 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"> 17654 Hakkımızda 17655 </a></li><li><a href="https://www.vezzalux.com/iletisim"> 17656 İletiÅim 17657 </a></li><li><a href="https://www.vezzalux.com/gizlilik-sozlesmesi"> 17658 Gizlilik SözleÅmesi 17659 </a></li><li><a href="https://www.vezzalux.com/kullanici-sozlesmesi"> 17660 Kullanıcı SözleÅmesi 17661 </a></li><li><a href="https://www.vezzalux.com/cerez-politikasi"> 17662 Ãerez Politikası 17663 </a></li><li><a href="https://www.vezzalux.com/mesafeli-satis-sozlesmesi"> 17664 Mesafeli SatıŠSözleÅmesi 17665 </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"> 17666 Sıkça Sorulan Sorular 17667 </a></li><li><a href="https://www.vezzalux.com/siparis-takip"> 17668 SipariÅ Takip 17669 </a></li><li><a href="https://www.vezzalux.com/havale-bildirimleri"> 17670 Havale Bildirimleri 17671 </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"> 17672 ERKEK 17673 </a></li><li><a href="https://www.vezzalux.com/kadin"> 17674 KADIN 17675 </a></li><li><a href="https://www.vezzalux.com/yeni-sezon"> 17676 YENİ SEZON 17677 </a></li><li><a href="https://www.vezzalux.com/tek-kalanlar"> 17678 KADIN TEK KALANLAR 17679 </a></li><li><a href="https://www.vezzalux.com/erkek-tek-kalanlar"> 17680 ERKEK TEK KALANLAR 17681 </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"> 17682 Haftaiçi 09:00 - 19:00 Cumartesi 10:00 - 17:00 saatleri arasında ulaÅabilirsiniz. 17683 </div></div></div></div></div></div></div></div></div></footer></div></div></div></div></div></div></section>
17683<script type="text/javascript"> 17684 var SITE_CONFIG = { 17685 mode: 'production', 17686 page: 'categories', 17687 url: 'https://www.vezzalux.com', 17688 baseUrl: 'https://www.vezzalux.com', 17689 cartUrl: 'https://www.vezzalux.com/sepet', 17690 cartShippingType: 'in_order', 17691 paymentUrl: 'https://www.vezzalux.com/odeme', 17692 defaultCountry: 'TR', 17693 preferredCountries: ["TR"], 17694 onlyCountries: ["TR"], 17695 userIsLogin: false, 17696 userId: 0, 17697 lazyLoadEffectTime: '0', 17698 token: 'VXRafTLqhMMr7OZKITB1cce98985e36c0d68f4d74c136e399331CXIdvijKH0hu3cOTotp0s+MQqNUDvxP9nDopG5xpT0vDrmgSaT2NbEE5uMh92m7LkW1qOwpqMzdLXVz2RcofXwGAJphcTPojrAym2w5s6aVB4ovAz7J3+J4EHsAeQbTLuUbhkLtVJeLMcxGG2qW3gEvzPChkNBgR+WmgW/QhuFqPiVX5eEtRc7qgFV5EVvXhfkjY3M8T0Aqch9aGQXZLbdikHL+9iTgO4Qn4XMriUF5TzaBt3ZOpTvs555SNVv9lXlATXw==1X2nweWf8R', 17699 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', 17700 pageKey: 'fd7e2e45358daf2288e09d9cbc63c08fjnySh5UTcEzm2tQmPf7Hf/kxiT/PqKkMU0RyW1OVnP9s0z4nXjjMI+1SLFwBUDHSr8b1vgW0IgYqzIYyPsQXCHWgQxb1ERja8nhxaLMBL7EUDX3ByvVDQkXtOxMUY6sblCfRjTkTB2dYkqmoPYb0dG6iOivBH/WLUtV4tess5JEZdOph5Ee0lPlwrw4DXLrr31rtYVp1xeCMukOzbSNTicOQwlIEdv+kwlh8yo4tPkLnrLuA5X6Jz2ewaA3H+9Gml30leRAgGWUGApwnof3uEXoqAMAdTDJgPsj+KpQBHcAcOwY=', 17701 paymentStep: '0', 17702 orderCode: '', 17703 contentId: '267', 17704 contentTitle: 'Ayakkabı', 17705 contentType: 'category', 17706 priceRounding: { 17707 active: false, 17708 type: '1', 17709 direction: '0' 17710 }, 17711 currency: { 17712 name: 'Türk Lirası', 17713 symbol: 'TL', 17714 code: 'TRY', 17715 decimal: '2', 17716 displayType: '0' 17717 }, 17718 listPriceRule: { 17719 active: false, 17720 limit: '15' 17721 }, 17722 analytics: { 17723 mode: 'production', 17724 sessionInterval: '1800', 17725 liveVisitInterval: '600', 17726 cookieSettings: 'Secure; SameSite=None; path=/;', 17727 apiUrl: 'https://analytics.qs-apps.com/', 17728 trackingId: '4377112946590', 17729 visitorDetails: 'eyJkb21haW4iOiJ2ZXp6YWx1eC5jb20iLCJpc19ib3QiOmZhbHNlLCJ1c2VyX2FnZW50IjoiTW96aWxsYVwvNS4wIEFwcGxlV2ViS2l0XC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvOyBjb21wYXRpYmxlOyBQYWdlU291cmNlU2VhcmNoQm90XC8xLjA7IGh0dHBzOlwvXC9wYWdlc291cmNlc2VhcmNoLmNvbVwvYm90KSBDaHJvbWVcLzEyOC4wLjAuMCBTYWZhcmlcLzUzNy4zNiIsInV0bV9zb3VyY2UiOmZhbHNlLCJ1dG1fbWVkaXVtIjpmYWxzZSwidXRtX2NhbXBhaWduIjpmYWxzZSwidXRtX3Rlcm0iOmZhbHNlLCJ1dG1fY29udGVudCI6ZmFsc2UsImNoYW5uZWwiOjAsInRyYWZmaWNfc291cmNlIjpmYWxzZSwic2VhcmNoX2tleXdvcmQiOmZhbHNlLCJub3RpZmljYXRpb25fY2FtcGFpZ25fY29kZSI6ZmFsc2UsImFmZmlsaWF0ZV9pbmZsdWVuY2VyX2NvZGUiOmZhbHNlLCJ1c2VyX2NvbGxlY3Rpb25fY29kZSI6ZmFsc2V9', 17730 namespace: { 17731 localCurrentSession: 'qanalytcs_session_', 17732 localDailyVisit: 'qanalytcs_uniquev', 17733 localLiveVisits: 'qanalytcs_activities', 17734 localTimeSpent: 'qanalytcs_lstra', 17735 cookieTest: 'qanalytcs_test', 17736 cookieTimeSpent: 'qanalytcs_tts', 17737 cookieScreenWidth: 'qanalytcs_scrnwdth' 17738 } 17739 }, 17740 datepicker: { 17741 load: false, 17742 css: 'https://www.vezzalux.com/template/smart/default/assets/plugins/datepicker/datepicker.css?v=1673397887', 17743 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/datepicker/datepicker.js?v=1673398008', 17744 }, 17745 simplebar: { 17746 load: false, 17747 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/simplebar/simplebar.js?v=1673398960', 17748 }, 17749 fancybox: { 17750 load: false, 17751 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/fancybox/fancybox.js?v=1673399778', 17752 }, 17753 imageupload: { 17754 load: false, 17755 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/imageupload/upload.js?v=1687644019', 17756 }, 17757 croppie: { 17758 load: false, 17759 css: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/croppie.css?v=1684160415', 17760 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/croppie.js?v=1684193487', 17761 js2: 'https://www.vezzalux.com/template/smart/default/assets/plugins/croppie/exif.js?v=1684160405', 17762 }, 17763 tweenmax: { 17764 load: false, 17765 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/tweenmax/TweenMax.min.js?v=1690415568', 17766 }, 17767 form: { 17768 load: false, 17769 js: 'https://www.vezzalux.com/template/smart/default/assets/form.js?v=1790058138', 17770 }, 17771 mask: { 17772 load: false, 17773 js: 'https://www.vezzalux.com/template/smart/default/assets/plugins/inputmask/jquery.inputmask.min.js?v=1771941751', 17774 }, 17775 print: { 17776 load: false, 17777 js: 'https://www.vezzalux.com/template/smart/default/assets/print.js?v=1790058138', 17778 }, 17779 }; 17780 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%}
17780\" 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!"}; 17781 </script>
17781<script type="text/javascript" src="https://www.vezzalux.com/template/smart/default/assets/plugins/bootstrap.js?v=1774571286" /></script>
17781<script type="text/javascript" src="https://www.vezzalux.com/template/smart/default/assets/scripts.min.js?v=1790058138" /></script>
17781<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"> 17782 .addons-mobile-menu { 17783 height: 65px; 17784 background: #ffffff; 17785 border-top: 1px solid #cfcfcf; 17786 } 17787 .addons-mobile-menu ul li a .icon { 17788 color: #333333; 17789 font-size: 15px; 17790 } 17791 .addons-mobile-menu ul li a .title { 17792 color: #333333; 17793 font-size: 12px; 17794 } 17795 @media (max-width: 991px) { 17796 body { 17797 padding-bottom: 65px; 17798 } 17799 } 17800</style><div class="addons-whatsapp-widget aww-direction-0 aww-size-1 aww-title-0 aww-desktop-1 aww-mobile-1" 17801 style="padding: 10px;"><div class="wp-title"> 17802 Size nasıl yardımcı olabiliriz? 17803 </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" 17804 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 17805 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 17806 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 17807 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 17808 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 17809 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 17810 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 17811 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 17812 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"> 17813 17814 @media (max-width: 991px) { 17815 .addons-whatsapp-widget { 17816 margin-bottom: 70px 17817 } 17818 } 17819 </style>
17819<script src="https://apis.google.com/js/platform.js" async defer></script>
17819<div class="google-review-badge gwb-footer gwb-hide-desktop gwb-hide-mobile"><g:ratingbadge merchant_id="5772617662"></g:ratingbadge></div>
17819<script> 17820 window.___gcfg = { 17821 lang: 'tr' 17822 }; 17823 </script>
17823<script type="text/javascript"> 17824 browserAlert("VEZZALUX | Lüksün Dijital Dünyası "); 17825</script>
17825<div class="qk-app-sticky-discount" tabindex="-1" 17826 data-position-type="fixed" 17827 data-position-element="" 17828 data-position-element-location="after" 17829 data-desktop="true" 17830 data-mobile="true"><div class="sticky-button"> 17831 Tüm Ãrünlerde %20 İndirim! 17832 <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"></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"> 17833 .qk-app-sticky-discount { 17834 display: none; 17835 position: fixed; 17836 z-index: 9; 17837 } 17838 .qk-app-sticky-discount.active { 17839 z-index: 9999 17840 } 17841 .qk-app-sticky-discount .sticky-button { 17842 cursor: pointer; 17843 position: relative; 17844 display: flex; 17845 justify-content: center; 17846 align-items: center; 17847 text-align: center; 17848 background: #4a0e0e; 17849 width: 210px; 17850 height: 41.4px; 17851 color: #ffffff; 17852 font-size: 18px; 17853 font-weight: 500; 17854 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17855 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17856 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17857 } 17858 .qk-app-sticky-discount .sticky-button i { 17859 font-size: 13px; 17860 margin: 0 0 -2px 10px; 17861 } 17862 .qk-app-sticky-discount .sticky-contents { 17863 display: flex; 17864 width: 210px; 17865 height: 230px; 17866 background: #4a0e0e; 17867 position: absolute; 17868 flex-direction: column; 17869 justify-content: center; 17870 align-items: center; 17871 text-align: center; 17872 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17873 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17874 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 17875 overflow-y: auto; 17876 overflow-x: hidden; 17877 } 17878 .qk-app-sticky-discount .sticky-contents .button-close { 17879 cursor: pointer; 17880 background: rgba(0, 0, 0, .5); 17881 color: #fff; 17882 position: absolute; 17883 right: 3px; 17884 top: 3px; 17885 font-size: 11px; 17886 width: 23px; 17887 height: 23px; 17888 padding-top: 3px; 17889 } 17890 .qk-app-sticky-discount .sticky-contents .item-custom { 17891 display: flex; 17892 flex-direction: column; 17893 justify-content: center; 17894 align-items: center; 17895 text-align: center; 17896 height: 100%; 17897 width: 100%; 17898 padding: 15px 17899 } 17900 .qk-app-sticky-discount .sticky-contents span, 17901 .qk-app-sticky-discount .sticky-contents a { 17902 display: block; 17903 margin: 5px 0 17904 } 17905 .qk-app-sticky-discount .sticky-contents a { 17906 color: #fff; 17907 width: 100%; 17908 padding: 10px 5px; 17909 border-radius: 5px; 17910 font-weight: 500; 17911 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17912 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17913 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 17914 } 17915 .qk-app-sticky-discount .sticky-contents a:hover { 17916 opacity: 0.9; 17917 } 17918 17919 .qk-app-sticky-discount .sticky-button { 17920 position: absolute; 17921 width: 41.4px; 17922 height: 230px; 17923 writing-mode: vertical-lr; 17924 transform: scale(-1); 17925 } 17926 .qk-app-sticky-discount .sticky-button i { 17927 margin: 10px 0 0 -2px; 17928 } 17929 .qk-app-sticky-discount .sticky-button, 17930 .qk-app-sticky-discount .sticky-contents { 17931 left: 0; 17932 } 17933 17934 @media (min-width: 992px){ 17935 .qk-app-sticky-discount { 17936 left: 0px;right: auto;top: calc(50% - 115px);bottom: auto;transform: scale(1);transform-origin: left ;margin: 0px; 17937 } 17938 } 17939 @media (max-width: 992px){ 17940 .qk-app-sticky-discount { 17941 left: 0px;right: auto;top: calc(50% - 115px);bottom: auto;transform: scale(0.7);transform-origin: left ;margin: 0px; 17942 } 17943 } 17944</style>
17944<script type="text/javascript"> 17945 $( window ).on("load", function() { 17946 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 () { 17947 let element = '.qk-app-sticky-discount'; 17948 17949 // check current screen sizes 17950 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 17951 if ((screen_width >= 992 && !$(element).data('desktop')) || 17952 (screen_width < 992 && !$(element).data('mobile'))){ 17953 return 17954 } 17955 17956 customAppScreenPosition(element); 17957 17958 // click campaign icon to show gifts 17959 $(element).find('.sticky-button').on('click', function (){ 17960 $(element).find('.sticky-contents').fadeToggle(250); 17961 $(element).toggleClass('active'); 17962 }) 17963 17964 // click outside gifts box to hide 17965 $(element).on('focusout', function () { 17966 $(element).find('.sticky-contents').fadeOut(250); 17967 $(element).removeClass('active'); 17968 }); 17969 17970 // close button 17971 $(element+ ' .button-close').on('click', function () { 17972 $(element).find('.sticky-contents').fadeOut(250); 17973 $(element).removeClass('active'); 17974 }); 17975 17976 }); 17977 }); 17978</script>
17978<div class="qk-app-dropdown-products" tabindex="-1" 17979 data-position-type="fixed" 17980 data-position-element="" 17981 data-position-element-location="after" 17982 data-desktop="true" 17983 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"> 17984 .qk-app-dropdown-products { 17985 display: none; 17986 position: fixed; 17987 z-index: 9; 17988 } 17989 .qk-app-dropdown-products.active { 17990 z-index: 9999 17991 } 17992 .qk-app-dropdown-products .sticky-button { 17993 cursor: pointer; 17994 position: relative; 17995 display: flex; 17996 justify-content: center; 17997 align-items: center; 17998 text-align: center; 17999 background: #ffffff; 18000 width: 140px; 18001 height: 50px; 18002 color: #222222; 18003 font-size: 14px; 18004 border: 1px solid #dddddd; 18005 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18006 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18007 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18008 } 18009 .qk-app-dropdown-products .sticky-button i { 18010 color: #222222; 18011 font-size: 14px; 18012 margin-right: 10px 18013 } 18014 .qk-app-dropdown-products .sticky-button { 18015 position: absolute; 18016 width: 50px; 18017 height: 140px; 18018 writing-mode: vertical-lr; 18019 transform: scale(-1); 18020 } 18021 .qk-app-dropdown-products .sticky-button i { 18022 margin: 0 0 10px -2px; 18023 } 18024 .qk-app-dropdown-products .sticky-button, 18025 .qk-app-dropdown-products .sticky-contents { 18026 right: 0; 18027 } 18028 .qk-app-dropdown-products .sticky-contents { 18029 right: 0; 18030 } 18031 18032 .qk-app-dropdown-products .sticky-contents { 18033 display: flex; 18034 width: 300px; 18035 min-height: 200px; 18036 height: auto; 18037 max-height: 520px; 18038 background: #fff; 18039 position: absolute; 18040 flex-direction: column; 18041 justify-content: center; 18042 align-items: center; 18043 text-align: center; 18044 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18045 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18046 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.25); 18047 } 18048 .qk-app-dropdown-products .sticky-contents .bar { 18049 width: 100%; 18050 height: 60px; 18051 display: flex; 18052 justify-content: flex-start; 18053 align-items: center; 18054 padding: 0 15px; 18055 position: relative; 18056 color: #222222; 18057 font-size: 17px; 18058 border: 1px solid rgba(0,0,0,.1); 18059 font-weight: 500; 18060 } 18061 .qk-app-dropdown-products .sticky-contents .bar .button-close { 18062 cursor: pointer; 18063 color: #777; 18064 position: absolute; 18065 right: 13px; 18066 top: 12px; 18067 font-size: 17px; 18068 width: 25px; 18069 height: 25px; 18070 padding-top: 4px; 18071 border-radius: 5px; 18072 } 18073 .qk-app-dropdown-products .sticky-contents .items { 18074 flex: 1; 18075 max-height: 460px; 18076 width: 100%; 18077 padding-right: 10px 18078 } 18079 .qk-app-dropdown-products .sticky-contents .items .alert-message { 18080 padding: 10px 0; 18081 } 18082 .qk-app-dropdown-products .sticky-contents .items .item { 18083 display: flex; 18084 justify-content: flex-start; 18085 align-items: flex-start; 18086 border-bottom: 1px solid #ebebeb; 18087 padding: 10px; 18088 height: 115px; 18089 color: #333 18090 } 18091 .qk-app-dropdown-products .sticky-contents .items .item .image { 18092 flex: 1 18093 } 18094 .qk-app-dropdown-products .sticky-contents .items .item .image img { 18095 max-height: 90px; 18096 max-width: 90px; 18097 } 18098 .qk-app-dropdown-products .sticky-contents .items .item .info { 18099 flex: 2; 18100 height: 100%; 18101 display: flex; 18102 flex-direction: column; 18103 align-items: flex-start; 18104 margin-left: 10px; 18105 text-align: left; 18106 } 18107 .qk-app-dropdown-products .sticky-contents .items .item .info .title { 18108 font-size: 13px; 18109 margin-bottom: 6px 18110 } 18111 .qk-app-dropdown-products .sticky-contents .items .item .info .list-price { 18112 font-size: 12px; 18113 color: #555; 18114 text-decoration: line-through; 18115 margin-bottom: 6px 18116 } 18117 .qk-app-dropdown-products .sticky-contents .items .item .info .sale-price { 18118 font-size: 15px; 18119 font-weight: 600; 18120 color: #d21c1c; 18121 margin-bottom: 6px 18122 } 18123 18124 @media (min-width: 992px){ 18125 .qk-app-dropdown-products { 18126 left: auto;right: 10px;top: calc(50% - 25px);bottom: auto;transform: scale(1);transform-origin: right ;margin: 0px; 18127 } 18128 } 18129 @media (max-width: 992px){ 18130 .qk-app-dropdown-products { 18131 left: auto;right: 10px;top: calc(50% - 25px);bottom: auto;transform: scale(0.85);transform-origin: right ;margin: 0px; 18132 } 18133 } 18134</style>
18134<script type="text/javascript"> 18135 $( window ).on("load", function() { 18136 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 () { 18137 let element = '.qk-app-dropdown-products'; 18138 18139 // check current screen sizes 18140 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18141 if ((screen_width >= 992 && !$(element).data('desktop')) || 18142 (screen_width < 992 && !$(element).data('mobile'))){ 18143 return 18144 } 18145 18146 customAppScreenPosition(element); 18147 18148 // click campaign icon to show gifts 18149 var fetch_products = false; 18150 $(element).find('.sticky-button').on('click', function (){ 18151 $(element).find('.sticky-contents').fadeToggle(150); 18152 $(element).toggleClass('active'); 18153 if (!fetch_products){ 18154 fetch_products = true; 18155 customAppDropDownFetchProducts(element); 18156 } 18157 }) 18158 18159 // click outside gifts box to hide 18160 $(element).on('focusout', function () { 18161 $(element).find('.sticky-contents').fadeOut(150); 18162 $(element).removeClass('active'); 18163 }); 18164 18165 // close button 18166 $(element+ ' .button-close').on('click', function () { 18167 $(element).find('.sticky-contents').fadeOut(150); 18168 $(element).removeClass('active'); 18169 }); 18170 18171 }); 18172 }); 18173 function customAppDropDownFetchProducts(element) 18174 { 18175 var data = [ 18176 {name: "type", value: 'visited'}, 18177 {name: "limit", value: '4'}, 18178 ] 18179 18180 ajaxFormGate( 18181 'POST', 'Category', 'getSimpleProducts', data, false, function(result){ 18182 if (result.length == 0){ 18183 $(element+ ' .sticky-contents').find('.items').html('<div class="alert-message">Ãrün bulunamadı.</div>') 18184 }else{ 18185 $(element+ ' .sticky-contents').find('.items').html(' ') 18186 let item = '', html = ''; 18187 for(let i = 0; i < result.length; i++){ 18188 item = result[i]; 18189 html = ''; 18190 html = html + '<a class="item" href="'+ item.link +'">'; 18191 html = html + '<div class="image">'; 18192 html = html + '<img src="'+ item.resim +'" alt="" />'; 18193 html = html + '</div>'; 18194 html = html + '<div class="info">'; 18195 html = html + '<span class="title">'+ item.adi +'</span>'; 18196 if (item.indirim){ 18197 html = html + '<span class="list-price">'+ item.piyasa_fiyati +'</span>'; 18198 } 18199 html = html + '<span class="sale-price">'+ item.fiyat +'</span>'; 18200 html = html + '</div>'; 18201 html = html + '</a>'; 18202 $(element + ' .sticky-contents .items').append(html) 18203 } 18204 } 18205 }, 18206 false 18207 ) 18208 } 18209</script>
18209<div class="qk-app-popup-products" tabindex="-1" 18210 data-position-type="fixed" 18211 data-position-element="" 18212 data-position-element-location="after" 18213 data-desktop="true" 18214 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"> 18215 .qk-app-popup-products { 18216 display: none; 18217 position: fixed; 18218 z-index: 999999; 18219 left: 0; 18220 right: 0; 18221 top: 0; 18222 bottom: 0; 18223 background: rgba(0, 0, 0, .6); 18224 } 18225 .qk-app-popup-products .wrapper-showcase { 18226 position: fixed; 18227 background: #ffffff; 18228 width: 750px; 18229 height: 460px; 18230 padding: 30px; 18231 -webkit-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18232 -moz-box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18233 box-shadow: 0px 0px 20px 2px rgba(0,0,0,0.15); 18234 } 18235 .qk-app-popup-products .wrapper-showcase .bar { 18236 display: flex; 18237 flex-direction: column; 18238 text-align: center; 18239 justify-content: center; 18240 align-items: center; 18241 } 18242 .qk-app-popup-products .wrapper-showcase .bar .title { 18243 color: #222222; 18244 font-size: 17px; 18245 margin-bottom: 5px; 18246 font-weight: 500 18247 } 18248 .qk-app-popup-products .wrapper-showcase .bar .sub-title { 18249 color: #222222; 18250 font-size: 14px; 18251 } 18252 .qk-app-popup-products .wrapper-showcase .bar .button-close { 18253 cursor: pointer; 18254 color: #555; 18255 position: absolute; 18256 right: 5px; 18257 top: 5px; 18258 font-size: 20px; 18259 width: 23px; 18260 height: 23px; 18261 padding-top: 3px; 18262 } 18263 .qk-app-popup-products .wrapper-showcase .items { 18264 width: 100%; 18265 margin-top: 20px 18266 } 18267 .qk-app-popup-products .wrapper-showcase .items .item { 18268 padding: 10px; 18269 color: #333 18270 } 18271 .qk-app-popup-products .wrapper-showcase .items .item .image { 18272 flex: 1; 18273 text-align: center; 18274 justify-content: center; 18275 align-items: center; 18276 display: flex; 18277 } 18278 .qk-app-popup-products .wrapper-showcase .items .item .image img { 18279 max-height: 200px; 18280 max-width: 200px; 18281 width: auto; 18282 height: auto; 18283 } 18284 .qk-app-popup-products .wrapper-showcase .items .item .info { 18285 display: flex; 18286 flex-direction: column; 18287 align-items: flex-start; 18288 margin-top: 10px; 18289 text-align: left; 18290 } 18291 .qk-app-popup-products .wrapper-showcase .items .item .info .title { 18292 font-size: 13px; 18293 margin-bottom: 6px 18294 } 18295 .qk-app-popup-products .wrapper-showcase .items .item .info .list-price { 18296 font-size: 12px; 18297 color: #555; 18298 text-decoration: line-through; 18299 margin-top: 6px 18300 } 18301 .qk-app-popup-products .wrapper-showcase .items .item .info .sale-price { 18302 font-size: 15px; 18303 font-weight: 600; 18304 color: #d21c1c; 18305 margin-top: 6px 18306 } 18307 18308 @media (min-width: 992px){ 18309 .qk-app-popup-products { 18310 } 18311 .qk-app-popup-products .wrapper-showcase { 18312 left: calc(50% - 375px);right: auto;top: calc(50% - 230px);bottom: auto;transform: scale(1);transform-origin: center ;margin: 0px; 18313 } 18314 } 18315 @media (max-width: 992px){ 18316 .qk-app-popup-products { 18317 } 18318 .qk-app-popup-products .wrapper-showcase { 18319 left: calc(50% - 375px);right: auto;top: calc(50% - 230px);bottom: auto;transform: scale(0.95);transform-origin: center ;margin: 0px; 18320 width: 100% !important; 18321 left: 0 !important; 18322 right: 0 !important; 18323 } 18324 } 18325</style>
18325<script type="text/javascript"> 18326 $( window ).on("load", function() { 18327 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 () { 18328 let element = '.qk-app-popup-products'; 18329 18330 // check current screen sizes 18331 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18332 if ((screen_width >= 992 && !$(element).data('desktop')) || 18333 (screen_width < 992 && !$(element).data('mobile'))){ 18334 return 18335 } 18336 18337 customAppScreenPosition(element); 18338 18339 // close button 18340 $(element+ ' .button-close').on('click', function () { 18341 $(element).remove(); 18342 }); 18343 18344 // fetch products 18345 var data = [ 18346 {name: "type", value: 'visited'}, 18347 {name: "limit", value: '10'}, 18348 ]; 18349 18350 ajaxFormGate( 18351 'POST', 'Category', 'getSimpleProducts', data, false, function(result){ 18352 if (result.length == 0){ 18353 $(element).remove(); 18354 }else{ 18355 $(element).find('.items').html(' ') 18356 let item = '', html = ''; 18357 for(let i = 0; i < result.length; i++){ 18358 item = result[i]; 18359 html = ''; 18360 html = html + '<a class="owl-carousel-item item" href="'+ item.link +'">'; 18361 html = html + '<div class="image">'; 18362 html = html + '<img src="'+ item.resim +'" alt="" />'; 18363 html = html + '</div>'; 18364 html = html + '<div class="info">'; 18365 html = html + '<span class="title">'+ item.adi +'</span>'; 18366 if (item.indirim){ 18367 html = html + '<span class="list-price">'+ item.piyasa_fiyati +'</span>'; 18368 } 18369 html = html + '<span class="sale-price">'+ item.fiyat +'</span>'; 18370 html = html + '</div>'; 18371 html = html + '</a>'; 18372 $(element).find('.items').append(html) 18373 } 18374 createOwlCarousel('qk-app-popup-products-items', {"0":{"items":2},"992":{"items":3}}); 18375 } 18376 }, 18377 false 18378 ) 18379 18380 }); 18381 }); 18382</script>
18382<div class="cookie-agreement-module" 18383 tabindex="-1" 18384 data-desktop="true" 18385 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"> 18386 Kabul Ediyorum 18387 </button></div></div><style type="text/css"> 18388 .cookie-agreement-module { 18389 z-index: 9999999; 18390 position: fixed; 18391 background: rgba(0, 0, 0, 0.97); 18392 border-radius: 35px; 18393 } 18394 .cookie-agreement-module .cam-contents { 18395 position: relative; 18396 display: flex; 18397 justify-content: center; 18398 align-items: center; 18399 min-height: 110px; 18400 width: 100%; 18401 padding: 5px 15px; 18402 max-width: 360px; 18403 margin: 0 auto; 18404 } 18405 .cookie-agreement-module .items { 18406 flex: 1; 18407 text-align: left; 18408 } 18409 .cookie-agreement-module .items .title { 18410 color: #ffffff !important; 18411 font-size: 14px !important; 18412 margin-bottom: 5px; 18413 font-weight: 500; 18414 } 18415 .cookie-agreement-module .items .description { 18416 color: #ffffff !important; 18417 font-size: 13px !important; 18418 } 18419 .cookie-agreement-module .items .description a { 18420 color: #ffffff !important; 18421 font-size: 13px !important; 18422 text-decoration: none !important; 18423 } 18424 .cookie-agreement-module .cam-btn { 18425 border: 0 !important; 18426 border-radius: 3px !important; 18427 display: inline-block !important; 18428 padding: 7px 10px; 18429 font-weight: 600; 18430 background: #ffffff; 18431 color: #000000; 18432 font-size: 13px; 18433 margin-left: 10px; 18434 } 18435 .cookie-agreement-module .button-close { 18436 cursor: pointer; 18437 font-size: 13px; 18438 color: #000000; 18439 margin-left: 10px; 18440 } 18441 @media (min-width: 992px){ 18442 .cookie-agreement-module { 18443 left: calc(50% - 180px);right: auto;top: auto;bottom: 15px;transform: scale(0.75);transform-origin: bottom;margin: 0px; 18444 left: 0 !important; 18445 right: 0 !important; 18446 } 18447 .cookie-agreement-module .cam-contents { 18448 max-width: initial; 18449 } 18450 } 18451 @media (max-width: 992px){ 18452 .cookie-agreement-module { 18453 left: calc(50% - 180px);right: auto;top: auto;bottom: 5px;transform: scale(0.95);transform-origin: bottom;margin: 0px; 18454 left: 0 !important; 18455 right: 0 !important; 18456 } 18457 .cookie-agreement-module .cam-contents { 18458 padding: 8px; 18459 flex-direction: column; 18460 align-items: flex-start; 18461 } 18462 .cookie-agreement-module .cam-btn { 18463 margin: 10px auto 0 auto; 18464 } 18465 } 18466</style>
18466<script type="text/javascript"> 18467 $( window ).on("load", function() { 18468 let element = '.cookie-agreement-module'; 18469 // check current screen sizes 18470 let screen_width = (window.innerWidth || document.documentElement.clientWidth); 18471 if ((screen_width >= 992 && !$(element).data('desktop')) || 18472 (screen_width < 992 && !$(element).data('mobile'))){ 18473 return 18474 } 18475 18476 customAppScreenPosition(element); 18477 }); 18478 18479 function cookieAgreement(){ 18480 ajaxFormGate( 18481 'POST', 'Visitor', 'cookieAgreement', [], false, function(result){ 18482 $('.cookie-agreement-module').remove(); 18483 }, 18484 false 18485 ); 18486 } 18487</script>
18487<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>
18487<script type="text/javascript"> 18488 var swal_alert_timer = 10; 18489 </script>
18489<script type="text/javascript" src="https://www.vezzalux.com/theme/___sirius/assets/scripts.js?v=1653353722" /></script>
18489<script type="text/javascript"> 18490 $(function () { 18491 $('.addons-marquee-bar').marquee({ 18492 pauseOnHover: true, 18493 direction: 'left', 18494 duration: 60000, 18495 duplicated: true, 18496 startVisible: true, 18497 delayBeforeStart: 0 18498 }); 18499 }); 18500 </script>
18500<style> 18501body.lux-size-filter-active #luxNativePagination, 18502.lux-category-products-area.is-lux-filter-active + #luxNativePagination { 18503 display: none !important; 18504} 18505 18506.lux-custom-empty { 18507 padding: 40px 10px; 18508 text-align: center; 18509 color: #999; 18510 font-size: 14px; 18511} 18512 18513.lux-custom-pagination { 18514 display: flex; 18515 justify-content: center; 18516 align-items: center; 18517 gap: 6px; 18518 flex-wrap: wrap; 18519 margin: 34px 0 20px; 18520 padding: 0; 18521 list-style: none; 18522} 18523 18524.lux-custom-pagination button, 18525.lux-custom-pagination span { 18526 min-width: 38px; 18527 height: 38px; 18528 padding: 0 12px; 18529 border: 1px solid #ddd; 18530 background: #fff; 18531 color: #333; 18532 font-size: 13px; 18533 font-weight: 500; 18534 cursor: pointer; 18535 border-radius: 2px; 18536 transition: all .2s ease; 18537} 18538 18539.lux-custom-pagination button:hover { 18540 border-color: #111; 18541 color: #111; 18542} 18543 18544.lux-custom-pagination button.is-active { 18545 background: #111; 18546 border-color: #111; 18547 color: #fff; 18548 cursor: default; 18549} 18550 18551.lux-custom-pagination button:disabled { 18552 opacity: .45; 18553 cursor: not-allowed; 18554} 18555 18556.lux-custom-pagination span { 18557 display: inline-flex; 18558 align-items: center; 18559 justify-content: center; 18560 border: none; 18561 color: #aaa; 18562 cursor: default; 18563} 18564</style>
18564<script type="text/javascript"> 18565const CATEGORY_PAGE_DATA = { 18566 k: '', 18567 url: 'https://www.vezzalux.com/e-ayakkabi', 18568 filtreleme: '2b90c6a8ad01871748117717b2ffee80/ofEThJ1ijbituULyQv+VIJtCeQXaM1E/sn3VjgoFiC/NjgdYcnnElqItDBc4hGaQo9/LC1hBfueL4kLaUJflQZAtyYsGfyO1YTBeMHB5TysW8sGub7HferbRW1K8d1XdzwcWhq/sBTFyMU29DM3bjRRyNKHeBdLYAOCb6Brh6pFGtTe/9HfYl9tFYR7iUzzwPUOOmoozZJ9UbZxUMUl3t2dV6BjO6wxhHzi44z8RX6HnBvFccuOoFjCx+ZNAnFGhatTtW4f3ImKlZgjI3m1BvjCaou/HVC5hyM/zC57RB1uELwd/NBOndA+ZfgU+Z1TPvXVy8i5rCJXnFzdF8nrNrbIJHmH5rAzLZWjbF7bJ3xaTu7AdgE7bHdbDXp2Hw4nj1Kf7utcI0j2Grv7JtTMHcvoiwjhugvbsDyoMS0G+IrT0daIzYPC/TIyYYe9E+iGA18+GqkpLSFrhikiAMNK/Si+66S8O5THtQ9zTV83P0gzLvceJcjgdLCa6HaA+XtLsd+X+T3G8Rt0CxuZAIT8NTehzBojMry04f6eRT8hd02Bd5zpC5dlUQg9ZbjUniHYixUskUYPXEFPZxQTAl00NbdVbjxc1La4Xw5wDhbdV4fmpJr8Q/PrdvgCEWRhCro/a4rmuZo+TTO4vv/vHey2ZhPi8FSgdJ4GnGyp0x2vwD0jeqm8yxEVkI5tsmVmcm5xHbDh8ckHUrfGUbMHpIeOIvANOmPO/TIRQbLIIZEYJ86VaD1k4WM3fLBPBg6ETPhcr7B89vkTcebAK9/7eX2nBdPQ4QXT7jIqFtfJrZ/+gYEgZ08Zce8Ms3NzE3Ro5vS22ZXOAC3EWoj1Yw+tXgfrIlaqX8arwmGz/X7Z2mSbnqRvyovQ5+DWRFE0QagE35zYOaQVVZgBrwTlvJKe2ZvLyYJKlK2aIt1t55Kw85skiFIV8Ph5Ws8XGIaS4E31nmPcfM2MJ7al/vtaAIwFqfPEgvovtAPAVo2P3y0u1/I7T44Fu4JBxVnD7La+mYGwqk8bPE4mh4WyUMI20eJBFF0dFmxBUQ+gDKsNt0ARy96Ld8fdU3Hco95AXPNX8WOuyHoN/BWH46Zcn4Uqe08ndR5K4XudRGiKUNk0/d8TnMiYuHpxRxALWNcyjx7iHP9UNXlo5iYKnSPWtNJIHfhE90dzsotz9Kw2UyOPvcTGElk3yXBGNQ==' 18569}; 18570 18571$(function(){ 18572 smartCategoryFilters(CATEGORY_PAGE_DATA); 18573 18574 if (localStorage.getItem('category-view-type') == 2){ 18575 categoryViewType(6, 6, 2); 18576 } else if (localStorage.getItem('category-view-type') == 3){ 18577 categoryViewType(4, 4, 3); 18578 } else if (localStorage.getItem('category-view-type') == 4){ 18579 categoryViewType(4, 3, 4); 18580 } 18581}); 18582 18583function categoryViewType(cls1, cls2, type){ 18584 $(".p-g-mod-t-20 .col-list-p-v-1, #luxProductGrid .col-list-p-v-1").removeClass() 18585 .addClass("col-6 col-sm-6 col-md-6 col-lg-"+cls1+" col-xl-"+cls2+" col-list-p-v-1"); 18586 18587 localStorage.setItem('category-view-type', type); 18588} 18589 18590if (localStorage.getItem('category-view-type') == 2){ 18591 $(".two-view").addClass("active"); 18592} else if (localStorage.getItem('category-view-type') == 3){ 18593 $(".three-view").addClass("active"); 18594} else if (localStorage.getItem('category-view-type') == 4){ 18595 $(".four-view").addClass("active"); 18596} 18597 18598$(".two-view").click(function(){ 18599 $(".product-view-select a").removeClass("active"); 18600 $(".two-view").addClass("active"); 18601}); 18602 18603$(".three-view").click(function(){ 18604 $(".product-view-select a").removeClass("active"); 18605 $(".three-view").addClass("active"); 18606}); 18607 18608$(".four-view").click(function(){ 18609 $(".product-view-select a").removeClass("active"); 18610 $(".four-view").addClass("active"); 18611}); 18612 18613function catFilterOrder(element){ 18614 $("#cat-filter-order-"+$(element).val()).prop('checked', true).click(); 18615} 18616</script>
18616<style type="text/css"> 18617 .swal-modal { 18618 background: #fff !important; 18619 border-radius: 10px !important; 18620 padding: 0 !important; 18621 } 18622 .swal-footer { 18623 background: #F1F1F1 !important; 18624 border-radius: 0 0 10px 10px; 18625 padding: 10px; 18626 text-align: center; 18627 } 18628 .swal-footer .swal-button:focus { 18629 box-shadow: none; 18630 } 18631 .swal-title { 18632 font-size: 20px!important; 18633 margin-top: 15px!important; 18634 margin-bottom: 10px!important; 18635 } 18636 .swal-text { 18637 font-size: 15px!important; 18638 font-weight: 500!important; 18639 color: #555!important; 18640 padding: 0 10px!important; 18641 } 18642 .swal-icon { 18643 margin: 5px auto 18644 } 18645 .swal-icon--success { 18646 color: #fff !important; 18647 } 18648 .swal-icon--success__ring { 18649 background: #a5dc86; 18650 z-index: 1 18651 } 18652 .swal-icon--success__hide-corners { 18653 background: transparent; 18654 } 18655 .swal-icon--success__line { 18656 background: #fff; 18657 } 18658 .swal-icon--error { 18659 background: #f27474; 18660 } 18661 .swal-icon--error__line { 18662 background: #fff; 18663 } 18664 </style>
18664<script type="text/javascript"> 18665 18666 $(function(){ 18667 18668 18669 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":"10741","item_name":"Bottega 1314 Kahverengi S\u00fcet Loafer Erkek Ayakkab\u0131","item_brand":"Bottega Veneta","price":13500,"index":0,"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":11499,"index":1,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Bot"},{"item_id":"10731","item_name":"Cl 1302 Ye\u015fil Loafer Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":2,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10185","item_name":"Mcq 831 Parlak Gri Erkek Ayakkab\u0131","item_brand":"Alexander Mcqueen","price":12500,"index":3,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10477","item_name":"Vltn 1200 Taba Sneaker Erkek Ayakkab\u0131","item_brand":"Valentino","price":12500,"index":4,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10258","item_name":"Fendi 926 Beyaz Ye\u015fil Erkek Ayakkab\u0131","item_brand":"Fendi","price":12500,"index":5,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"9810","item_name":"Gg 808 Arkas\u0131 Gold Erkek Ayakkab\u0131","item_brand":"Golden Goose","price":10499,"index":6,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10319","item_name":"Fendi 997 Full Siyah Suet Taban\u0131 Gri Erkek Ayakkab\u0131","item_brand":"Fendi","price":12500,"index":7,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10214","item_name":"Lv 871 Siyah Erkek Ayakkab\u0131","item_brand":"Louis Vuitton","price":12500,"index":8,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10279","item_name":"Gucci 949 Siyah Beyaz Erkek Ayakkab\u0131","item_brand":"Gucci","price":12500,"index":9,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10172","item_name":"Off 816 Siyah K\u0131rm\u0131z\u0131 Logo Erkek Ayakkab\u0131","item_brand":"Off White","price":12500,"index":10,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10362","item_name":"Dior 1058 Fuul Gri Erkek Ayakkab\u0131","item_brand":"Dior","price":12499,"index":11,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10243","item_name":"Dg 902 Beyaz Arkas\u0131 Gold Erkek Ayakkab\u0131","item_brand":"Dolce Gabbana","price":12500,"index":12,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10306","item_name":"Mcq 983 Full Beyaz Desenli Erkek Ayakkab\u0131","item_brand":"Alexander Mcqueen","price":12500,"index":13,"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":10499,"index":14,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10729","item_name":"Hermes 1304 Terlik Siyah Erkek Ayakkab\u0131","item_brand":"Hermes","price":12500,"index":15,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Terlik"},{"item_id":"10269","item_name":"Dior 939 Siyah Erkek Ayakkab\u0131","item_brand":"Dior","price":12499,"index":16,"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":10499,"index":17,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10333","item_name":"Cl 1013 Siyah K\u0131rm\u0131z\u0131 Erkek Ayakkab\u0131","item_brand":"Christian Louboutin","price":12500,"index":18,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10228","item_name":"Lv 885 Siyah Turuncu Ba\u011fc\u0131k Erkek Ayakkab\u0131","item_brand":"Louis Vuitton","price":12500,"index":19,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"},{"item_id":"10294","item_name":"Hermes 969 Terlik Bej Erkek Ayakkab\u0131","item_brand":"Hermes","price":12500,"index":20,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Terlik"},{"item_id":"10317","item_name":"Lv 995 Arkas\u0131 Siyah Beyaz Desenli Erkek Ayakkab\u0131","item_brand":"Louis Vuitton","price":12500,"index":21,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10213","item_name":"Lv 870 Kot Erkek Ayakkab\u0131","item_brand":"Louis Vuitton","price":12500,"index":22,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Sneaker"},{"item_id":"10740","item_name":"Bottega 1315 S\u00fcet Gri Loafer Erkek Ayakkab\u0131","item_brand":"Bottega Veneta","price":13500,"index":23,"item_category":"ERKEK","item_category2":"Ayakkab\u0131","item_category3":"Loafer"}]}},{"platform":"facebook","event_name":"ViewContent","event_id":"","encrypted_data":"","params":{"content_name":"ERKEK > Ayakkab\u0131","content_type":"product","content_ids":["10741","10329","10731","10185","10477","10258","9810","10319","10214","10279","10172","10362","10243","10306","10200","10729","10269","10158","10333","10228","10294","10317","10213","10740"]}}]); 18670 18671 }); 18672 </script>
18672<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>
18672 18673</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.