新規ページ作製時のエラー

インストール後の運用中に生じた質問などはこちら。
管理画面の操作方法でわからないところやTipsなども

新規ページ作製時のエラー

投稿記事by みせだんな on 2018年9月11日(火) 11:52

いつもお世話になっております。
新規のページを作成する際にエラーメッセージが表示されるようになりました。
ご教示いただければ幸いです。

Warning: count(): Parameter must be an array or an object that implements Countable in /cms/soycms/webapp/pages/Page/CreatePage.class.php on line 158


コード: 全て選択
   function outputCommentList(){

      $blogArray = $this->getBlogIds();
      $blogIds = array_keys($blogArray);

      $commentListLogic = SOY2Logic::createInstance("logic.site.Entry.EntryCommentLogic");
      $comments = $commentListLogic->getComments($blogIds, 3, 0);

      if(count($comments) == 0){
         DisplayPlugin::hide("only_comment_exists");
      }

      foreach($comments as $key => $comment){
         $comment->info = $this->getBlogId($comment->getEntryId());
      }

      $this->createAdd("recentComment", "RecentCommentList", array(
         "list"=>$comments
      ));
   }


よろしくお願いいたします。
みせだんな
 
記事: 22
登録日時: 2018年4月05日(木) 13:11

Re: 新規ページ作製時のエラー

投稿記事by inunosinsi on 2018年9月11日(火) 12:06

今回のエラーはPHP7.2の対応漏れです。

コード: 全て選択
if(count($comments) == 0){
    DisplayPlugin::hide("only_comment_exists");
}




コード: 全て選択
if(is_arrray($comments) && count($comments) == 0){
    DisplayPlugin::hide("only_comment_exists");
}


のように$comments変数に配列が入っているか?を事前に調べる式を追加する必要があります。
SOY CMSの操作に関する質問は下記のページのフォームで受け付けています。
https://saitodev.co/soycms/inquiry

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

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

Re: 新規ページ作製時のエラー

投稿記事by みせだんな on 2018年9月11日(火) 13:36

返信ありがとうございます。
申し訳ありません。
ファイル名を間違って掲載しておりました。
正しくは
コード: 全て選択
if(count($tmps)){
               foreach($tmps as $id => $array){
                  $html[] = '<option value="'.$template->getId()."/". $id .'">' . $array["name"] . '</option>';
               }


の位置でエラーメッセージがでておりました。
よろしくお願いいたします。
みせだんな
 
記事: 22
登録日時: 2018年4月05日(木) 13:11

Re: 新規ページ作製時のエラー

投稿記事by inunosinsi on 2018年9月12日(水) 04:48

コード: 全て選択
if(count($tmps)){
    foreach($tmps as $id => $array){
        $html[] = '<option value="'.$template->getId()."/". $id .'">' . $array["name"] . '</option>';
    }
}




コード: 全て選択
if(is_array($tmps) && count($tmps)){
    foreach($tmps as $id => $array){
        $html[] = '<option value="'.$template->getId()."/". $id .'">' . $array["name"] . '</option>';
    }
}


にすれば良いです。

一応解説を載せておきます。
$tmpsに格納されている値が配列ではないのに、count関数で$tmpsを配列と見立て、配列内の値の数を調べるという処理になっているというのが問題で、
PHP7.2より前であれば無視されましたが、PHP7.2ではエラーになるという問題です。

解決するために、count関数を実行する前に、$tmpsの値が配列であるか?という処理を入れることによって、
$tmpsが配列でなければ、count関数を実行しないという処理に変えています。
SOY CMSの操作に関する質問は下記のページのフォームで受け付けています。
https://saitodev.co/soycms/inquiry

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

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

Re: 新規ページ作製時のエラー

投稿記事by みせだんな on 2018年9月12日(水) 10:45

丁寧な説明をありがとうございます。
ファイルを修正し、正常に作動しております。
ありがとうございました。
みせだんな
 
記事: 22
登録日時: 2018年4月05日(木) 13:11


Return to 運用・操作方法

オンラインデータ

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