非公開の商品ページのURLでエラー表示 投稿する

投稿者:Huckle Berry  投稿日時:2023-06-23 13:52:03
お世話になります。
soyshop 2.8.29 / soycms3.11.45 / PHP8.1.18
にバージョンアップしたところ、
非公開の状態の、商品ページのURLで下記エラーが発生しました。

Fatal error: Uncaught Error: Call to a member function getPageObject() on null in c/home/xxxxxxx/www/cms/soyshop/webapp/src/module/plugins/common_category_customfield/soyshop.site.beforeoutput.php:13 Stack trace: #0 /home/xxxxxxx/www/cms/soyshop/webapp/src/logic/plugin/extensions/soyshop.site.beforeoutput.php(30): CommonCategoryCustomfieldBeforeOutput->beforeOutput() #1 /home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(8685): SOYShopSiteBeforeOutputDelegateAction->run() #2 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php(40): SOY2Plugin::invoke() #3 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(99): output_page() #4 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(74): SOYShopSiteController->_onNotFound() #5 /home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(236): SOYShopSiteController->execute() #6 /home/xxxxxxx/www/shop/index.php(8): SOY2PageController::run() #7 /home/xxxxxxx/www/index.php(3): include_once('...') #8 {main} thrown in /home/xxxxxxx/www/cms/soyshop/webapp/src/module/plugins/common_category_customfield/soyshop.site.beforeoutput.php on line 13

