関連商品機能について 投稿する

投稿者:satocmt  投稿日時:2025-03-06 19:06:51
いつもお世話になっております。
現在最新のsoyshopバージョン(2.12.7)にバージョンアップしたところ、「関連商品機能プラグイン」で設定していた商品がリンク切れになっていまいました。

関連商品機能で生成されるURLが、違う詳細ページのパスになってしまっているようでした。
(すべての商品が、あるひとつの詳細ページ(A) のパスで出力されている状況です)

この機能周りで、最近修正になった点はあるでしょうか?
毎度お手数ですが、対応方法があればご教授いただけると幸いです。
投稿者:satocmt  投稿日時:2025-03-06 19:45:44
重ねて失礼いたします。その他の場所も問題がないか確認したところ、関連商品以外にも出力されるURLが変わってしまっていることが分かりました。

・カート内の商品名リンク soy:id="item_name"
・マイページの購入履歴にある商品リンク soy:id="item_link"
・おすすめ商品設定機能プラグイン

すべて、 /item/detail/ という標準のパスで出力されております。
何卒よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2025-03-07 06:03:17
関連商品機能プラグインですが、古いプラグインでして、商品毎に詳細ページを切り替える機能を設けた事がなく、もしバージョンアップによって詳細ページの切り分けがうまくいかなくなったのであれば、バージョンアップ前に奇跡的に動作していただけの可能性があります。

コードは確認してみますが、直近は納期が近い対応があるため、来週以降の確認になります。
投稿者:齋藤毅  投稿日時:2025-03-07 09:14:33
どこかのバージョンで、商品ごとに紐づいている商品詳細ページの設定を丁寧に調べる機能を追加しました。
商品詳細ページの紐づけを行っていない商品は、一番最初に作成された商品詳細ページに紐づけされるようになっています。
すべて、 /item/detail/ という標準のパスで出力されております
ですが、関連商品として出力している商品の商品詳細の紐づけが何も設定されていない可能性があります。
投稿者:satocmt  投稿日時:2025-03-07 10:27:26
ご回答ありがとうございます。
商品の登録画面で、それぞれ商品詳細ページの紐付けを設定してあります。
紐付けした詳細ページに関わらず、すべて一番最初に作成された商品詳細ページのパスを出力してしまう状況です。

・カート内の商品名リンク soy:id="item_name"
・マイページの購入履歴にある商品リンク soy:id="item_link" 

この部分も同じ症状なので、関連商品機能プラグイン単体ではなく、商品詳細ページのリンクを出力するどこかのファイルに問題が起きてしまったと考えています。

お忙しいなか大変申し訳ありません。
投稿者:齋藤毅  投稿日時:2025-03-07 10:39:56
紐付けした詳細ページに関わらず、すべて一番最初に作成された商品詳細ページのパスを出力してしまう状況です。
であれば、site.url_mappingという機能が正しく動作していない可能性があります。

管理画面で何処のページでも良いので、設定画面を開き、何の値も編集せずに更新ボタンを押すと、site.url_mappingが更新されます。
投稿者:satocmt  投稿日時:2025-03-07 11:10:22
管理画面で何処のページでも良いので、設定画面を開き、何の値も編集せずに更新ボタンを押すと、site.url_mappingが更新されます。
試してみましたが、変わらないようです。申し訳ありません・・・他に考えられる方法はあるでしょうか?
投稿者:齋藤毅  投稿日時:2025-03-07 16:41:16
他に考えられる事はありません。
詳細ページへのリンクはすべて一つの関数に集約されていて、その関数内でsite.url_mappingの値を使用しています。
https://github.com/inunosinsi/soycms/blob/master/cms/soyshop/webapp/src/base/func/common.php#L191

すべて、 /item/detail/ という標準のパスで出力されております
もし、/item/detail/のページを使用していないのであれば、このページを削除すればリンクの出力が変わるかもしれません。
投稿者:齋藤毅  投稿日時:2025-03-07 18:59:54
コードを確認してみましたところ、site.url_mappingの機能が怪しいので、コードを丁寧に書き直してみます。
投稿者:satocmt  投稿日時:2025-03-07 19:47:58
コードの確認、誠にありがとうございます。

