EC-CUBE 4.0.x系 商品数量毎に送料が掛かるカスタマイズ


2.13.x系の時に苦労した件だが、新たにサイトを4.0.x系で制作しなおしたので、
今回もEC-CUBEでカートの中の商品数分の送料を実装する。
(商品1個が大きかったり重かったりして、商品1個毎に送料が掛かる場合を想定)
※例えば、A商品を3つ、B商品を2つ購入した場合には「配送業者別の送料×5」が掛かる時。

/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php

を変更。

130~134行目付近、

            /** @var DeliveryFee $DeliveryFee */
            $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
                'Delivery' => $Shipping->getDelivery(),
                'Pref' => $Shipping->getPref(),
            ]);

の処理の後に、

		// 都道府県送料 * 個数
		foreach ($Shipping->getOrderItems() as $item) {
		$DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity();
		}

を追加。

さらに・・・
141~142行目の

                ->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct)
                ->setQuantity(1)

の間に先ほどの関数

		->setPrice($DeliveryFeeTotal + $deliveryFeeProduct)

を追加すれば完成。

参考までに130~160行目まで修正後のものを抜粋。

                }
            }

            /** @var DeliveryFee $DeliveryFee */
            $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
                'Delivery' => $Shipping->getDelivery(),
                'Pref' => $Shipping->getPref(),
            ]);

// 都道府県送料 * 個数
foreach ($Shipping->getOrderItems() as $item) {
$DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity();
}

            $OrderItem = new OrderItem();
            $OrderItem->setProductName($DeliveryFeeType->getName())
                ->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct)
		->setPrice($DeliveryFeeTotal + $deliveryFeeProduct)
                ->setQuantity(1)
                ->setOrderItemType($DeliveryFeeType)
                ->setShipping($Shipping)
                ->setOrder($itemHolder)
                ->setTaxDisplayType($TaxInclude)
                ->setTaxType($Taxation)
                ->setProcessorName(DeliveryFeePreprocessor::class);

            $itemHolder->addItem($OrderItem);
            $Shipping->addOrderItem($OrderItem);
        }
    }
}

どなたかのご参考になればこれ幸せ。
(2021.01.27 修正)

透明部分の有るTiff画像をイラストレータ上に配置する方法


Q.透明部分の有るTiff画像をイラストレータ上に配置

Photoshop上で、モノクロ2階調の画像を作り、
TIFFで保存します。

それをIllustratorに配置すると、白い部分は勝手に透明になります。
残った黒い部分には、Illustrator上で色をつけることもできます。

ステップ1
Photoshopで画像を開く

step-1

ステップ2
イメージ>モード>グレースケールに一旦変換

step-2

ステップ3
その後、イメージ>モード>モノクロ2階調 に変換します。
(RGBから直接モノクロ2階調への変換はできません。)

ステップ3

ステップ4
上記作業が終了したら、別名で保存でTIFF形式を選んで保存すればOKです。

ステップ5
後は、イラレで配置すればOKです。

step-4

EC-CUBE(2.13系~)の商品数量毎に送料が掛かる設定


EC-CUBEでカートの中の商品数分の送料を実装する。
(商品1個が大きかったり重かったりして、商品1個毎に送料が掛かる場合を想定)
※例えば、A商品を3つ、B商品を2つ購入した場合には「配送業者別の送料×5」が掛かる時。

/data/class/SC_CartSession.php
を変更。

        if (OPTION_DELIV_FEE == 1
            && !SC_Utils_Ex::isBlank($deliv_pref)
            && !SC_Utils_Ex::isBlank($deliv_id)) {
            $results['deliv_fee'] += SC_Helper_Delivery_Ex::getDelivFee($deliv_pref, $deliv_id);
        }

上記の部分を・・・

        // 配送業者の送料を加算
        if (OPTION_DELIV_FEE == 1
            && !SC_Utils_Ex::isBlank($deliv_pref)
            && !SC_Utils_Ex::isBlank($deliv_id)) {
        	$cartItems = $this->getCartList($productTypeId);
        	foreach ($cartItems as $arrItem) {
            $results['deliv_fee'] += SC_Helper_Delivery_Ex::getDelivFee($deliv_pref, $deliv_id) * $arrItem['quantity'];
        }
	}

とする。
「 $cartItems 」~の部分で商品の数量を取得して、最期に 「 $arrItem[‘quantity’] 」を乗じることで配送業者毎の送料に数量分が掛け合わされて計算ができる。

さくらインターネットでのduplicatorプラグイン


さくらインターネットではWordpressのduplicatorプラグインを使って、
「Instaler」と「Archive」作成までは成功するのですが、そのファイルをダウンロードしようとすると、
Internal Server Errorが出る。

これを解決するには・・・

WordPressインストールディレクトリ内、「wp-snapshots」ディレクトリの中の「.htaccess」を削除(リネーム)すればOK。

カテゴリごと別々に《single.php》のデザインを変えたい場合


投稿した記事(単一の記事)毎に別のsingle.phpを適用したい!

っと言うわけで、例えば、

「wordpress」と「css」のカテゴリがあったとして、それらのカテゴリに属した記事を表示させる時に、各々別のデザインを適用させたい場合の話。

「single.php」は「page.php」みたいに「page-1.php」とかの名前をつけてテンプレートを増やしていくことができないので、「single.php」自体に条件分岐を設けて、その条件に応じて別のテンプレートを読み込むようにしてこの動作を実現させます。

まず、カテゴリ(x)の時に適用するテンプレート(single-1.phpとしましょう)と、カテゴリ(y)の時に適用するテンプレート(single-2.phpとしましょう)を準備します。

そして、single.php自体の内容を下記の通りにします。

<?php
$post = $wp_query->post;
if ( in_category('【カテゴリ(x)のカテゴリID】') ) {
include(TEMPLATEPATH.'/single-1.php');
} else {
include(TEMPLATEPATH.'/single-2.php');
}
?>

さらに複数のテンプレートを適用させたい場合は条件を増やしましょう。
(x,y,z………)

<?php
$post = $wp_query->post;
if ( in_category('【カテゴリID】') ) {
include(TEMPLATEPATH.'/single-1.php');
elseif ( in_category('【カテゴリID】') ) {
include(TEMPLATEPATH.'/single-2.php');
} elseif ( in_category('【カテゴリID】') ) {
include(TEMPLATEPATH.'/single-3.php');
} else {
include(TEMPLATEPATH.'/single-4.php');
}
?>