plugin/soycms_same_category_block_Randomブロックで表示エラー 投稿する

投稿者:kamo  投稿日時:2022-07-05 06:12:03
お世話になっております。たびたびで申し訳ございませんが
バージョンアップが原因か、サーバー移行が原因か?不明ですが、
Xサーバーの新サーバー移行申請をしたサイトで、以下エラーが表示されます。

7/1にCMS3.2.31sqliteにアップしてTOPページは正常だったので記事のリンク先まで未確認でしたが、昨日リンク先をクリックしたら、以下エラーとなりました。

記事ラベル詳細でURLを個別指定(半角英字)したリンクについてもリンク先にエラー表示が表示されます。
ラベルブロック、プラグインブロックでページ埋め込みした部分で表示エラーがあるのですが、ブログリンクブロックのリンクは機能しています。サーバー移行が原因でしょうか?

Fatal error: Uncaught Error: Call to undefined method PluginBlockUtil::getBlogPageByPageId() in /home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php:92 Stack trace: #0 /home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php(44): SOYCMSSameCategoryBlockRandomPlugin->checkIsBlogEntryPage(21) #1 /home/user/ドメイン.com/public_html/sycms/common/site_include/block/PluginBlockComponent/block.php(44): SOYCMSSameCategoryBlockRandomPlugin->onLoad(Array) #2 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSPage.class.php(49): PluginBlockComponent->getViewPage(Object(CMSBlogPage)) #3 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSBlogPage.class.php(706): CMSPage->main() #4 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSPageController.class.php(109): CMSBlogPage->main() #5 /home/ofis- in この場所に余計なパス名がある/home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php on line 92

3.2.35sqliteにアップすると解決しますでしょうか?
毎度お手数をお掛けしますがアドバイスいただけますでしょうか。
よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2022-07-05 06:32:33
3.2.35sqliteにアップすると解決しますでしょうか?
先に上記の返答ですが、上記バージョンにバージョンアップしても解消されません。

soycms_same_category_block_Randomのプラグインが手元になるので、予想になるのですが、
/home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php:92
上記の箇所に
$blogPage = PluginBlockUtil::getBlogPageByPageId($pageId);
というコートがあると思います。

このコードを、
$blogPage = soycms_get_blog_page_object($pageId);
に変更すればエラーは解消されるはずです。
投稿者:kamo  投稿日時:2022-07-05 06:48:25
ありがとうございます。コードですが上記が無いようなので長くなりますが全部転記します。
<?php
SOYCMSSameCategoryBlockRandomPlugin::registerPlugin();

class SOYCMSSameCategoryBlockRandomPlugin{

	const PLUGIN_ID = "same_category_block_Random";

	function getId(){
		return self::PLUGIN_ID;
	}

	/**
	 * 初期化
	 */
	function init(){

		CMSPlugin::addPluginMenu($this->getId(),array(
			"name"=>"SOY CMS同一カテゴリーの記事一覧ブロックRandomプラグイン",
			"description"=>"プラグインブロックで同一カテゴリの記事一覧をRandom表示します。記事詳細ページでのみ動作します。",
			"author"=>"****",
			"url"=>"******",
			"mail"=>"*******",
			"version"=>"0.5"
		));

		if(CMSPlugin::activeCheck($this->getId())){
			CMSPlugin::addPluginConfigPage($this->getId(),array(
				$this,"config_page"
			));

			CMSPlugin::setEvent('onPluginBlockLoad',self::PLUGIN_ID, array($this, "onLoad"));
			CMSPlugin::setEvent('onPluginBlockAdminReturnPluginId',self::PLUGIN_ID, array($this, "returnPluginId"));
		}
	}

	function onLoad(){

		$pageId = (int)$_SERVER["SOYCMS_PAGE_ID"];

		//検索結果ブロックプラグインのUTILクラスを利用する
		SOY2::import("site_include.plugin.soycms_search_block.util.PluginBlockUtil");

		//詳細ページでない場合は空の配列を返す
		if(!self::checkIsBlogEntryPage($pageId)) return array();

		//記事詳細からカテゴリの設定を習得する
		$labelIds = self::getLabelIds($pageId);
		if(is_null($labelIds)) return array();

		//ラベルIDを取得とデータベースから記事の取得件数指定
		$count = PluginBlockUtil::getLimitByPageId($pageId);

		$sql = "SELECT ent.* FROM Entry ent ".
		 "INNER JOIN EntryLabel lab ".
		 "ON ent.id = lab.entry_id ".
		 "WHERE lab.label_id IN (" . implode(",", $labelIds) . ") ".
		 "AND ent.isPublished = 1 ".
		 "AND ent.openPeriodEnd >= :now ".
				 "AND ent.openPeriodStart < :now ";

			if(SOY2DAOConfig::type() == "mysql"){
				$sql .= "ORDER BY Rand() ";
			}else{
				$sql .= "ORDER BY Random() ";
			}

		 if(isset($count) && $count > 0){
			 $sql .= "LIMIT " . $count;
		 }

		 $dao = SOY2DAOFactory::create("cms.EntryDAO");

		try{
			$results = $dao->executeQuery($sql, array(":now" => time()));
		}catch(Exception $e){
			return array();
		}

		if(!count($results)) return array();

		$soycms_search_result = array();
		foreach($results as $key => $row){
			if(isset($row["id"]) && (int)$row["id"]){
				$soycms_search_result[$row["id"]] = $dao->getObject($row);
			}
		}
		return $soycms_search_result;
	}