もし、/item/detail/のページを使用していないのであれば、このページを削除すればリンクの出力が変わるかもしれません。
このページは使用していなかったのですが、子商品で登録している商品のほとんどが、/item/detail/の商品詳細ページに紐付けされてしまいました。
現在手作業で紐づけを直しておりますので、終わったらページ削除を試してみようと思います。
投稿者:齋藤毅  投稿日時:2025-03-08 09:17:48
今回の件に関する不具合を発見しました。
改修したものをダウンロードできるようにしました。
https://saitodev.co/soycms/soyshop/

余計な操作を行って頂くことになり、申し訳ございません。
投稿者:satocmt  投稿日時:2025-03-08 14:47:46
お忙しいなか、早速ありがとうございます。
関連商品機能プラグインについては、無事に正しいパスが出力されました!誠にありがとうございます!

・カート内の商品名リンク soy:id="item_name"
・マイページの購入履歴にある商品リンク soy:id="item_link"
・おすすめ商品設定機能プラグイン 
ただ、こちらの3か所については、当方の環境だと改善されていないようです・・・

管理画面で何処のページでも良いので、設定画面を開き、何の値も編集せずに更新ボタンを押すと、site.url_mappingが更新されます。
この操作も試してみましたが、変化ないようです。
度々申し訳ございませんが、何卒よろしくお願いします。
投稿者:satocmt  投稿日時:2025-03-08 16:29:38
何度も本当に申し訳ありません。
商品詳細ページを開くと、下記のようなエラーメッセージが出てしまいました。

Fatal error: Uncaught TypeError: Argument 1 passed to soyshop_get_page_object() must be of the type int, string given, called in /main/soyshop/webapp/pages/Item/DetailPage.class.php on line 362 and defined in /main/soyshop/webapp/src/base/func/dao.php:648 Stack trace:	#0 /main/soyshop/webapp/pages/Item/DetailPage.class.php(362): soyshop_get_page_object('') #1 /main/soyshop/webapp/pages/Item/DetailPage.class.php(235): DetailPage->_buildForm(4700) #2 /main/soyshop/webapp/lib/soy2_build.min.php(4004): DetailPage->__construct(Array) #3 /main/soyshop/webapp/src/base/SOYShopPageController.class.php(102): SOY2HTMLFactory::createInstance('DetailPage', Array) #4 /main/soyshop/webapp/lib/soy2_build.min.php(235): SOYShopPageController->execute() #5 main/public_ in /main/soyshop/webapp/src/base/func/dao.php on line 648


array (
	'type' => 1,
	'message' => 'Uncaught TypeError: Argument 1 passed to soyshop_get_page_object() must be of the type int, string given, called in /main/soyshop/webapp/pages/Item/DetailPage.class.php on line 362 and defined in /main/soyshop/webapp/src/base/func/dao.php:648
Stack trace:
#0 /main/soyshop/webapp/pages/Item/DetailPage.class.php(362): soyshop_get_page_object(\'\')
#1 /main/soyshop/webapp/pages/Item/DetailPage.class.php(235): DetailPage->_buildForm(6605)
#2 /main/soyshop/webapp/lib/soy2_build.min.php(4004): DetailPage->__construct(Array)
#3 /main/soyshop/webapp/src/base/SOYShopPageController.class.php(102): SOY2HTMLFactory::createInstance(\'DetailPage\', Array)
#4 /main/soyshop/webapp/lib/soy2_build.min.php(235): SOYShopPageController->execute()
#5 /main_',
	'file' => '/main/soyshop/webapp/src/base/func/dao.php',
	'line' => 648,
)
投稿者:齋藤毅  投稿日時:2025-03-08 19:27:20
エラーメッセージをありがとうございます。
取り急ぎ、
カート内の商品名リンク soy:id="item_name"

Fatal error: Uncaught TypeError: Argument 1 passed to soyshop_get_page_object() must be of the type int, string given, called in /main/soyshop/webapp/pages/Item/DetailPage.class.php on line 362 〜
の件を修正しました。

もしかしたら、他の箇所も直っているかもしれませんが、確認はできていません。

修正版は下記ページからダウンロードできます。
https://saitodev.co/soycms/soyshop/
投稿者:satocmt  投稿日時:2025-03-10 09:39:33
修正をありがとうございます。
カート内と、マイページの商品リンクも今回のバージョンアップで直っておりました。

商品詳細ページを開くと、また別のFatalエラーが出てしまいました。

