EC-CUBE2系サイトのPHP8対応:Smarty5への対応

  • EC-CUBE2系
投稿日:2026/01/05

概要


このページはEC-CUBE2系サイトのPHP8対応の続きです。
このページではPHP8の対応でSmarty5に変更したためその対応内容を記載します。

※ PHP8対応でお困りの方はご相談ください。

assignの文字列結合の修正


【対応理由】変数と文字を結合させる場合は全体をダブルコーテーションで囲む必要があるため

【事例】
以下のような内容のassignの記述を全チェックします。
<!--{assign var=q_id value=quantity_$product_class_id}-->


【調整内容】変数は引用符(')で全体はダブルコーテーションで囲む
<!--{assign var=q_id value="quantity_`$product_class_id`"}-->



PHP標準関数が利用できない件の対応


【対応理由】PHP標準関数は明示的に利用を設定するようになったため
エラーになるため追加していきます。

【対応内容】SC_View.phpに追加する
以下のように追加します。
$this->_smarty->registerPlugin('modifier', 'preg_match', 'preg_match');


【メモ】
PHP標準関数をSmartyでもPHP7以前と同じ感覚で呼び出していることがあり、PHP8ではエラーになるパターンがあります。
※ 詳しくはEC-CUBE2系サイトのPHP8対応①のPHP標準関数のパラメータの変更対応を御覧ください。
その場合registerPluginへのメソッド登録を工夫します。
以下の記述のようにregisterPluginのメソッドは第二引数の名称で、第三引数のメソッドの内容を呼び出しています。
$this->_smarty->registerPlugin('modifier', 'sfTrim', SC_Utils_Ex::class . '::sfTrim');

例えば、countを標準関数を拡張したクラスに変更したい場合(SC_DefaultPhp_Exは拡張クラス名の例)、以下のようになります。
$this->_smarty->registerPlugin('modifier', 'count', SC_DefaultPhp_Ex::class . '::count_ex');



stripの削除対応


【対応理由】stripが廃止となったため

【調整内容】コードをgrep検索し削除する
以下のコードを探して削除します。
<!--{strip}-->
<!--{/strip}-->



phpの削除対応


【対応理由】phpが廃止となったため

【調整内容】コードをgrep検索し削除するが、PHPのコードが意図するように動作させる
例)ループをbreakしている箇所
<!--{if $smarty.section.data.first}-->
<!--{php}-->break;<!--{/php}-->
<!--{/if}-->
この場合は、ループ全体をこの判定のif文で囲むなどします。


nofilterの利用


【対応理由】#script escaped#と出力されることや smarty:nodefaultsが廃止されたため

【修正例】#script escaped#と出力される(ページング)
以下のように変更します。
<!--{$objNavi->strnavi}-->
↓↓↓
<!--{$objNavi->strnavi nofilter}-->

【修正例】smarty:nodefaults
<textarea class="top" id="<!--{$key}-->" name="<!--{$key}-->" rows="<!--{$text_row}-->" style="width: 99%;"><!--{"\n"}--><!--{$arrForm[$key].value|smarty:nodefaults|h}--></textarea>
↓↓↓
<textarea class="top" id="<!--{$key}-->" name="<!--{$key}-->" rows="<!--{$text_row}-->" style="width: 99%;"><!--{"\n"}--><!--{$arrForm[$key].value nofilter}--></textarea>



html_checkboxesの変更への対応


【対応理由】html_checkboxesにescapeオプションが追加され、初期値ではhtmlタグが無効化されるため

【修正例】escapeオプション(初期true)を無効にする
以下のように変更します
<div class="list_style"><!--{html_checkboxes name="product_status" options=$arrProductStatus selected=$smarty.get.product_status|h}--></div>
↓↓↓
<div class="list_style"><!--{html_checkboxes escape=false name="product_status" options=$arrProductStatus selected=$smarty.get.product_status|h}--></div>

【注意点】htmlタグを無効にするのは本来は必要なので、動作確認して必要となった場合に設定します。


Next



PHP8対応でお困りの方へ

PHP8対応でお困りの方はご相談ください。
関連カテゴリ