ページ雛形の作成で、2つ目を作成しようとするとエラーになる 投稿する

投稿者:りゅーと  投稿日時:2022-12-10 11:49:34
いつも開発、メンテナンスの継続、ありがとうございます。

稼働環境
PHP8.1.12
SOY CMS:version: 3.8.9

ページ雛形の新規作成をしていました。
このときのSOY CMSのバージョンは3.7.2です。

最初に、ブログページで作成したらエラーになりませんでした。

ところが、続けて標準ページで作成しようと思い、ページ雛形の新規作成 (1/5)で情報を入力し、
ページ雛形の種類で標準ページを選択して「次へ」をクリックしたところ、エラーになってしまいました。

バージョンが低いからかなと思い、バージョンアップして、SOY CMSのバージョンを3.8.9にしました。
これで、ページ雛形の新規作成で標準ページを作成したらエラーになりませんでした。

しかし、続けて標準ページで作成しようと思い、ページ雛形の新規作成 (1/5)で情報を入力し、
ページ雛形の種類で標準ページを選択して「次へ」をクリックしたところ、エラーになってしまいました。

エラー内容は下記になります。
Fatal error: Uncaught Error: Attempt to assign property "template" on null in 
/******/soycms/webapp/pages/Template/Create/_stage/StartStage.class.php:64 Stack trace: #0 
/******/soycms/webapp/pages/Template/Create/IndexPage.class.php(17): StartStage->checkNext() #1 
/******/common/lib/soy2_build.php(8139): IndexPage->doPost() #2 
/******/common/base/CMSWebPageBase.class.php(160): WebPage->prepare() #3 
/******/common/lib/soy2_build.php(8126): CMSWebPageBase->prepare() #4 
/******/soycms/webapp/pages/Template/Create/IndexPage.class.php(50): WebPage->__construct() #5 
/******/common/lib/soy2_build.php(5548): IndexPage->__construct(Array) #6 
/******/common/lib/soy2_build.php(269): SOY2HTMLFactory::createInstance('IndexPage', Array) #7 
/******/common/lib/soy2_build.php(236): SOY2PageController->execute() #8 
/******/soycms/index.php(8): SOY2PageController::run() #9 {main} thrown in 
/******/soycms/webapp/pages/Template/Create/_stage/StartStage.class.php on line 64

多忙だと思いますので、おてすきのときに対処していただけたらと思います。
よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2022-12-11 06:42:18
動作確認不十分の為、対処法のみお伝えします。

/CMSインストールディレクトリ/soycms/webapp/pages/Template/Create/IndexPage.class.php
の174目付近にあります

private function getWizardObject(){
	$wizObj = SOY2ActionSession::getUserSession()->getAttribute("Template.Create.WizardObject");
		
	if(is_null($wizObj)){
		$wizObj = new StdClass();
	}else{
		$wizObj = unserialize($wizObj);
	}

	return $wizObj;
}

private function getWizardObject(){
	$wizObj = SOY2ActionSession::getUserSession()->getAttribute("Template.Create.WizardObject");
	if(is_string($wizObj) && strlen($wizObj) < 3) $wizObj = null;	//変な文字列が入っている場合はnullにする
		
	if(is_null($wizObj)){
		$wizObj = new StdClass();
	}else{
		$wizObj = unserialize($wizObj);
	}

	return $wizObj;
}
に変更します。

これで問題なければコードを整形して公開します。
投稿者:りゅーと  投稿日時:2022-12-11 17:16:59
ありがとうごさいます。

早速コードを修正して検証したところ、問題なく動作確認できました。

お忙しい中、対応して頂きありがとうございました。
ログインして投稿する