配送モジュールの複製がうまくできない。

SOY Shopに関する話題はこちら。

配送モジュールの複製がうまくできない。

投稿記事by kondosan on 2019年6月06日(木) 18:26

いつもお世話になっております。

この度、「配送モジュールの複製」を行っていたのですが、どうもうまくいかないため、こちらに問い合わせさせていただきました。
以下3つのページを参考に、標準配送モジュールを複製しようとしているのですが、うまく機能いたしません。


●https://saitodev.co/article/SOY_Shopのプラグインやモジュールの複製方法
●https://www.soycms.net/blog/article/SOY_Shopプラグインを複製する
●https://www.soycms.net/blog/article/SOY_Shopプラグインを複製する2


ページ内のご指示通りの全てのファイル名やPHPファイル内の名称を変更し、管理画面内では複製できインストールもできたのですが、インストール後にカートを確かめてみたところ、カート内の3ページ目にて以下エラーが発生いたしました。

Cannot redeclare class DeliveryDateFormatLogic in --------------/soyshop/webapp/src/module/plugins/delivery_post/logic/DeliveryDateFormatLogic.class.php on line 0

そのため、DeliveryDateFormatLogic.class.phpのファイル名をDeliveryDateFormatLogic2.class.phpに変更し、その他PHPファイル内にあるDeliveryDateFormatLogicの部分もDeliveryDateFormatLogic2に変更したところ、カート内3ページ目では問題なくプラグインが読み込まれ、配送方法の選択肢も増えていたのですが、管理画面内で追加した配送方法の配送料金等詳細を変更しますと、元々の標準配送モジュールの内容も同時に変更されてしまいます。(同じように標準配送モジュールの内容を変更しますと、複製した方のプラグインの内容も変更されてしまいます)

私の複製のやり方に何か問題があるのか、それとも配送モジュールの複製にはさらに特殊な点があるのか、分からず、問い合わせさせていただいた次第です。

対処方法や私のやり方に誤っている点があるなど、ご教授いただけたら幸いです。
どうぞよろしくお願いいたします。
kondosan
 
記事: 4
登録日時: 2019年6月06日(木) 18:16

Re: 配送モジュールの複製がうまくできない。

投稿記事by inunosinsi on 2019年6月07日(金) 04:31

複製元のdelivery_normalですが、コードを確認しましたところ、私が記事を投稿した時よりも大幅に改修されていて、複製が難しくなっていました。

コード: 全て選択
Cannot redeclare class DeliveryDateFormatLogic in --------------/soyshop/webapp/src/module/plugins/delivery_post/logic/DeliveryDateFormatLogic.class.php on line 0

上記のエラーを回避する策ですが、
モジュールの複製の際に複製前のdelivery_normalのコードを使いまわすというのが手です。

使いまわす為の記述は下記のコードを見かけても修正しないという手です。
コード: 全て選択
SOY2Logic::createInstance("module.plugins.delivery_normal.logic.DeliveryDateFormatLogic")->getDateFormat()

コード: 全て選択
$logic = SOY2Logic::createInstance("module.plugins.delivery_normal.logic.DeliveryDateFormatLogic")


他にも使いまわせるものがありますが、
取り急ぎ上記の内容を試してみて下さい。
大阪でフリーのプログラマをしています。
以前はSOY CMSの開発元で働いていました。

SOY ShopのプラグインやSOY Appの開発のサポートをしています。
http://saitodev.co/soycms(SOY CMSのマニュアルを作成しています)

最近はSOY Shopを業務アプリとして使用できないか?と模索しています。
SOY Shopで管理画面のみ使用モードを追加しました - saitodev.co

株式会社京都農販(SOY Shopのサイト)
株式会社コトブキ園(SOY Shop)
inunosinsi
 
記事: 766
登録日時: 2008年6月12日(木) 20:48

Re: 配送モジュールの複製がうまくできない。

投稿記事by kondosan on 2019年6月07日(金) 14:43