	//詳細ページを開いているか?
	private function checkIsBlogEntryPage($pageId){
		$page = PluginBlockUtil::getBlogPageByPageId($pageId);
		if(is_null($page->getId())) return false;

		if(strlen($page->getUri())){
			$uri = "/" . $page->getUri();
		}else{
			$uri = "";
		}
		return (strpos($_SERVER["PATH_INFO"], $uri . "/" . $page->getEntryPageUri() . "/") !== false);
	}

	private function getLabelIds($pageId){
		$alias = trim(substr($_SERVER["PATH_INFO"], strrpos($_SERVER["PATH_INFO"], "/") + 1), "/");

		$sql = "SELECT ent.id, lab.label_id FROM Entry ent ".
						"INNER JOIN EntryLabel lab ".
						"ON ent.id = lab.entry_id ".
						"WHERE ent.alias = :alias";

		$dao = new SOY2DAO();
		try{
			$res = $dao->executeQuery($sql, array(":alias" => $alias));
		}catch(Exception $e){
			return null;
		}

		if(!count($res)) return null;

		//ブログで指定されているラベルIDは除く
		$blogLabelId = (int)PluginBlockUtil::getBlogPageByPageId($pageId)->getBlogLabelId();

		$list = array();

		//ラベルの指定
		$labelIds = PluginBlockUtil::getLabelIdsByPageId($pageId);

		foreach($res as $v){
			if(isset($v["label_id"]) && is_numeric($v["label_id"]) && $blogLabelId !== (int)$v["label_id"]){
				//cms:labelsで条件を付ける
				if(count($labelIds)){
					if(in_array($v["label_id"], $labelIds)){
						$list[] = (int)$v["label_id"];
					}
				//labelIdsがない場合は無条件で入れる
				}else{
					$list[] = (int)$v["label_id"];
				}
			}
		}

		return $list;
	}

	function returnPluginId(){
		return self::PLUGIN_ID;
	}

	/**
	 * 設定画面の表示
	 */
	function config_page($message){
		SOY2::import("site_include.plugin.soycms_same_category_block_Random.config.SameCategoryBlockRandomConfigPage");
		$form = SOY2HTMLFactory::createInstance("SameCategoryBlockRandomConfigPage");
		$form->setPluginObj($this);
		$form->execute();
		return $form->getObject();
	}

	/**
	 * プラグインの登録
	 */
	public static function registerPlugin(){
		$obj = CMSPlugin::loadPluginConfig(self::PLUGIN_ID);
		if(is_null($obj)){
			$obj = new SOYCMSSameCategoryBlockRandomPlugin();
		}
		CMSPlugin::addPlugin(self::PLUGIN_ID,array($obj,"init"));
	}
}
投稿者:kamo  投稿日時:2022-07-05 07:28:31
当方夕方まで不在なので、作業ができませんが、もし解決策がわかればご享受よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2022-07-05 07:59:03
92行目の
$page = PluginBlockUtil::getBlogPageByPageId($pageId);

$page = PluginBlockUtil::soycms_get_blog_page_object($pageId);
のようにします。


他に121行目の
$blogLabelId = (int)PluginBlockUtil::getBlogPageByPageId($pageId)->getBlogLabelId();
もエラーになりますので、

$blogLabelId = (int)soycms_get_blog_page_object($pageId)->getBlogLabelId();
に変更します。
投稿者:kamo  投稿日時:2022-07-05 18:35:43
上記箇所を変更してみましたが以下のエラー表示が引き続き表示されて・・・。
Fatal error: Uncaught Error: Call to undefined method PluginBlockUtil::soycms_get_blog_page_object() in /home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php:92 Stack trace: #0 /home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php(44): SOYCMSSameCategoryBlockRandomPlugin->checkIsBlogEntryPage(21) #1 /home/user/ドメイン.com/public_html/sycms/common/site_include/block/PluginBlockComponent/block.php(44): SOYCMSSameCategoryBlockRandomPlugin->onLoad(Array) #2 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSPage.class.php(49): PluginBlockComponent->getViewPage(Object(CMSBlogPage)) #3 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSBlogPage.class.php(706): CMSPage->main() #4 /home/user/ドメイン.com/public_html/sycms/common/site_include/CMSPageController.class.php(109): CMSBlogPage->main() #5 /ho in /home/user/ドメイン.com/public_html/sycms/common/site_include/plugin/soycms_same_category_block_Random/soycms_same_category_block_Random.php on line 92
大変お手数をお掛けいたいします。
投稿者:齋藤毅  投稿日時:2022-07-05 19:04:26
すみません。
コードを間違えました。

$page = PluginBlockUtil::soycms_get_blog_page_object($pageId);
は誤りで、
$page = soycms_get_blog_page_object($pageId);
になります。
投稿者:kamo  投稿日時:2022-07-05 19:43:32
齋藤様
直りました!
大変お手数をお掛け致しました。
表示が正常通りできるようになり、ほっと致しました。
何回もご対応頂き感謝申し上げます。
今後ともよろしくお願いいたします。
ログインして投稿する