質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • PHP

    21273questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • EC-CUBE

    297questions

    EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

  • Symfony2

    120questions

    Symphony2は、簡単で速く堅牢なプログラムの開発サイクルに焦点を当てた、オープンソースのPHPウェブアプリケーション開発フレームワークです。PHP version 5.3.3以上を対象としています。

  • Twig

    77questions

    Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

ECCUBE3のプラグイン修正

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 665

ateshi

score 2

前提・実現したいこと

冷蔵便・冷凍便拡張プラグインDeliveryCoolにて
冷蔵便・冷凍便の商品に対して、購入ページにて
その冷蔵便・冷凍便がいくらなのか表示したい

当方phpは簡単な通販サイト構築程度の知識はありますが
silex,symphonyは理解しておりません。
ECCUBE3.0.13で上記に記載ある有料のプラグインをカスタマイズしようとしております。
プラグイン中のphpで冷凍便か冷蔵便の判断をし、フラグを付けたはいいものの、本体のtwigでその変数を判断するためにはどうすればいいのかわかりません。

該当のソースコード

    public function createTwig(TemplateEvent $event)
    {
        $app = $this->app;

        print "kook";



        $parameters = $event->getParameters();
        $Order = $parameters['Order'];
        $BaseInfo = $app['eccube.repository.base_info']->get();

        $shippingDeliveryFeeTotal = 0;
        $productDeliveryFeeTotal = 0;
        $maxShippingFee = 0;
        $maxRegularFee = 0;
        $Shippings = $Order->getShippings();

        foreach ($Shippings as $Shipping) {
            $checkDelivType = $app['eccube.deliverycool.service.util']->getShippingTypes($Shipping);

            foreach ($checkDelivType as $shippingType => $coolShipmentItems) {
                $shippingType = $app['eccube.deliverycool.service.util']->convertShippingType($shippingType);

                $deliveryFee = $Shipping->getDeliveryFee();
                $fee = 0;

                if($deliveryFee){
                    $fee = $deliveryFee->getFee();
                }

                $addFee = 0;


                if($shippingType == 1){
                    $coolFee = $app['eccube.deliverycool.repository.delivery_cool_fee']->findOneBy(array('Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref()));
                    if($coolFee){
                        $addFee = $coolFee->getCoolFee();
                    }
                    //冷凍便 $shippingType == 2
                }elseif($shippingType == 2){

                    $coldFee = $app['eccube.deliverycool.repository.delivery_cold_fee']->findOneBy(array('Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref()));
                    if($coldFee){
                        $addFee = $coldFee->getColdFee();

                    }
                }
                if ($maxShippingFee < ($fee + $addFee))
                    $maxShippingFee = ($fee + $addFee);
                if ($maxRegularFee < $fee)
                    $maxRegularFee = $fee;
                $Shipping->setShippingDeliveryFee($fee + $addFee);
                $shippingDeliveryFeeTotal += ($fee + $addFee);

                $shipping_cold = 0;



                //echo $shipping_cold ;

                if (!is_null($BaseInfo->getOptionProductDeliveryFee()) && $BaseInfo->getOptionProductDeliveryFee() == Constant::ENABLED) {
                    foreach($coolShipmentItems as $coolShipmentItem){
                        $productDeliveryFeeTotal = $coolShipmentItem->getProductClass()->getDeliveryFee() * $coolShipmentItem->getQuantity();
                    }
                }
            }
        }

        $isFree = false;
        $deliveryFreeAmount = $BaseInfo->getDeliveryFreeAmount();
        if (!is_null($deliveryFreeAmount)) {
            if ($Order->getSubTotal() >= $deliveryFreeAmount) {
                $isFree = true;
            }
        }
        $deliveryFreeQuantity = $BaseInfo->getDeliveryFreeQuantity();
        if (!is_null($deliveryFreeQuantity)) {
            if ($app['eccube.service.order']->getTotalQuantity($Order) >= $deliveryFreeQuantity) {
                $isFree = true;
            }
        }

        if(!$isFree && $app['eccube.deliverycool.service.util']->checkInstallPlugin('CustomerRank','1.2.2')){
            $isFree = $app['eccube.customerrank.service.util']->checkDeliveryFree($Order);
        }
        if(!$isFree && $app['eccube.deliverycool.service.util']->checkInstallPlugin('DeliveryFreeProduct','1.0.2')){
            $isFree = $app['eccube.deliveryfreeproduct.service.util']->checkDeliveryFree($Order);
        }

        if($isFree){
            $method = $app['eccube.deliverycool.service.util']->getConfig('method');
            if($method == 1){
                $shippingDeliveryFeeTotal -= $maxShippingFee;
            }elseif($method == 2){
                $shippingDeliveryFeeTotal -= $maxRegularFee;
            }else{
                $shippingDeliveryFeeTotal = 0;
                $productDeliveryFeeTotal = 0;
            }
        }

        $deliveryFeeTotal = $productDeliveryFeeTotal + $shippingDeliveryFeeTotal;

        $Order->setDeliveryFeeTotal($deliveryFeeTotal);

        $total = $Order->getSubTotal() + $Order->getCharge() + $Order->getDeliveryFeeTotal();

        $Order->setTotal($total);
        $Order->setPaymentTotal($total);
        $Order->setSippingType($shipping_cold);

        $parameters['Order'] = $Order;
        $event->setParameters($parameters);

        $plgBaseinfo = $app['eccube.deliverycool.repository.base_info']->get();
        if($plgBaseinfo->getValue() == Constant::DISABLED){
            $source = $event->getSource();
            if(preg_match('/\{%\sif\sBaseInfo\.optionMultipleShipping\s%\}/',$source, $result)){
                $search = $result[0];
                $replace = '{% if BaseInfo.optionMultipleShipping != '. Constant::ENABLED .'%}';
                $source = str_replace($search, $replace, $source);
            }
            $event->setSource($source);
        }
    }


この中の$shippingTypeをtwigに渡したい。
twigはeccube本体のshoppingのindex.twigです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • xenbeat

    2017/03/27 00:38

    プラグインのプログラム、そしてそのどこの画面(twig)でどのようなアクション(controller)をした時に、そのように表示させたいのかわからないので回答が難しいです。該当するプログラムをコード形式で記載してください

    キャンセル

  • ateshi

    2017/03/27 11:18

    ご回答ありがとうございます。 他に必要なことあればまた返信下さいませ。 プラグインのソース public function createTwig(TemplateEvent $event) { $app = $this->app; print "kook"; $parameters = $event->getParameters(); $Order = $parameters['Order']; $BaseInfo = $app['eccube.repository.base_info']->get(); $shippingDeliveryFeeTotal = 0; $productDeliveryFeeTotal = 0; $maxShippingFee = 0; $maxRegularFee = 0; $Shippings = $Order->getShippings(); foreach ($Shippings as $Shipping) { $checkDelivType = $app['eccube.deliverycool.service.util']->getShippingTypes($Shipping); foreach ($checkDelivType as $shippingType => $coolShipmentItems) { $shippingType = $app['eccube.deliverycool.service.util']->convertShippingType($shippingType); $deliveryFee = $Shipping->getDeliveryFee(); $fee = 0; if($deliveryFee){ $fee = $deliveryFee->getFee(); } $addFee = 0; if($shippingType == 1){ $coolFee = $app['eccube.deliverycool.repository.delivery_cool_fee']->findOneBy(array('Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref())); if($coolFee){ $addFee = $coolFee->getCoolFee(); } //冷凍便 $shippingType == 2 }elseif($shippingType == 2){ $coldFee = $app['eccube.deliverycool.repository.delivery_cold_fee']->findOneBy(array('Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref())); if($coldFee){ $addFee = $coldFee->getColdFee(); } } if ($maxShippingFee < ($fee + $addFee)) $maxShippingFee = ($fee + $addFee); if ($maxRegularFee < $fee) $maxRegularFee = $fee; $Shipping->setShippingDeliveryFee($fee + $addFee); $shippingDeliveryFeeTotal += ($fee + $addFee); $shipping_cold = 0; //echo $shipping_cold ; if (!is_null($BaseInfo->getOptionProductDeliveryFee()) && $BaseInfo->getOptionProductDeliveryFee() == Constant::ENABLED) { foreach($coolShipmentItems as $coolShipmentItem){ $productDeliveryFeeTotal = $coolShipmentItem->getProductClass()->getDeliveryFee() * $coolShipmentItem->getQuantity(); } } } } $isFree = false; $deliveryFreeAmount = $BaseInfo->getDeliveryFreeAmount(); if (!is_null($deliveryFreeAmount)) { if ($Order->getSubTotal() >= $deliveryFreeAmount) { $isFree = true; } } $deliveryFreeQuantity = $BaseInfo->getDeliveryFreeQuantity(); if (!is_null($deliveryFreeQuantity)) { if ($app['eccube.service.order']->getTotalQuantity($Order) >= $deliveryFreeQuantity) { $isFree = true; } } if(!$isFree && $app['eccube.deliverycool.service.util']->checkInstallPlugin('CustomerRank','1.2.2')){ $isFree = $app['eccube.customerrank.service.util']->checkDeliveryFree($Order); } if(!$isFree && $app['eccube.deliverycool.service.util']->checkInstallPlugin('DeliveryFreeProduct','1.0.2')){ $isFree = $app['eccube.deliveryfreeproduct.service.util']->checkDeliveryFree($Order); } if($isFree){ $method = $app['eccube.deliverycool.service.util']->getConfig('method'); if($method == 1){ $shippingDeliveryFeeTotal -= $maxShippingFee; }elseif($method == 2){ $shippingDeliveryFeeTotal -= $maxRegularFee; }else{ $shippingDeliveryFeeTotal = 0; $productDeliveryFeeTotal = 0; } } $deliveryFeeTotal = $productDeliveryFeeTotal + $shippingDeliveryFeeTotal; $Order->setDeliveryFeeTotal($deliveryFeeTotal); $total = $Order->getSubTotal() + $Order->getCharge() + $Order->getDeliveryFeeTotal(); $Order->setTotal($total); $Order->setPaymentTotal($total); $parameters['Order'] = $Order; $event->setParameters($parameters); $plgBaseinfo = $app['eccube.deliverycool.repository.base_info']->get(); if($plgBaseinfo->getValue() == Constant::DISABLED){ $source = $event->getSource(); if(preg_match('/\{%\sif\sBaseInfo\.optionMultipleShipping\s%\}/',$source, $result)){ $search = $result[0]; $replace = '{% if BaseInfo.optionMultipleShipping != '. Constant::ENABLED .'%}'; $source = str_replace($search, $replace, $source); } $event->setSource($source); } } この中の$shippingTypeをtwigに渡したい。 twigはeccube本体のshoppingのindex.twigです。

    キャンセル

  • CHERRY

    2017/03/27 11:30

    追記欄やコメント欄は、インデントや改行が消えるので、コードは質問を編集して、コードブロックで囲んで追記してください。コードブロックの作成方法は、コードを選択して「<code>」ボタンを押すか コードの前後を「```」(バッククオート3個)だけの行で囲んで改行をいれてください。

    キャンセル

  • ateshi

    2017/03/27 12:18

    すいません記述しなおしました。

    キャンセル

回答 2

check解決した方法

0

他のphpファイルを見ていたら解決いたしました。

$parameters['shipping_cold'] = $shipping_cold;    

これでtwigに値を渡せました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

MVCフレームワークであれば、フラグの値をビュー(この場合はtwig?)に渡してあげる必要があると思うのですが
(配列等に含まれるなら取り方の問題かもしれません)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/27 11:20

    ご回答ありがとうございます。
    その渡し方がよく理解していなくて…。

    キャンセル

同じタグがついた質問を見る

  • PHP

    21273questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • EC-CUBE

    297questions

    EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

  • Symfony2

    120questions

    Symphony2は、簡単で速く堅牢なプログラムの開発サイクルに焦点を当てた、オープンソースのPHPウェブアプリケーション開発フレームワークです。PHP version 5.3.3以上を対象としています。

  • Twig

    77questions

    Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。