商品別支払い方法設定プラグインでAmazon Payを支払い方法に設定していない商品がカートに入っている場合、Amazon Payボタンを非表示にする方法です。
Customizeディレクトリにservices.yamlを作成
services.yamlをCustomizeディレクトリに作成してください。
app/Customize/Resource/config/services.yaml
twig:
paths:
'%kernel.project_dir%/app/Customize/Resource/template': Customize
テンプレートを作成
app/Customize/Resource/template/default/Cart/index.twig
<script>
$(function () {
$('.AmazonPayButton').hide();
})
</script>
カートページ用のイベントを作成
app/Customize/CartEvent.php
<?php
namespace Customize;
use Eccube\Entity\Cart;
use Eccube\Event\TemplateEvent;
use Plugin\ProductPayment42\Entity\ProductPayment;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CartEvent implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
'Cart/index.twig' => 'onCartTemplate'
];
}
public function onCartTemplate(TemplateEvent $event)
{
$carts = $event->getParameter('Carts');
/** @var Cart $cart */
foreach ($carts as $cart) {
foreach ($cart->getItems() as $item) {
if ($item->isProduct()) {
$product = $item->getProductClass()->getProduct();
if ($product->getProductPayments()->isEmpty()) {
continue;
}
$payments = $product->getProductPayments()->filter(function (ProductPayment $row) {
return 'Amazon Pay' === $row->getPayment()->getMethod();
});
/**
* Amazon Payが利用できない商品が見つかったらAmazon Payボタンを非表示にする
*/
if ($payments->count() < 1) {
$event->addSnippet('@Customize/default/Cart/index.twig');
break 2;
}
}
}
}
}
}
上記コードはEC-CUBE4.2に対応したものです。
EC-CUBE4.0〜4.1で利用したい場合は7行目を以下のように修正してください。
use Plugin\ProductPayment42\Entity\ProductPayment;
以上です。