{#
This file is part of EC-CUBE
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
http://www.ec-cube.co.jp/
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
#}
{# デザイン確認用: dtb_pickup_makerを使わず、メーカーと商品を直接取得 #}
{% set Makers = repository('Plugin\\Maker42\\Entity\\Maker').findBy({}, {sort_no: 'desc'}, 3) %}
{% set pickupMakers = [] %}
{% for Maker in Makers %}
{% set products = repository('Eccube\\Entity\\Product').findBy({'Maker': Maker, 'Status': 1}, {'create_date': 'DESC'}, 1000) %}
{% set inStockProducts = [] %}
{% for p in products %}
{% if p.main_list_image and p.getStockMax > 0 and inStockProducts|length < 10 %}
{% set inStockProducts = inStockProducts|merge([p]) %}
{% endif %}
{% endfor %}
{% if inStockProducts|length > 0 %}
{% set pickupMakers = pickupMakers|merge([{'maker': Maker, 'products': inStockProducts}]) %}
{% endif %}
{% endfor %}
{% if pickupMakers|length > 0 %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
<style>
.pickup-maker-section {
margin-bottom: 40px;
}
.pickup-maker-header {
margin-bottom: 16px;
padding: 0 4px;
}
.pickup-maker-header h3 {
display: flex;
align-items: center;
gap: 8px;
font-size: 1.2rem;
font-weight: bold;
margin: 0;
}
.pickup-maker-header__logo {
width: 64px !important;
height: 64px !important;
object-fit: contain;
}
.pickup-maker-more {
text-align: right;
margin-top: 12px;
padding: 0 4px;
}
.pickup-maker-swiper {
position: relative;
padding: 0 40px;
}
.pickup-maker-swiper .swiper-button-prev,
.pickup-maker-swiper .swiper-button-next {
color: #333;
width: 32px;
height: 32px;
}
.pickup-maker-swiper .swiper-button-prev::after,
.pickup-maker-swiper .swiper-button-next::after {
font-size: 16px;
}
.pickup-maker-swiper .swiper-button-prev {
left: 0;
}
.pickup-maker-swiper .swiper-button-next {
right: 0;
}
.pickup-maker-swiper .ec-shelfGrid__item {
width: 100%;
margin-bottom: 0;
padding: 0;
}
@media (max-width: 767px) {
.pickup-maker-swiper {
padding: 0 30px;
}
}
</style>
<div class="ec-role">
<div class="pickup_maker">
<h2 class="top_title">ピックアップメーカー</h2>
{% for entry in pickupMakers %}
<div class="pickup-maker-section">
<div class="pickup-maker-header">
<h3>
<a class="text-decoration-none" href="{{ url('product_list') }}?maker_id={{ entry.maker.id }}">
<img class="pickup-maker-header__logo" src="{{ asset('assets/img/maker/' ~ entry.maker.id ~ '.png', 'user_data') }}" alt="{{ entry.maker.name }}" loading="lazy">
{{ entry.maker.name }}
</a>
</h3>
</div>
<div class="pickup-maker-swiper">
<div class="swiper pickup-maker-swiper-{{ loop.index }}">
<div class="swiper-wrapper">
{% for Product in entry.products %}
<div class="swiper-slide">
<div class="ec-shelfGrid__item">
<a href="{{ url('product_detail', {'id': Product.id}) }}">
<p class="ec-shelfGrid__item-image">
<img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}"
alt="{{ Product.name }}" loading="lazy" class="w-auto">
</p>
<dl>
<dt class="fs-6 item_name">{{ Product.name }}</dt>
</dl>
</a>
<div class="ec-shelfGrid__item-buttom">
{{ include('Block/product_list_price.twig', {Product: Product}, ignore_missing = true) }}
{{ include('Block/product_code.twig', {Product: Product}, ignore_missing = true) }}
{{ include('Block/stock.twig', {Product: Product}, ignore_missing = true) }}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="swiper-button-prev swiper-button-prev-{{ loop.index }}"></div>
<div class="swiper-button-next swiper-button-next-{{ loop.index }}"></div>
</div>
<div class="pickup-maker-more">
<a class="btn-metro-color px-5 py-2 fs-6" href="{{ url('product_list') }}?maker_id={{ entry.maker.id }}">もっと見る</a>
</div>
</div>
{% endfor %}
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
{% for entry in pickupMakers %}
new Swiper('.pickup-maker-swiper-{{ loop.index }}', {
slidesPerView: 2,
spaceBetween: 12,
navigation: {
prevEl: '.swiper-button-prev-{{ loop.index }}',
nextEl: '.swiper-button-next-{{ loop.index }}',
},
breakpoints: {
768: {
slidesPerView: 4,
spaceBetween: 16,
},
1024: {
slidesPerView: 5,
spaceBetween: 20,
},
},
});
{% endfor %}
});
</script>
{% endif %}