早速のご返信ありがとうございます。
ご指示いただいた方法を試してみました。
(変更してしまっていたDeliveryDateFormatLogic.class2.phpのファイル名をDeliveryDateFormatLogic.class.phpへと元に戻してから作業しました)

コード: 全て選択
$logic = SOY2Logic::createInstance("module.plugins.delivery_normal.logic.DeliveryDateFormatLogic"


以上の記述のある、具体的には

●Delivery******CartPage.class.php
●Delivery******Util.class.php
●soyshop.site.user.onoutput.php

以上の3つのファイルの中の上記の記述をdelivery_normalに戻しました。

カートページ3ページ目ではエラーが発生することなく、ページも表示され配送方法も増えてはいるのですが、
やはり管理画面にて追加した配送モジュールの詳細を変更すると、元の標準配送モジュール側の詳細も同時に変わってしまうようです。
(タイトルや料金を変更すると、標準配送モジュールも複製したモジュールも同時に変わってしまいます。)

何か対処方法などございましたら、ご教授いただけたら幸いです。
どうぞよろしくお願いいたします。
kondosan
 
記事: 4
登録日時: 2019年6月06日(木) 18:16

Re: 配送モジュールの複製がうまくできない。

投稿記事by inunosinsi on 2019年6月08日(土) 05:08

コードの解説ですが、
モジュールの設定内容は/CMSインストールディレクトリ/soyshop/webapp/src/module/plugins/delivery_normal/util/DeliveryNormalUtil.class.phpの
コード: 全て選択
return SOYShop_DataSets::get("delivery.default.free_price", array(
   "free" => null
));

のSOYShop_DataSets::get({key}, {指定のkeyで値が無かった場合の初期値});になります。

設定を保存するのは、
コード: 全て選択
SOYShop_DataSets::put("delivery.default.free_price", $values);

のSOYShop_DataSets::put({key}, {保存したい値});になります。

モジュールの複製をしたい場合は、SOYShop_DataSetsのgetとputのkeyの指定は必ず他の値に変更しなければならず、
Delivery******Util.class.php

Utilクラスのファイルは必ずリネームして複製する必要があります。

見落としがなければ、データの取扱はすべてUtilクラスで行っていたはずですので、今回の問題は解決するはずです。
大阪でフリーのプログラマをしています。
以前はSOY CMSの開発元で働いていました。

SOY ShopのプラグインやSOY Appの開発のサポートをしています。
http://saitodev.co/soycms(SOY CMSのマニュアルを作成しています)

最近はSOY Shopを業務アプリとして使用できないか?と模索しています。
SOY Shopで管理画面のみ使用モードを追加しました - saitodev.co

株式会社京都農販(SOY Shopのサイト)
株式会社コトブキ園(SOY Shop)
inunosinsi
 
記事: 766
登録日時: 2008年6月12日(木) 20:48

Re: 配送モジュールの複製がうまくできない。

投稿記事by kondosan on 2019年6月10日(月) 14:29

お忙しいところ、ご返信・解説ありがとうございます。
当方PHPに関する知識に乏しいため、もしかしますとうまく理解ができていないのかもしれませんが、
Delivery******Util.class.phpのファイル名称の変更と、他PHPファイル内での変更したUtil.class.phpのファイル名が一致していれば、問題なく機能するという認識でよろしいでしょうか?

何度も確認しましたが、先日ご指示いただいた
コード: 全て選択
$logic = SOY2Logic::createInstance("module.plugins.delivery_normal.logic.DeliveryDateFormatLogic"

の部分以外は全て問題なくファイル名変更・一致しておりましたが、やはり設定画面上で配送料金などの内容変更しますと、標準配送モジュールと複製した配送モジュール同時に変更されてしまいます。
どこか作業途中におかしなことをしてしまったのかと、一度全てのファイルを消去し、delivery_normalのファイルコピーの段階からやり直し、とやってみましたが、やはり同じでした。

●https://saitodev.co/article/SOY_Shopのプラグインやモジュールの複製方法
●https://www.soycms.net/blog/article/SOY_Shopプラグインを複製する
●https://www.soycms.net/blog/article/SOY_Shopプラグインを複製する2

こちらのページを参考にファイル名称の変更、ファイル内のdelivery_normalのnormal部分の名称を変更(DeliveryNormalの場合は、同じように1文字目だけ大文字の同じ名称にしております。例 → delivery_yamato と DeliveryYamato)をしております。

カート内でも配送方法が追加され、管理画面内でもプラグインが追加され、反映されております。

/delivery_******/features/module.ini の変更内容も、問題なく反映され、
/delivery_******/plugins/cart/DeliveryPostCartPage.html でのカート内のレイアウト変更も反映されております。

しかし、管理画面内での詳細設定のみ、どうしても2つのモジュールが同時に変更されてしまう状態にあります。
標準配送モジュールをアンインストールしたり、と試してみましたが、やはり変わりませんでした。

お伝えするのが遅れてしまいましたが、バージョンは SOY CMS 3.0.2p119 / Soy Shop 1.18.2p134 です。
当方の知識不足なのか、他の問題なのかわかりかねますが、もしアドバイス・ご教授いただけることがございましたら、ご返信いただけたら幸いです。
よろしくお願いいたします。
kondosan
 
記事: 4
登録日時: 2019年6月06日(木) 18:16

Re: 配送モジュールの複製がうまくできない。

投稿記事by inunosinsi on 2019年6月11日(火) 05:29

コード: 全て選択
当方PHPに関する知識に乏しいため、もしかしますとうまく理解ができていないのかもしれませんが、
Delivery******Util.class.phpのファイル名称の変更と、他PHPファイル内での変更したUtil.class.phpのファイル名が一致していれば、問題なく機能するという認識でよろしいでしょうか?


Delivery*******Util.class.phpは設定内の保存と取り出しに関する機能を提供するものですので、複製前のモジュールと複製後のモジュールの設定が同じになる問題が回避できるのみです。

Utilクラスファイルの複製の際に

コード: 全て選択
return SOYShop_DataSets::get("delivery.default.free_price", array(
   "free" => null
));

のkeyに当たるdelivery.dedault.free_priceに当たる個所をdelivery.yamato.free_priceのように書き換えることで、モジュール毎に別の設定を持つことができるようになります。

コード: 全て選択
SOYShop_DataSets::put("delivery.default.free_price", $values);

こちらも同様にkeyに当たるdelivery.dedault.free_priceをdelivery.yamato.free_priceに書き換える必要があります。
大阪でフリーのプログラマをしています。
以前はSOY CMSの開発元で働いていました。

SOY ShopのプラグインやSOY Appの開発のサポートをしています。
http://saitodev.co/soycms(SOY CMSのマニュアルを作成しています)

最近はSOY Shopを業務アプリとして使用できないか?と模索しています。
SOY Shopで管理画面のみ使用モードを追加しました - saitodev.co

株式会社京都農販(SOY Shopのサイト)
株式会社コトブキ園(SOY Shop)
inunosinsi
 
記事: 766
登録日時: 2008年6月12日(木) 20:48

Re: 配送モジュールの複製がうまくできない。

投稿記事by kondosan on 2019年6月11日(火) 11:15

お忙しいところ、いつも早急にご返信いただき、本当にありがとうございます。
早速ですが、ご指示通りDelivery*******Util.class.php内のgetと、putのkeyの書き換え(delivery.*******.free_priceなど)を行いました。

無事に管理画面内での詳細設定の変更が反映されるようになりました!

私のように知識の乏しい人間にも分かりやすくご教授いただき、本当に助かりました。
長々とご教授・アドバイスいただき、本当にありがとうございました。
kondosan
 
記事: 4
登録日時: 2019年6月06日(木) 18:16


Return to SOY Shop

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[4人]

cron