digital_product_details.blade.php 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  1. @extends('frontend.layouts.app')
  2. @section('meta_title'){{ $detailedProduct->meta_title }}@stop
  3. @section('meta_description'){{ $detailedProduct->meta_description }}@stop
  4. @section('meta_keywords'){{ $detailedProduct->tags }}@stop
  5. @section('meta')
  6. <!-- Schema.org markup for Google+ -->
  7. <meta itemprop="name" content="{{ $detailedProduct->meta_title }}">
  8. <meta itemprop="description" content="{{ $detailedProduct->meta_description }}">
  9. <meta itemprop="image" content="{{ uploaded_asset($detailedProduct->meta_img) }}">
  10. <!-- Twitter Card data -->
  11. <meta name="twitter:card" content="product">
  12. <meta name="twitter:site" content="@publisher_handle">
  13. <meta name="twitter:title" content="{{ $detailedProduct->meta_title }}">
  14. <meta name="twitter:description" content="{{ $detailedProduct->meta_description }}">
  15. <meta name="twitter:creator" content="@author_handle">
  16. <meta name="twitter:image" content="{{ uploaded_asset($detailedProduct->meta_img) }}">
  17. <meta name="twitter:data1" content="{{ single_price($detailedProduct->unit_price) }}">
  18. <meta name="twitter:label1" content="Price">
  19. <!-- Open Graph data -->
  20. <meta property="og:title" content="{{ $detailedProduct->meta_title }}" />
  21. <meta property="og:type" content="product" />
  22. <meta property="og:url" content="{{ route('product', $detailedProduct->slug) }}" />
  23. <meta property="og:image" content="{{ uploaded_asset($detailedProduct->meta_img) }}" />
  24. <meta property="og:description" content="{{ $detailedProduct->meta_description }}" />
  25. <meta property="og:site_name" content="{{ get_setting('meta_title') }}" />
  26. <meta property="og:price:amount" content="{{ single_price($detailedProduct->unit_price) }}" />
  27. @endsection
  28. @section('content')
  29. <section class="mb-4 pt-3">
  30. <div class="container">
  31. <div class="bg-white shadow-sm rounded p-3">
  32. <div class="row">
  33. <div class="col-xl-5 col-lg-6">
  34. <div class="sticky-top z-3 row gutters-10 flex-row-reverse">
  35. @if($detailedProduct->photos != null)
  36. @php
  37. $photos = explode(',',$detailedProduct->photos);
  38. @endphp
  39. <div class="col">
  40. <div class="aiz-carousel product-gallery" data-nav-for='.product-gallery-thumb' data-fade='true'>
  41. @foreach ($photos as $key => $photo)
  42. <div class="carousel-box img-zoom rounded">
  43. <img
  44. class="img-fluid lazyload"
  45. src="{{ static_asset('assets/img/placeholder.jpg') }}"
  46. data-src="{{ uploaded_asset($photo) }}"
  47. onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';"
  48. >
  49. </div>
  50. @endforeach
  51. </div>
  52. </div>
  53. <div class="col-auto w-90px">
  54. <div class="aiz-carousel carousel-thumb product-gallery-thumb" data-items='5' data-nav-for='.product-gallery' data-vertical='true' data-focus-select='true'>
  55. @foreach ($photos as $key => $photo)
  56. <div class="carousel-box c-pointer border p-1 rounded">
  57. <img
  58. class="lazyload mw-100 size-60px mx-auto"
  59. src="{{ static_asset('assets/img/placeholder.jpg') }}"
  60. data-src="{{ uploaded_asset($photo) }}"
  61. onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';"
  62. >
  63. </div>
  64. @endforeach
  65. </div>
  66. </div>
  67. @endif
  68. </div>
  69. </div>
  70. <div class="col-xl-7 col-lg-6">
  71. <div class="text-left">
  72. <h1 class="mb-2 fs-20 fw-600">
  73. {{ $detailedProduct->getTranslation('name') }}
  74. </h1>
  75. <div class="row align-items-center">
  76. <div class="col-6">
  77. @php
  78. $total = 0;
  79. $total += $detailedProduct->reviews->count();
  80. @endphp
  81. <span class="rating">
  82. {{ renderStarRating($detailedProduct->rating) }}
  83. </span>
  84. <span class="ml-1 opacity-50">({{ $total }} {{ translate('reviews')}})</span>
  85. </div>
  86. <div class="col-6 text-right">
  87. @php
  88. $qty = 0;
  89. //if($detailedProduct->variant_product){
  90. foreach ($detailedProduct->stocks as $key => $stock) {
  91. $qty += $stock->qty;
  92. }
  93. //}
  94. //else{
  95. //$qty = $detailedProduct->current_stock;
  96. //}
  97. @endphp
  98. <span class="badge badge-md badge-inline badge-pill badge-success">{{ translate('In stock')}}</span>
  99. </div>
  100. </div>
  101. <hr>
  102. <div class="row align-items-center">
  103. <div class="col-auto">
  104. <small class="mr-2 opacity-50">{{ translate('Sold by')}}: </small><br>
  105. @if ($detailedProduct->added_by == 'seller' && get_setting('vendor_system_activation') == 1)
  106. <a href="{{ route('shop.visit', $detailedProduct->user->shop->slug) }}" class="text-reset">{{ $detailedProduct->user->shop->name }}</a>
  107. @else
  108. {{ translate('Inhouse product') }}
  109. @endif
  110. </div>
  111. @if (get_setting('conversation_system') == 1)
  112. <div class="col-auto">
  113. <button class="btn btn-sm btn-soft-primary" onclick="show_chat_modal()">{{ translate('Message Seller')}}</button>
  114. </div>
  115. @endif
  116. @if ($detailedProduct->brand != null)
  117. <div class="col-auto">
  118. <img src="{{ uploaded_asset($detailedProduct->brand->logo) }}" alt="{{ $detailedProduct->brand->getTranslation('name') }}" height="30">
  119. </div>
  120. @endif
  121. </div>
  122. <hr>
  123. @if(home_price($detailedProduct) != home_discounted_price($detailedProduct))
  124. <div class="row no-gutters mt-3">
  125. <div class="col-2">
  126. <div class="opacity-50 mt-2">{{ translate('Price')}}:</div>
  127. </div>
  128. <div class="col-10">
  129. <div class="fs-20 opacity-60">
  130. <del>
  131. {{ home_price($detailedProduct) }}
  132. @if($detailedProduct->unit != null)
  133. <span>/{{ $detailedProduct->getTranslation('unit') }}</span>
  134. @endif
  135. </del>
  136. </div>
  137. </div>
  138. </div>
  139. <div class="row no-gutters mt-2">
  140. <div class="col-2">
  141. <div class="opacity-50">{{ translate('Discount Price')}}:</div>
  142. </div>
  143. <div class="col-10">
  144. <div class="">
  145. <strong class="h2 fw-600 text-primary">
  146. {{ home_discounted_price($detailedProduct) }}
  147. </strong>
  148. @if($detailedProduct->unit != null)
  149. <span class="opacity-70">/{{ $detailedProduct->getTranslation('unit') }}</span>
  150. @endif
  151. </div>
  152. </div>
  153. </div>
  154. @else
  155. <div class="row no-gutters mt-3">
  156. <div class="col-2">
  157. <div class="opacity-50">{{ translate('Price')}}:</div>
  158. </div>
  159. <div class="col-10">
  160. <div class="">
  161. <strong class="h2 fw-600 text-primary">
  162. {{ home_discounted_price($detailedProduct) }}
  163. </strong>
  164. @if($detailedProduct->unit != null)
  165. <span class="opacity-70">/{{ $detailedProduct->getTranslation('unit') }}</span>
  166. @endif
  167. </div>
  168. </div>
  169. </div>
  170. @endif
  171. @if (addon_is_activated('club_point') && $detailedProduct->earn_point > 0)
  172. <div class="row no-gutters mt-4">
  173. <div class="col-2">
  174. <div class="opacity-50">{{ translate('Club Point') }}:</div>
  175. </div>
  176. <div class="col-10">
  177. <div class="d-inline-block club-point bg-soft-base-1 border-light-base-1 border">
  178. <span class="strong-700">{{ $detailedProduct->earn_point }}</span>
  179. </div>
  180. </div>
  181. </div>
  182. @endif
  183. <hr>
  184. <form id="option-choice-form">
  185. @csrf
  186. <input type="hidden" name="id" value="{{ $detailedProduct->id }}">
  187. <div class="row no-gutters pb-3 d-none" id="chosen_price_div">
  188. <div class="col-2">
  189. <div class="opacity-50">{{ translate('Total Price')}}:</div>
  190. </div>
  191. <div class="col-10">
  192. <div class="product-price">
  193. <strong id="chosen_price" class="h4 fw-600 text-primary">
  194. </strong>
  195. </div>
  196. </div>
  197. </div>
  198. </form>
  199. <div class="mt-3">
  200. <button type="button" class="btn btn-soft-primary mr-2 add-to-cart fw-600" onclick="addToCart()">
  201. <i class="las la-shopping-bag"></i>
  202. <span class="d-none d-md-inline-block"> {{ translate('Add to cart')}}</span>
  203. </button>
  204. <button type="button" class="btn btn-primary buy-now fw-600" onclick="buyNow()">
  205. <i class="la la-shopping-cart"></i> {{ translate('Buy Now')}}
  206. </button>
  207. </div>
  208. <div class="d-table width-100 mt-3">
  209. <div class="d-table-cell">
  210. <!-- Add to wishlist button -->
  211. <button type="button" class="btn pl-0 btn-link fw-600" onclick="addToWishList({{ $detailedProduct->id }})">
  212. {{ translate('Add to wishlist')}}
  213. </button>
  214. <!-- Add to compare button -->
  215. <button type="button" class="btn btn-link btn-icon-left fw-600" onclick="addToCompare({{ $detailedProduct->id }})">
  216. {{ translate('Add to compare')}}
  217. </button>
  218. @if(Auth::check() && addon_is_activated('affiliate_system') && (\App\Models\AffiliateOption::where('type', 'product_sharing')->first()->status || \App\Models\AffiliateOption::where('type', 'category_wise_affiliate')->first()->status) && Auth::user()->affiliate_user != null && Auth::user()->affiliate_user->status)
  219. @php
  220. if(Auth::check()){
  221. if(Auth::user()->referral_code == null){
  222. Auth::user()->referral_code = substr(Auth::user()->id.Str::random(10), 0, 10);
  223. Auth::user()->save();
  224. }
  225. $referral_code = Auth::user()->referral_code;
  226. $referral_code_url = URL::to('/product').'/'.$detailedProduct->slug."?product_referral_code=$referral_code";
  227. }
  228. @endphp
  229. <div class="form-group">
  230. <textarea id="referral_code_url" class="form-control" readonly type="text" style="display:none">{{$referral_code_url}}</textarea>
  231. </div>
  232. <button type=button id="ref-cpurl-btn" class="btn btn-sm btn-secondary" data-attrcpy="{{ translate('Copied')}}" onclick="CopyToClipboard('referral_code_url')">{{ translate('Copy the Promote Link')}}</button>
  233. @endif
  234. </div>
  235. </div>
  236. <hr class="mt-2">
  237. @php
  238. $refund_sticker = get_setting('refund_sticker');
  239. @endphp
  240. @if (addon_is_activated('refund_request'))
  241. <div class="row no-gutters mt-3">
  242. <div class="col-2">
  243. <div class="opacity-50 mt-2">{{ translate('Refund')}}:</div>
  244. </div>
  245. <div class="col-10">
  246. <a href="{{ route('returnpolicy') }}" target="_blank">
  247. @if ($refund_sticker != null)
  248. <img src="{{ uploaded_asset($refund_sticker) }}" height="36">
  249. @else
  250. <img src="{{ static_asset('assets/img/refund-sticker.jpg') }}" height="36">
  251. @endif</a>
  252. <a href="{{ route('returnpolicy') }}" class="ml-2" target="_blank">{{ translate('View Policy') }}</a>
  253. </div>
  254. </div>
  255. @endif
  256. @if ($detailedProduct->added_by == 'seller')
  257. <div class="row no-gutters mt-3">
  258. <div class="col-2">
  259. <div class="product-description-label">{{ translate('Seller Guarantees')}}:</div>
  260. </div>
  261. <div class="col-10">
  262. @if ($detailedProduct->user->shop->verification_status == 1)
  263. {{ translate('Verified seller')}}
  264. @else
  265. {{ translate('Non verified seller')}}
  266. @endif
  267. </div>
  268. </div>
  269. @endif
  270. <div class="row no-gutters mt-4">
  271. <div class="col-2">
  272. <div class="opacity-50 mt-2">{{ translate('Share')}}:</div>
  273. </div>
  274. <div class="col-10">
  275. <div class="aiz-share"></div>
  276. </div>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. </div>
  282. </div>
  283. </section>
  284. <section class="mb-4">
  285. <div class="container">
  286. <div class="row">
  287. <div class="col-xl-3">
  288. @if ($detailedProduct->added_by == 'seller' && $detailedProduct->user->shop != null)
  289. <div class="bg-white shadow-sm mb-3">
  290. <div class="position-relative p-3 text-left">
  291. @if ($detailedProduct->user->shop->verification_status)
  292. <div class="absolute-top-right p-2 bg-white z-1">
  293. <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" viewBox="0 0 287.5 442.2" width="22" height="34">
  294. <polygon style="fill:#F8B517;" points="223.4,442.2 143.8,376.7 64.1,442.2 64.1,215.3 223.4,215.3 "/>
  295. <circle style="fill:#FBD303;" cx="143.8" cy="143.8" r="143.8"/>
  296. <circle style="fill:#F8B517;" cx="143.8" cy="143.8" r="93.6"/>
  297. <polygon style="fill:#FCFCFD;" points="143.8,55.9 163.4,116.6 227.5,116.6 175.6,154.3 195.6,215.3 143.8,177.7 91.9,215.3 111.9,154.3
  298. 60,116.6 124.1,116.6 "/>
  299. </svg>
  300. </div>
  301. @endif
  302. <div class="opacity-50 fs-12 border-bottom">{{ translate('Sold by')}}</div>
  303. <a href="{{ route('shop.visit', $detailedProduct->user->shop->slug) }}" class="text-reset d-block fw-600">
  304. {{ $detailedProduct->user->shop->name }}
  305. @if ($detailedProduct->user->shop->verification_status == 1)
  306. <span class="ml-2"><i class="fa fa-check-circle" style="color:green"></i></span>
  307. @else
  308. <span class="ml-2"><i class="fa fa-times-circle" style="color:red"></i></span>
  309. @endif
  310. </a>
  311. <div class="location opacity-70">{{ $detailedProduct->user->shop->address }}</div>
  312. <div class="text-center border rounded p-2 mt-3">
  313. <div class="rating">
  314. @if ($total > 0)
  315. {{ renderStarRating($detailedProduct->user->shop->rating) }}
  316. @else
  317. {{ renderStarRating(0) }}
  318. @endif
  319. </div>
  320. <div class="opacity-60 fs-12">({{ $total }} {{ translate('customer reviews')}})</div>
  321. </div>
  322. </div>
  323. <div class="row no-gutters align-items-center border-top">
  324. <div class="col">
  325. <a href="{{ route('shop.visit', $detailedProduct->user->shop->slug) }}" class="d-block btn btn-soft-primary rounded-0">{{ translate('Visit Store')}}</a>
  326. </div>
  327. <div class="col">
  328. <ul class="social list-inline mb-0">
  329. <li class="list-inline-item mr-0">
  330. <a href="{{ $detailedProduct->user->shop->facebook }}" class="facebook" target="_blank">
  331. <i class="lab la-facebook-f opacity-60"></i>
  332. </a>
  333. </li>
  334. <li class="list-inline-item mr-0">
  335. <a href="{{ $detailedProduct->user->shop->google }}" class="google" target="_blank">
  336. <i class="lab la-google opacity-60"></i>
  337. </a>
  338. </li>
  339. <li class="list-inline-item mr-0">
  340. <a href="{{ $detailedProduct->user->shop->twitter }}" class="twitter" target="_blank">
  341. <i class="lab la-twitter opacity-60"></i>
  342. </a>
  343. </li>
  344. <li class="list-inline-item">
  345. <a href="{{ $detailedProduct->user->shop->youtube }}" class="youtube" target="_blank">
  346. <i class="lab la-youtube opacity-60"></i>
  347. </a>
  348. </li>
  349. </ul>
  350. </div>
  351. </div>
  352. </div>
  353. @endif
  354. <div class="bg-white rounded shadow-sm mb-3">
  355. <div class="p-3 border-bottom fs-16 fw-600">
  356. {{ translate('Top Selling Products')}}
  357. </div>
  358. <div class="p-3">
  359. <ul class="list-group list-group-flush">
  360. @foreach ( filter_products(\App\Models\Product::query()->from("products as p")->where('user_id', $detailedProduct->user_id)->orderBy('num_of_sale', 'desc'))->limit(6)->get() as $key => $top_product)
  361. <li class="py-3 px-0 list-group-item border-light">
  362. <div class="row gutters-10 align-items-center">
  363. <div class="col-5">
  364. <a href="{{ route('product', $top_product->slug) }}" class="d-block text-reset">
  365. <img
  366. class="img-fit lazyload h-110px"
  367. src="{{ static_asset('assets/img/placeholder.jpg') }}"
  368. data-src="{{ uploaded_asset($top_product->thumbnail_img) }}"
  369. alt="{{ $top_product->getTranslation('name') }}"
  370. onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';"
  371. >
  372. </a>
  373. </div>
  374. <div class="col-7">
  375. <h4 class="fs-13 text-truncate-2">
  376. <a href="{{ route('product', $top_product->slug) }}" class="d-block text-reset">{{ $top_product->getTranslation('name') }}</a>
  377. </h4>
  378. <div class="rating rating-sm mt-1">
  379. {{ renderStarRating($top_product->rating) }}
  380. </div>
  381. <div class="mt-2">
  382. <span class="fs-17 fw-600 text-primary">{{ home_discounted_base_price($top_product) }}</span>
  383. </div>
  384. </div>
  385. </div>
  386. </li>
  387. @endforeach
  388. </ul>
  389. </div>
  390. </div>
  391. </div>
  392. <div class="col-xl-9">
  393. <div class="bg-white mb-3 shadow-sm rounded">
  394. <div class="nav border-bottom aiz-nav-tabs">
  395. <a href="#tab_default_1" data-toggle="tab" class="p-3 fs-16 fw-600 text-reset active show">{{ translate('Description')}}</a>
  396. @if($detailedProduct->video_link != null)
  397. <a href="#tab_default_2" data-toggle="tab" class="p-3 fs-16 fw-600 text-reset">{{ translate('Video')}}</a>
  398. @endif
  399. @if($detailedProduct->pdf != null)
  400. <a href="#tab_default_3" data-toggle="tab" class="p-3 fs-16 fw-600 text-reset">{{ translate('Downloads')}}</a>
  401. @endif
  402. <a href="#tab_default_4" data-toggle="tab" class="p-3 fs-16 fw-600 text-reset">{{ translate('Reviews')}}</a>
  403. </div>
  404. <div class="tab-content pt-0">
  405. <div class="tab-pane active show" id="tab_default_1">
  406. <div class="p-4">
  407. <div class="mw-100 overflow-hidden">
  408. <?php echo $detailedProduct->getTranslation('description'); ?>
  409. </div>
  410. </div>
  411. </div>
  412. <div class="tab-pane" id="tab_default_2">
  413. <div class="p-4">
  414. <!-- 16:9 aspect ratio -->
  415. <div class="embed-responsive embed-responsive-16by9 mb-5">
  416. @if ($detailedProduct->video_provider == 'youtube' && isset(explode('=', $detailedProduct->video_link)[1]))
  417. <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/{{ explode('=', $detailedProduct->video_link)[1] }}"></iframe>
  418. @elseif ($detailedProduct->video_provider == 'dailymotion' && isset(explode('video/', $detailedProduct->video_link)[1]))
  419. <iframe class="embed-responsive-item" src="https://www.dailymotion.com/embed/video/{{ explode('video/', $detailedProduct->video_link)[1] }}"></iframe>
  420. @elseif ($detailedProduct->video_provider == 'vimeo' && isset(explode('vimeo.com/', $detailedProduct->video_link)[1]))
  421. <iframe src="https://player.vimeo.com/video/{{ explode('vimeo.com/', $detailedProduct->video_link)[1] }}" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
  422. @endif
  423. </div>
  424. </div>
  425. </div>
  426. <div class="tab-pane" id="tab_default_3">
  427. <div class="p-4 text-center">
  428. <a href="{{ uploaded_asset($detailedProduct->pdf) }}" class="btn btn-primary">{{ translate('Download') }}</a>
  429. </div>
  430. </div>
  431. <div class="tab-pane" id="tab_default_4">
  432. <div class="p-4">
  433. <ul class="list-group list-group-flush">
  434. @foreach ($detailedProduct->reviews as $key => $review)
  435. @if($review->user != null)
  436. <li class="media list-group-item d-flex">
  437. <span class="avatar avatar-md mr-3">
  438. <img
  439. class="lazyload"
  440. src="{{ static_asset('assets/img/placeholder.jpg') }}"
  441. onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';"
  442. @if($review->user->avatar_original !=null)
  443. data-src="{{ uploaded_asset($review->user->avatar_original) }}"
  444. @else
  445. data-src="{{ uploaded_asset('assets/img/placeholder.jpg') }}"
  446. @endif
  447. >
  448. </span>
  449. <div class="media-body">
  450. <div class="d-flex justify-content-between">
  451. <h3 class="fs-15 fw-600 mb-0">{{ $review->user->name }}</h3>
  452. <span class="rating rating-sm">
  453. @for ($i=0; $i < $review->rating; $i++)
  454. <i class="las la-star active"></i>
  455. @endfor
  456. @for ($i=0; $i < 5-$review->rating; $i++)
  457. <i class="las la-star"></i>
  458. @endfor
  459. </span>
  460. </div>
  461. <div class="opacity-60 mb-2">{{ date('d-m-Y', strtotime($review->created_at)) }}</div>
  462. <p class="comment-text">
  463. {{ $review->comment }}
  464. </p>
  465. </div>
  466. </li>
  467. @endif
  468. @endforeach
  469. </ul>
  470. @if(count($detailedProduct->reviews) <= 0)
  471. <div class="text-center fs-18 opacity-70">
  472. {{ translate('There have been no reviews for this product yet.') }}
  473. </div>
  474. @endif
  475. @if(Auth::check())
  476. @php
  477. $commentable = false;
  478. @endphp
  479. @foreach ($detailedProduct->orderDetails as $key => $orderDetail)
  480. @if($orderDetail->order != null && $orderDetail->order->user_id == Auth::user()->id && $orderDetail->delivery_status == 'delivered' && \App\Models\Review::where('user_id', Auth::user()->id)->where('product_id', $detailedProduct->id)->first() == null)
  481. @php
  482. $commentable = true;
  483. @endphp
  484. @endif
  485. @endforeach
  486. @if ($commentable)
  487. <div class="pt-4">
  488. <div class="border-bottom mb-4">
  489. <h3 class="fs-17 fw-600">
  490. {{ translate('Write a review')}}
  491. </h3>
  492. </div>
  493. <form class="form-default" role="form" action="{{ route('reviews.store') }}" method="POST">
  494. @csrf
  495. <input type="hidden" name="product_id" value="{{ $detailedProduct->id }}">
  496. <div class="row">
  497. <div class="col-md-6">
  498. <div class="form-group">
  499. <label for="" class="text-uppercase c-gray-light">{{ translate('Your name')}}</label>
  500. <input type="text" name="name" value="{{ Auth::user()->name }}" class="form-control" disabled required>
  501. </div>
  502. </div>
  503. <div class="col-md-6">
  504. <div class="form-group">
  505. <label for="" class="text-uppercase c-gray-light">{{ translate('Email')}}</label>
  506. <input type="text" name="email" value="{{ Auth::user()->email }}" class="form-control" required disabled>
  507. </div>
  508. </div>
  509. </div>
  510. <div class="form-group">
  511. <label class="opacity-60">{{ translate('Rating')}}</label>
  512. <div class="rating rating-input">
  513. <label>
  514. <input type="radio" name="rating" value="1">
  515. <i class="las la-star"></i>
  516. </label>
  517. <label>
  518. <input type="radio" name="rating" value="2">
  519. <i class="las la-star"></i>
  520. </label>
  521. <label>
  522. <input type="radio" name="rating" value="3">
  523. <i class="las la-star"></i>
  524. </label>
  525. <label>
  526. <input type="radio" name="rating" value="4">
  527. <i class="las la-star"></i>
  528. </label>
  529. <label>
  530. <input type="radio" name="rating" value="5">
  531. <i class="las la-star"></i>
  532. </label>
  533. </div>
  534. </div>
  535. <div class="form-group">
  536. <label class="opacity-60">{{ translate('Comment')}}</label>
  537. <textarea class="form-control" rows="4" name="comment" placeholder="{{ translate('Your review')}}" required></textarea>
  538. </div>
  539. <div class="text-right">
  540. <button type="submit" class="btn btn-primary mt-3">
  541. {{ translate('Submit review')}}
  542. </button>
  543. </div>
  544. </form>
  545. </div>
  546. @endif
  547. @endif
  548. </div>
  549. </div>
  550. </div>
  551. </div>
  552. <div class="bg-white rounded shadow-sm">
  553. <div class="border-bottom p-3">
  554. <h3 class="fs-16 fw-600 mb-0 text-left">
  555. <span class="">{{ translate('Related products')}}</span>
  556. </h3>
  557. </div>
  558. <div class="p-3">
  559. <div class="aiz-carousel gutters-5 half-outside-arrow" data-items="5" data-xl-items="3" data-lg-items="4" data-md-items="3" data-sm-items="2" data-xs-items="2" data-arrows='true' data-infinite='true'>
  560. @foreach ( filter_products(\App\Models\Product::query()->from("products as p")->where('category_id', $detailedProduct->category_id)->where('id', '!=', $detailedProduct->id))->limit(10)->get() as $key => $related_product)
  561. <div class="carousel-box">
  562. <div class="aiz-card-box border border-light rounded hov-shadow-md my-2 has-transition">
  563. <div class="">
  564. <a href="{{ route('product', $related_product->slug) }}" class="d-block">
  565. <img
  566. class="img-fit lazyload mx-auto h-140px h-md-210px"
  567. src="{{ static_asset('assets/img/placeholder.jpg') }}"
  568. data-src="{{ uploaded_asset($related_product->thumbnail_img) }}"
  569. alt="{{ $related_product->getTranslation('name') }}"
  570. onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';"
  571. >
  572. </a>
  573. </div>
  574. <div class="p-md-3 p-2 text-left">
  575. <div class="fs-15">
  576. @if(home_base_price($related_product) != home_discounted_base_price($related_product))
  577. <del class="fw-600 opacity-50 mr-1">{{ home_base_price($related_product) }}</del>
  578. @endif
  579. <span class="fw-700 text-primary">{{ home_discounted_base_price($related_product) }}</span>
  580. </div>
  581. <div class="rating rating-sm mt-1">
  582. {{ renderStarRating($related_product->rating) }}
  583. </div>
  584. <h3 class="fw-600 fs-13 text-truncate-2 lh-1-4 mb-0">
  585. <a href="{{ route('product', $related_product->slug) }}" class="d-block text-reset">{{ $related_product->getTranslation('name') }}</a>
  586. </h3>
  587. @if (addon_is_activated('club_point'))
  588. <div class="rounded px-2 mt-2 bg-soft-primary border-soft-primary border">
  589. {{ translate('Club Point') }}:
  590. <span class="fw-700 float-right">{{ $related_product->earn_point }}</span>
  591. </div>
  592. @endif
  593. </div>
  594. </div>
  595. </div>
  596. @endforeach
  597. </div>
  598. </div>
  599. </div>
  600. </div>
  601. </div>
  602. </div>
  603. </section>
  604. @endsection
  605. @section('modal')
  606. <div class="modal fade" id="chat_modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  607. <div class="modal-dialog modal-dialog-centered modal-dialog-zoom product-modal" id="modal-size" role="document">
  608. <div class="modal-content position-relative">
  609. <div class="modal-header">
  610. <h5 class="modal-title fw-600 heading-5">{{ translate('Any question about this product?')}}</h5>
  611. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  612. <span aria-hidden="true">&times;</span>
  613. </button>
  614. </div>
  615. <form class="" action="{{ route('conversations.store') }}" method="POST" enctype="multipart/form-data">
  616. @csrf
  617. <input type="hidden" name="product_id" value="{{ $detailedProduct->id }}">
  618. <div class="modal-body gry-bg px-3 pt-3">
  619. <div class="form-group">
  620. <input type="text" class="form-control mb-3" name="title" value="{{ $detailedProduct->getTranslation('name') }}" placeholder="{{ translate('Product Name') }}" required>
  621. </div>
  622. <div class="form-group">
  623. <textarea class="form-control" rows="8" name="message" required placeholder="{{ translate('Your Question') }}">{{ route('product', $detailedProduct->slug) }}</textarea>
  624. </div>
  625. </div>
  626. <div class="modal-footer">
  627. <button type="button" class="btn btn-outline-primary fw-600" data-dismiss="modal">{{ translate('Cancel')}}</button>
  628. <button type="submit" class="btn btn-primary fw-600">{{ translate('Send')}}</button>
  629. </div>
  630. </form>
  631. </div>
  632. </div>
  633. </div>
  634. <!-- Modal -->
  635. <div class="modal fade" id="login_modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  636. <div class="modal-dialog modal-dialog-zoom" role="document">
  637. <div class="modal-content">
  638. <div class="modal-header">
  639. <h6 class="modal-title fw-600">{{ translate('Login')}}</h6>
  640. <button type="button" class="close" data-dismiss="modal">
  641. <span aria-hidden="true"></span>
  642. </button>
  643. </div>
  644. <div class="modal-body">
  645. <div class="p-3">
  646. <form class="form-default" role="form" action="{{ route('cart.login.submit') }}" method="POST">
  647. @csrf
  648. <div class="form-group">
  649. @if (addon_is_activated('otp_system'))
  650. <input type="text" class="form-control h-auto form-control-lg {{ $errors->has('email') ? ' is-invalid' : '' }}" value="{{ old('email') }}" placeholder="{{ translate('Email Or Phone')}}" name="email" id="email">
  651. @else
  652. <input type="email" class="form-control h-auto form-control-lg {{ $errors->has('email') ? ' is-invalid' : '' }}" value="{{ old('email') }}" placeholder="{{ translate('Email') }}" name="email">
  653. @endif
  654. @if (addon_is_activated('otp_system'))
  655. <span class="opacity-60">{{ translate('Use country code before number') }}</span>
  656. @endif
  657. </div>
  658. <div class="form-group">
  659. <input type="password" name="password" class="form-control h-auto form-control-lg" placeholder="{{ translate('Password')}}">
  660. </div>
  661. <div class="row mb-2">
  662. <div class="col-6">
  663. <label class="aiz-checkbox">
  664. <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}>
  665. <span class=opacity-60>{{ translate('Remember Me') }}</span>
  666. <span class="aiz-square-check"></span>
  667. </label>
  668. </div>
  669. <div class="col-6 text-right">
  670. <a href="{{ route('password.request') }}" class="text-reset opacity-60 fs-14">{{ translate('Forgot password?')}}</a>
  671. </div>
  672. </div>
  673. <div class="mb-5">
  674. <button type="submit" class="btn btn-primary btn-block fw-600">{{ translate('Login') }}</button>
  675. </div>
  676. </form>
  677. <div class="text-center mb-3">
  678. <p class="text-muted mb-0">{{ translate('Dont have an account?')}}</p>
  679. <a href="{{ route('user.registration') }}">{{ translate('Register Now')}}</a>
  680. </div>
  681. @if(get_setting('google_login') == 1 ||
  682. get_setting('facebook_login') == 1 ||
  683. get_setting('twitter_login') == 1)
  684. <div class="separator mb-3">
  685. <span class="bg-white px-3 opacity-60">{{ translate('Or Login With')}}</span>
  686. </div>
  687. <ul class="list-inline social colored text-center mb-5">
  688. @if (get_setting('facebook_login') == 1)
  689. <li class="list-inline-item">
  690. <a href="{{ route('social.login', ['provider' => 'facebook']) }}" class="facebook">
  691. <i class="lab la-facebook-f"></i>
  692. </a>
  693. </li>
  694. @endif
  695. @if(get_setting('google_login') == 1)
  696. <li class="list-inline-item">
  697. <a href="{{ route('social.login', ['provider' => 'google']) }}" class="google">
  698. <i class="lab la-google"></i>
  699. </a>
  700. </li>
  701. @endif
  702. @if (get_setting('twitter_login') == 1)
  703. <li class="list-inline-item">
  704. <a href="{{ route('social.login', ['provider' => 'twitter']) }}" class="twitter">
  705. <i class="lab la-twitter"></i>
  706. </a>
  707. </li>
  708. @endif
  709. </ul>
  710. @endif
  711. </div>
  712. </div>
  713. </div>
  714. </div>
  715. </div>
  716. @endsection
  717. @section('script')
  718. <script type="text/javascript">
  719. $(document).ready(function() {
  720. $('#share').share({
  721. showLabel: false,
  722. showCount: false,
  723. shares: ["email", "twitter", "facebook", "linkedin", "pinterest", "stumbleupon", "whatsapp"]
  724. });
  725. });
  726. function CopyToClipboard(containerid) {
  727. if (document.selection) {
  728. var range = document.body.createTextRange();
  729. range.moveToElementText(document.getElementById(containerid));
  730. range.select().createTextRange();
  731. document.execCommand("Copy");
  732. } else if (window.getSelection) {
  733. var range = document.createRange();
  734. document.getElementById(containerid).style.display = "block";
  735. range.selectNode(document.getElementById(containerid));
  736. window.getSelection().addRange(range);
  737. document.execCommand("Copy");
  738. document.getElementById(containerid).style.display = "none";
  739. }
  740. showFrontendAlert('success', 'Copied');
  741. }
  742. function show_chat_modal(){
  743. @if (Auth::check())
  744. $('#chat_modal').modal('show');
  745. @else
  746. $('#login_modal').modal('show');
  747. @endif
  748. }
  749. </script>
  750. @endsection