<?php
/*
* This file is part of PiaSimilarProducts
*
* Copyright(c) Pia Staff. All Rights Reserved.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Plugin\PiaSimilarProducts\EventSubscriber;
use Eccube\Event\TemplateEvent;
use Plugin\PiaSimilarProducts\Service\SimilarProductsService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ProductEventSubscriber implements EventSubscriberInterface
{
/**
* @var SimilarProductsService
*/
protected $similarProductsService;
public function __construct(SimilarProductsService $similarProductsService)
{
$this->similarProductsService = $similarProductsService;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'Product/detail.twig' => 'onRenderProductDetail',
];
}
/**
* 商品詳細ページに類似商品を追加
*
* @param TemplateEvent $event
*/
public function onRenderProductDetail(TemplateEvent $event)
{
// $parameters = $event->getParameters();
//
// if (!isset($parameters['Product'])) {
// return;
// }
//
// $product = $parameters['Product'];
//
// // 類似商品表示対象かチェック
// if (!$this->similarProductsService->shouldShowSimilarProducts($product)) {
// return;
// }
//
// // 類似商品を取得
// $similarProducts = $this->similarProductsService->getSimilarProducts($product);
//
// if (empty($similarProducts)) {
// return;
// }
//
// // テンプレートに類似商品を追加
// $parameters['similar_products'] = $similarProducts;
// $event->setParameters($parameters);
//
// // 類似商品セクションをテンプレートに挿入
// $source = $event->getSource();
//
// // 類似商品表示用HTML
// $similarProductsHtml = '
// {% if similar_products is defined and similar_products|length > 0 %}
// <div class="ec-productRole__similarProducts" style="margin-top: 2rem; padding: 1.5rem; background-color: #f8f9fa; border-radius: 8px;">
// <h3 style="margin-bottom: 1.5rem; font-size: 1.5rem; color: #333;">類似商品</h3>
// <div class="ec-shelfGrid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem;">
// {% for similar_product in similar_products %}
// <div class="ec-shelfGrid__item">
// <div class="ec-shelfGridItem" style="border: 1px solid #e9ecef; border-radius: 8px; padding: 1rem; background-color: white; transition: box-shadow 0.3s ease;">
// <div class="ec-shelfGridItem__image" style="text-align: center; margin-bottom: 1rem;">
// <a href="{{ url(\'product_detail\', {\'id\': similar_product.id}) }}">
// {% if similar_product.MainListImage %}
// <img src="{{ asset(similar_product.MainListImage, \'save_image\') }}" alt="{{ similar_product.name }}" style="max-width: 150px; height: 150px; object-fit: cover; border-radius: 4px;" loading="lazy">
// {% else %}
// <img src="{{ asset(\'\' | no_image_product, \'save_image\') }}" alt="{{ similar_product.name }}" style="max-width: 150px; height: 150px; object-fit: cover; border-radius: 4px;" loading="lazy">
// {% endif %}
// </a>
// </div>
// <div class="ec-shelfGridItem__itemName" style="margin-bottom: 0.5rem; font-size: 0.9rem; line-height: 1.4;">
// <a href="{{ url(\'product_detail\', {\'id\': similar_product.id}) }}" style="color: #333; text-decoration: none;">{{ similar_product.name }}</a>
// </div>
// <div class="ec-shelfGridItem__price" style="text-align: center;">
// {% if similar_product.hasProductClass %}
// {% if similar_product.getPrice02IncTaxMin == similar_product.getPrice02IncTaxMax %}
// <span class="ec-price__price" style="font-weight: bold; color: #dc3545; font-size: 1.1rem;">{{ similar_product.getPrice02IncTaxMin|price }}</span>
// {% else %}
// <span class="ec-price__price" style="font-weight: bold; color: #dc3545; font-size: 1rem;">{{ similar_product.getPrice02IncTaxMin|price }} ~ {{ similar_product.getPrice02IncTaxMax|price }}</span>
// {% endif %}
// {% else %}
// <span class="ec-price__price" style="font-weight: bold; color: #dc3545; font-size: 1.1rem;">{{ similar_product.getPrice02IncTaxMin|price }}</span>
// {% endif %}
// <br><span class="ec-price__tax" style="font-size: 0.8rem; color: #6c757d;">税込</span>
// </div>
// </div>
// </div>
// {% endfor %}
// </div>
// </div>
// {% endif %}';
//
// // レビュープラグインと同じ位置に挿入(関連動画の前)
// $search = '/<h3>関連動画<\/h3>/';
// if (preg_match($search, $source, $result)) {
// $searchText = $result[0];
// $replace = $similarProductsHtml . $searchText;
// $source = str_replace($searchText, $replace, $source);
// $event->setSource($source);
// }
}
}