田舎の風見鶏

サイトのデザインを変更してみた。 レスポンシブ対応

日記

soy cms久しぶりにsoy cmsのバージョンアップを行ったついでに、デザインも変更してみました。

Google先生はレスポンシブ対応がお好きなみたいなので、このサイトもレスポンシブにしてみました。

soy cmsにはガラケー用の「携帯ページ」や携帯振り分けプラグインなどが同梱されていますが、もう世の中スマホが全盛でしょうから、レスポンシブデザインだけ導入して携帯ページは、スッパリと割愛しました。

テンプレートはHTMLで作られているものを使用しています。

soy cmsへの対応はかなり手軽に可能でした。この辺りはHTMLと共存できるsoy cmsの強みですね。

最近更新が滞っているsoy cmsですが、そろそろPHP5.2必須からPHP5.3とか5.4になりそうなのでサーバーの移転も考えている今日このごろです。

PHP5.2でsoy cms 1.8.6以降のエラー回避について

soycms

なるべく新しいsoy cmsを利用したくて、結構頻繁にバージョンアップしていましたが、soy cms 1.8.6以降では管理画面には入れるけど公開ページが真っ白なので、soy cms 1.8.5を使い続けていました。

このサイトで使っているラクサバもPHP5.2.17です。
公式サイトではPHP5.2以降、推奨環境が5.2.20以降となっていますのでラクサバは非推奨環境ですね。

しかし仕事でPHP5.2.17でsoy cmsをインストールすることになり、最新の1.8.12をインストールしましたが、やはり公開ページは真っ白。

仕方ないのでエラーログを見て原因を調べてみました。

エラーログの場所はsoy cmsインストールディレクトリの/common/log/error-******.log

(******は西暦と月、2015年11月分のログはerror-201511.log)

これをダウンロードして開いてエラーを確認。

>PHP Parse error:  syntax error, unexpected T_FUNCTION in /soyをインストールしたディレクトリ/common/site_include/CMSBlogPage.class.php on line 280
>PHP Parse error:  syntax error, unexpected T_FUNCTION in /soyをインストールしたディレクトリ/common/site_include/DateLabel.class.php on line 39

CMSBlogPage.class.phpとDateLabel.class.phpの2つのファイルがエラーを吐いています。

エラー箇所近辺のコードを見ると共通してPHP5.3.0.0以降かどうかのif文での条件分岐でエラーを吐いています。

        >//条件付きフォーマット
        >if(version_compare(PHP_VERSION, '5.3.0', '>=0')){
        >   //preg_replaceのeオプションは5.5.0で非推奨になった
        >  //preg_replace_callbackは4.0.5から使えるが無名関数は5.3.0以降
       >     $time = $this->time; $year = $this->year; $month = $this->month; $day = $this->day;
       >    $format = preg_replace_callback("/%DATE:([^%]*)%/u",function($m) use ($time) {return date($m[1],$time);},$format);
       >     $format = preg_replace_callback('/%Y:([^%]*)%/u',function($m) use ($time, $year)  {return strlen($year)  ? date($m[1],$time) : '';},$format);
       >     $format = preg_replace_callback('/%M:([^%]*)%/u',function($m) use ($time, $month) {return strlen($month) ? date($m[1],$time) : '';},$format);
       >     $format = preg_replace_callback('/%D:([^%]*)%/u',function($m) use ($time, $day)   {return strlen($day)   ? date($m[1],$time) : '';},$format);
       > }else{
       >    $format = preg_replace("/%DATE:([^%]*)%/e","date('\\1',\$this->time)",$format);
       >     $format = preg_replace('/%Y:([^%]*)%/e',"strlen(\$this->year)  ? date('\\1',\$this->time) : ''",$format);
       >     $format = preg_replace('/%M:([^%]*)%/e',"strlen(\$this->month) ? date('\\1',\$this->time) : ''",$format);
       >    $format = preg_replace('/%D:([^%]*)%/e',"strlen(\$this->day)    ? date('\\1',\$this->time) : ''",$format);
       > }

PHPはほとんど触ったことがないし面倒くさかったので、PHP5.3.0かどうかのif分をまるごと削除しました。

強引ですがこれでPHP5.2環境でも動作しました。


<< 1 >> 1ページ中1ページ目