[eccube3]各種ブロックで送料無料のやつ表示

Controller関係の話。

やりたいこと

ヘッダーのカートアイコンからカートに入れた商品が確認できる。
カート内の総額もわかる。
ついでに送料無料のやつもここに書いてあったら便利だよねという話。

参照ファイル

デフォルトで表示されてる「あと○円で送料無料」とかの煽りはCart/index.twigにある。ということはこれと、ここのControllerを見ればいい。

テンプレート
/src/Eccube/Resource/template/default/Cart/index.twig

Controller
/src/Eccube/Controller/CartController.php

編集ファイル

今回はヘッダーのカート内に入れたいから、それのやつをいじる。

テンプレート

app\template\***\Block\cart.twig

商品の合計金額は「<strong>{{ Cart.total_price|price }}</strong>」です。
{% if BaseInfo.delivery_free_amount and BaseInfo.delivery_free_quantity %}
    <br />
    {% if is_delivery_free %}
        現在送料無料です。
    {% else %}
        あと「<strong>{{ least|price }}</strong>」または「<strong>{{ quantity|number_format }}個</strong>」のお買い上げで<strong class="text-primary">送料無料</strong>になります。
    {% endif %}
{% elseif BaseInfo.delivery_free_amount %}
    <br />
    {% if is_delivery_free %}
        現在送料無料です。
    {% else %}
        あと「<strong>{{ least|price }}</strong>」のお買い上げで<strong class="text-primary">送料無料</strong>になります。
    {% endif %}
{% elseif BaseInfo.delivery_free_quantity %}
    <br />
    {% if is_delivery_free %}
        現在送料無料です。
    {% else %}
        あと「<strong>{{ quantity|number_format }}個</strong>」のお買い上げで<strong class="text-primary">送料無料</strong>になります。
    {% endif %}
{% endif %}

デフォのところから引っ張ってきて、とりあえずそのままコピペ。
条件分岐は表記内容を見れば何となく分かると思う。

Controller

src\Eccube\Controller\Block\CartController.php
同一名ファイルだけどディレクトリが一つ増えてるので注意。

「public function index(Application $app){」の中に以下を追加。

/* @var $BaseInfo \Eccube\Entity\BaseInfo */
/* @var $Cart \Eccube\Entity\Cart */
$BaseInfo = $app['eccube.repository.base_info']->get();

$isDeliveryFree = false;
$least = 0;
$quantity = 0;
if ($BaseInfo->getDeliveryFreeAmount()) {
    if ($BaseInfo->getDeliveryFreeAmount() <= $Cart->getTotalPrice()) {
        // 送料無料(金額)を超えている
        $isDeliveryFree = true;
    } else {
        $least = $BaseInfo->getDeliveryFreeAmount() - $Cart->getTotalPrice();
    }
}

if ($BaseInfo->getDeliveryFreeQuantity()) {
    if ($BaseInfo->getDeliveryFreeQuantity() <= $Cart->getTotalQuantity()) {
        // 送料無料(個数)を超えている
        $isDeliveryFree = true;
    } else {
        $quantity = $BaseInfo->getDeliveryFreeQuantity() - $Cart->getTotalQuantity();
    }
}

return $app->render(‘Block/cart.twig’, array(」の中に以下を追加。

'least' => $least,
'quantity' => $quantity,
'is_delivery_free' => $isDeliveryFree,

これでOK。

コメント

タイトルとURLをコピーしました