もしよろしければ、対処方法など分かりましたら教えていただけますでしょうか。
投稿者:齋藤毅  投稿日時:2023-06-23 15:03:43
/home/xxxxxxx/www/cms/soyshop/webapp/src/module/plugins/common_category_customfield/soyshop.site.beforeoutput.php
上記ファイルの11行目付近の
function beforeOutput($page){

function beforeOutput($page){
if(!is_object($page)) return;
のように修正すればエラーは回避できるはずです。

エラーを回避できましたら、管理画面を開き、サイト管理>ページ設定で該当するページの編集画面を開き、画面右にクラスファイルの再生成のリンクが出力されていましたら実行してください。

なければ、クラスファイル調査プラグインで原因の調査を行ってください。
投稿者:Huckle Berry  投稿日時:2023-06-23 15:33:39
早速ありがとうございます。
ご指摘いただいたように修正しましたが、まだエラーが残っています。

/home/xxxxxxx/www/cms/soyshop/webapp/src/module/plugins/item_review/soyshop.site.beforeoutput.php:51
こちらは同じエラーでしたので、同じように修正いたしました。

その後
Fatal error: Uncaught Error: Call to a member function display() on null in /home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php:43 Stack trace: #0 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(99): output_page() #1 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(74): SOYShopSiteController->_onNotFound() #2 /home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(236): SOYShopSiteController->execute() #3 /home/xxxxxxx/www/shop/index.php(8): SOY2PageController::run() #4 /home/xxxxxxx/www/index.php(3): include_once('...') #5 {main} thrown in /home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php on line 43

です。

クラスファイル調査プラグインも実行してみましたが、こちらは未対応ファイルはありませんでした。
投稿者:齋藤毅  投稿日時:2023-06-23 15:43:55
商品詳細ページのクラスファイルのコードを確認してみてください。

確認方法はショップIDがshopで商品詳細ページのURIがitem/detailの場合、
/ドキュメントルート/shop/.page/item_detail.php
が商品詳細ページに該当するクラスファイルになります。

こちらのファイルを開き、記載されているコードをお伝えください。
投稿者:Huckle Berry  投稿日時:2023-06-23 15:52:27
商品詳細ページのURLは
item/detail
ですが、
/ドキュメントルート/shop/.page/

item_detail.phpはなく、
item_detail_page.phpでした。

その中身です。

<?php //generated by soyshop 2013-09-25 11:24:00

class item_detail_page extends SOYShop_DetailPageBase{

	function __construct($args = array()){

		$this->setPageObject($args["page"]);

		parent::__construct();

		/* write custom code here */
	}

	function main($args){
		/* write custom script here */



		/* --------------------- end */
	}
}
?>
投稿者:齋藤毅  投稿日時:2023-06-23 16:00:24
クラスファイルのコードをありがとうございます。
コードを確認しましたところコードの書き方に対応漏れはありませんでした。

該当する商品詳細ページのテンプレートの更新→ページの更新の順で操作をしてみては如何でしょうか?
投稿者:Huckle Berry  投稿日時:2023-06-23 16:03:55
ありがとうございます。
試してみます!
投稿者:Huckle Berry  投稿日時:2023-07-04 14:08:07
お世話になります。

テンプレート更新→ページ更新
は管理画面から更新ボタンを押すという認識でよろしかったでしょうか?

試してみましたが、エラー解消せずです。

Fatal error: Uncaught Error: Call to a member function display() on null in /home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php:43 Stack trace: #0 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(99): output_page() #1 /home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(74): SOYShopSiteController->_onNotFound() #2 /home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(236): SOYShopSiteController->execute() #3 /home/xxxxxxx/www/shop/index.php(8): SOY2PageController::run() #4 /home/xxxxxxx/www/index.php(3): include_once('...') #5 {main} thrown in /home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php on line 43

もしわかればお願いいたします。
投稿者:齋藤毅  投稿日時:2023-07-04 14:59:14
お伝えした内容で解決しなければ、何らかのプラグインでよろしくない処理が書かれているものがありそうです。
エラーメッセージのみでは原因を見つけるのは難しいです。
投稿者:Huckle Berry  投稿日時:2023-07-04 15:37:02
そうなんですね。わかりました。

/cms/soyshop/webapp/src/module/plugins

プラグインファイルはこちらにあるものであってますか?
一度削除し、アップし直してみます。
投稿者:齋藤毅  投稿日時:2023-07-04 18:31:30
/CMSインストールディレクトリ/soyshop/webapp/src/util/SOYShopPluginUtil.class.php
を開き、https://raw.githubusercontent.com/inunosinsi/soycms/master/cms/soyshop/webapp/src/util/SOYShopPluginUtil.class.php
に記載されているコードをそのまま貼り付けてください。

公開側のページのどこでも良いのでアクセスした後に、
/ドキュメントルート/ショップID/.cache/plugin/
を開き、上記ディレクトリにあるcommons.txtとothers.txtの内容を貼り付けてください。
投稿者:Huckle Berry  投稿日時:2023-07-07 10:25:49
common.txt
array (
	0 => 'breadcrumb',
	1 => 'category_customfield',
	2 => 'customfield',
	3 => 'new_item',
	4 => 'recently_checked_items',
	5 => 'recommend_item',
	6 => 'relative_item',
	7 => 'search',
	8 => 'simple_news',
	9 => 'this_is_new',
)

others.txt
array (
	0 => '0_saitodev',
	1 => 'custom_icon_field',
	2 => 'delivery_normal',
	3 => 'item_review',
	4 => 'order_invoice',
	5 => 'parts_calendar',
	6 => 'parts_google_analytics',
	7 => 'payment_daibiki',
	8 => 'payment_furikomi',
	9 => 'research_page_class_file',
)

です。

早速ありがとうございます。よろしくお願いします。
投稿者:齋藤毅  投稿日時:2023-07-09 05:10:57
使用中のプラグインの確認をありがとうございます。
ご連絡頂きましたプラグインで影響を与えそうな箇所をすべて調べましたが、怪しい箇所が見当たりませんでした。

下記の変更でエラーメッセージが変わるか確認をお願いします。

/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php
の37行目付近にあります
function output_page($webPage){

function output_page(WebPage $webPage){
に変更します。
投稿者:齋藤毅  投稿日時:2023-07-10 11:12:05
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.php
の74行目の
self::_onNotFound();

var_dump($webPage->getError());
self::_onNotFound();
にして出力された内容があればお伝えください。
投稿者:Huckle Berry  投稿日時:2023-07-10 11:43:04
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php
を修正したところ
Fatal error: Uncaught TypeError: output_page(): Argument #1 ($webPage) must be of type WebPage, null given, called in
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php on line 99 and defined in 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php:37 Stack trace: #0 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(99): output_page() #1 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(74): SOYShopSiteController->_onNotFound() #2 
/home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(236): SOYShopSiteController->execute() #3 
/home/xxxxxxx/www/shop/index.php(8): SOY2PageController::run() #4 
/home/xxxxxxx/www/index.php(3): include_once('...') #5 {main} thrown in
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php on line 37

のエラーでした。

/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.php
の変更は、
SOYShopSiteController.class.php
でよろしかったでしょうか・・・?
投稿者:齋藤毅  投稿日時:2023-07-10 11:56:53
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php
の方のご確認をありがとうございます。
最初につけていたアタリに誤りがあることがわかりました。

/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.php
の件ですが、
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php
が正しいです。

よろしくお願いします。
投稿者:Huckle Berry  投稿日時:2023-07-10 12:09:22
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php
修正しました。

object(Exception)#124 (7) { ["message":protected]=> string(57) "The specified product does not have publishing authority." ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(94)
"/home/xxxxxxx/www/cms/soyshop/webapp/src/base/site/pages/SOYShop_DetailPageBase.class.php" ["line":protected]=> int(30) 
["trace":"Exception":private]=> array(5) { [0]=> array(5) { ["file"]=> string(72) 
"/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php" ["line"]=> int(20) ["function"]=> string(5) "build" ["class"]=> 
string(22) "SOYShop_DetailPageBase" ["type"]=> string(2) "->" } [1]=> array(3) { ["file"]=> string(82) 
"/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php" ["line"]=> int(72) ["function"]=> string(28) 
"common_process_before_output" } [2]=> array(5) { ["file"]=> string(60) "/home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php" 
["line"]=> int(236) ["function"]=> string(7) "execute" ["class"]=> string(21) "SOYShopSiteController" ["type"]=> string(2) "->" } [3]=> array(5) 
{ ["file"]=> string(37) "/home/xxxxxxx/www/shop/index.php" ["line"]=> int(8) ["function"]=> string(3) "run" ["class"]=> string(18) 
"SOY2PageController" ["type"]=> string(2) "::" } [4]=> array(4) { ["file"]=> string(32) "/home/xxxxxxx/www/index.php" ["line"]=> int(3) 
["args"]=> array(1) { [0]=> string(37) "/home/xxxxxxx/www/shop/index.php" } ["function"]=> string(12) "include_once" } } 
["previous":"Exception":private]=> NULL }

Fatal error: Uncaught TypeError: output_page(): Argument #1 ($webPage) must be of type WebPage, null given, called in 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php on line 100 and defined in 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php:37 Stack trace: #0 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(100): output_page() #1 
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/SOYShopSiteController.class.php(75): SOYShopSiteController->_onNotFound() #2 
/home/xxxxxxx/www/cms/soyshop/webapp/lib/soy2_build.php(236): SOYShopSiteController->execute() #3 
/home/xxxxxxx/www/shop/index.php(8): SOY2PageController::run() #4 /home/xxxxxxx/www/index.php(3): include_once('...') #5 {main} thrown in
/home/xxxxxxx/www/cms/soyshop/webapp/src/base/controller/output.php on line 37

でした。。。。
投稿者:齋藤毅  投稿日時:2023-07-10 13:49:08
ありがとうございます。
The specified product does not have publishing authority.
ですが、商品が非公開 + 商品が削除されているという条件で発生するエラーになります。
投稿者:Huckle Berry  投稿日時:2023-07-10 14:41:48
商品は削除していないのですが・・・
その商品を公開にすれば、ページは表示されます。
ページを非公開にすれば、上記エラーが出るという状況です。

もう修正は難しいでしょうか?
投稿者:齋藤毅  投稿日時:2023-07-10 14:48:14
もしかしてですが、非公開の商品のページを表示する際に別のブラウザを立ち上げて確認しているということはありませんか?
非公開商品のプレビューは一つのブラウザのウィンドウで一つのタブでは管理画面にログインし、もう一つのタブでプレビューでなければなりません。
投稿者:Huckle Berry  投稿日時:2023-07-11 14:20:49
同じブラウザで確認しています!
プレビューは表示されます。

マイページの購入履歴にある商品ページへのリンクを確認したところ
発覚しました。
投稿者:齋藤毅  投稿日時:2023-07-11 14:45:59
マイページの購入履歴にある商品ページへのリンクを確認したところ発覚しました。
商品の登録状況がわかりませんので、今回のエラーの調査は難しいです。
エラーメッセージを確認する限りですが、404NotFoundページの出力に失敗しているみたいですので、エラー回避のために下記のページを参考にして404NotFoundページを作成してみてください。
https://saitodev.co/soycms/soyshop/tutorial/78
投稿者:Huckle Berry  投稿日時:2023-07-11 15:05:22
404NotFoundページを作成したら、エラー回避できました!
ありがとうございます。
ログインして投稿する