Fatal error: Uncaught TypeError: Argument 1 passed to soyshop_get_page_object() must be of the type int, string given, called in /main/soyshop/webapp/pages/Item/SubMenu/DetailMenuPage.class.php on line 19 and defined in /main/soyshop/webapp/src/base/func/dao.php:648 Stack trace: #0 /main/soyshop/webapp/pages/Item/SubMenu/DetailMenuPage.class.php(19): soyshop_get_page_object('') #1 /main/webapp/lib/soy2_build.min.php(4004): DetailMenuPage->__construct(Array) #2 /main/soyshop/webapp/pages/Item/DetailPage.class.php(649): SOY2HTMLFactory::createInstance('DetailMenuPage', Array) #3 /main/soyshop/webapp/src/base/SOYShopPageController.class.php(118): DetailPage->getSubMenu() #4 /main/soyshop/webapp/lib/soy2_build.min.php(235): SOYShopPageController->execute() #5 /main in /main/soyshop/webapp/src/base/func/dao.php on line 648


array (
	'type' => 1,
	'message' => 'Uncaught TypeError: Argument 1 passed to soyshop_get_page_object() must be of the type int, string given, called in /main/soyshop/webapp/pages/Item/SubMenu/DetailMenuPage.class.php on line 19 and defined in /main/soyshop/webapp/src/base/func/dao.php:648
Stack trace:
#0 /main/soyshop/webapp/pages/Item/SubMenu/DetailMenuPage.class.php(19): soyshop_get_page_object(\'\')
#1 /main/soyshop/webapp/lib/soy2_build.min.php(4004): DetailMenuPage->__construct(Array)
#2 /main/soyshop/webapp/pages/Item/DetailPage.class.php(649): SOY2HTMLFactory::createInstance(\'DetailMenuPage\', Array)
#3 /main/soyshop/webapp/src/base/SOYShopPageController.class.php(118): DetailPage->getSubMenu()
#4 /main/soyshop/webapp/lib/soy2_build.min.php(235): SOYShopPageController->execute()
#5 /main/',
	'file' => '/main/soyshop/webapp/src/base/func/dao.php',
	'line' => 648,
)

お忙しいなか、何度も本当に申し訳ありません。
投稿者:齋藤毅  投稿日時:2025-03-10 09:59:17
/main/soyshop/webapp/pages/Item/SubMenu/DetailMenuPage.class
の19行目の
$page = soyshop_get_page_object($item->getDetailPageId());

$page = soyshop_get_page_object((int)$item->getDetailPageId());
に変更してみてください。
投稿者:satocmt  投稿日時:2025-03-10 10:35:30
早々にありがとうございます。エラーメッセージが消え、今回のご相談内容は解決できました!

一点、商品詳細ページ画面にある「確認ページ」「非公開商品のプレビュー」が押せなくなってしまいました。

$page = soyshop_get_page_object((int)$item->getDetailPageId());
↑の変更に原因があるでしょうか?
投稿者:齋藤毅  投稿日時:2025-03-10 10:54:15
$page = soyshop_get_page_object((int)$item->getDetailPageId());
ですが、商品の設定で、商品詳細ページが紐付いていない時にエラーになってしまうのですが、無理やりエラーにならないように回避する策になります。

商品詳細ページに紐付いていないので、確認ページや非公開商品のプレビューはどのページを開いて良いのか?判断できずリンクが出力されない状態になります。
投稿者:satocmt  投稿日時:2025-03-10 11:06:13
ご回答ありがとうございます。

よく見ると、商品詳細ページの「商品URL」の部分も表示されなくなっておりました。
これも同じ理由なのかと思いますが、URLの設定ができなくなると困ってしまうので、何か方法はないでしょうか・・・?
投稿者:齋藤毅  投稿日時:2025-03-10 11:11:50
修正内容に漏れがあり、管理画面の方の機能がいくつか潰れていました。
修正して、下記のURLからダウンロードできるようにしました。
https://saitodev.co/soycms/soyshop/
投稿者:satocmt  投稿日時:2025-03-11 10:24:30
ありがとうございます。
ver2.12.13にアップデートしたところ、すべて解消されました。迅速なご対応、非常に助かりました。
長々とお付き合い頂き、本当にありがとうございます!!
ログインして投稿する