Smartyコントリビューションサマリーは1つのサイトで機能しますが、同じサーバー上の別のサイトでは機能しません
私はこれに何時間も燃やし、壁を感じました。新しい探検の道に光を当てるために、いくつかの新鮮な目をいただければ幸いです。
「投稿の検索」を使用して、投稿のリストを生成しています。次に、「ありがとうの手紙」を選択してから、作成したテンプレートを選択します。
テンプレートでは、昨年オンラインで見つけたSmartyコードを使用しています。このコードは、貢献を要約し、きちんとしたテーブルを作成します。
{foreach from=$contributions item=contribution} {assign var="date" value=$contribution.receive_date|date_format:"%d %b %Y"}
<tr>
<td>{$date}</td> <td style="text-align:right;">${$contribution.total_amount|number_format:2:".":","}</td> <td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td>
<td>{$contribution.campaign}</td> <td>{$contribution.contribution_source}</td>
</tr>
{/foreach}
<tr>
<th>2020 TOTAL</th>
<th style="text-align:right;">${$contribution_aggregate|number_format:2:".":","}</th>
<th> </th>
<th> </th>
<th> </th>
</tr>
それはきちんとしたテーブルを作り出す1つのサイトでうまく機能します:
ただし、同じサーバー上の別のサイトで、「このWebサイトで重大なエラーが発生しました。手順についてはサイト管理者の電子メール受信ボックスを確認してください」というメッセージが表示されます。
Apacheエラーログを確認すると、やや非特定のエラーが見つかりました。
[Wed Dec 23 13:51:44.466136 2020] [php7:error] [pid 31786] [client maskedIP:43002] PHP Fatal error: Smarty error: [in string:<table align="left" border="1" cellpadding="5" cellspacing="0" class="table" style="margin-top:15px;">\r\n\t<tbody>\r\n\t\t<tr>\r\n\t\t\t<th>Date</th>\r\n\t\t\t<th style="text-align:right;">Amount</th>\r\n\t\t\t<th>Method</th>\r\n\t\t\t<th>Campaign</th>\r\n\t\t\t<th>Note</th>\r\n\t\t</tr>\r\n\t\t<!--\r\n {foreach from=$contributions item=contribution} {assign\r\n var="date" value=$contribution.receive_date|date_format:"%d %b\r\n %Y"}\r\n -->\r\n\t\t<tr>\r\n\t\t\t<td>{$date}</td>\r\n\t\t\t<td style="text-align:right;">${$contribution.total_amount|number_format:2:".":","}</td>\r\n\t\t\t<td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td>\r\n\t\t\t<td>{$contribution.campaign}</td>\r\n\t\t\t<td>{$contribution.contri in /var/www/masked-url.org/wordpress/wp-content/plugins/civicrm/civicrm/packages/Smarty/Smarty.class.php on line 1100, referer: https://masked-url.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fcontribute%2Fsearch&_qf_PDFLetter_display=true&qfKey=bd001d277ba51fe3447c1acb3c2bed4dceb754c89022040c362d62bb4e04b4b3_9738
両方のサイトのCKEditorでエンティティを無効にしました:
メッセージテンプレートでSmartyが有効になっていることを確認しました。エラーログは、エラーが明らかにSmartyに関連しているためであることを確認しています。
私は文字通り、あるサイトから別のサイトにコードをカットアンドペーストしましたが、いかなる方法でも変更していません。
次のコードをテンプレートに入れることで、非常に簡単なテストを正常に実行できます。
<p>{$smarty.now|date_format}</p> <p>{$smarty.version}</p>
両方のサイトでその単純なテストの有効な出力を取得します。
他のSmartyコードも書いてみましたが、その基本的なケース以外はうまくいきませんでした。おそらく、それは少なくとも私の限られたSmartyの経験と関係があります。ただし、私が共有した最初のコードは、一方のサイトではうまく機能し、もう一方のサイトでは失敗します。
サイト1(動作): WordPress 5.6、PHP 7.3.22、CiviCRM 5.30.0、Smarty 2.6.31(これは非常に古いように見えるので、長い間CiviCRMバージョンであったと思います)
サイト2(機能しない-上記のエラー): WordPress 5.6、PHP 7.3.22、CiviCRM 5.32.2、Smarty 2.6.31
CiviCRMのバージョンは異なりますが、これがリグレッションではないことを願っています。Smartyのバージョンは変更されていないため、特に可能性は低いようです。
誰かが光を当てたり、手がかりを提供する可能性のある有用なログを探すために他の場所を提供したりできることを願っています。
回答
Smartyエラー全体をログに取り込む方法を提案してくれた@demeritに感謝します。Apacheログにエラー全体が記録されていないことがわかりました。を使用CRM_Core_Error::debug_log_message($error_msg);
して、次の有用な行を含むエラー全体をキャプチャすることができました。
line 17]: [plugin] (secure mode) modifier 'number_format' is not allowed (Smarty_Compiler.class.php, line 1934)
そのエラーをWebで検索すると、サポートされていないことを示す2016年1月の投稿が見つかりましたが、代わりにnumber_format
使用する必要がありますcrmNumberFormat
。
この交換を行うことで問題は解決しました。number_format
少なくとも2016年以降問題が発生しているように見えるのに、別のCiviCRMインストールで機能する理由は謎のままです。しかし、それは別の日の問題です。今のところ、このインストールの問題を解決できてうれしいです。
修正された表は次のとおりです。
<table align="left" border="1" cellpadding="5" cellspacing="0" class="table" style="margin-top:15px;">
<tbody>
<tr>
<th>Date</th>
<th style="text-align:right;">Amount</th>
<th>Method</th>
<th>Campaign</th>
<th>Note</th>
</tr>
<!--
{foreach from=$contributions item=contribution} {assign
var="date" value=$contribution.receive_date|date_format:"%d %b %Y"} --> <tr> <td>{$date}</td>
<td style="text-align:right;">${$contribution.total_amount|crmNumberFormat:2:".":","}</td>
<td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td> <td>{$contribution.campaign}</td>
<td>{$contribution.contribution_source}</td> </tr> <!-- {/foreach} --> <tr> <th>2019 TOTAL</th> <th style="text-align:right;">${$contribution_aggregate|crmNumberFormat:2:".":","}</th>
<th> </th>
<th> </th>
<th> </th>
</tr>
</tbody>
私は最近、同じ問題のように見えることに多くの時間を費やしました。私にとっては、ブラウザーのキャッシュに保持されているCKエディターであり、更新された構成の取得を拒否していました(スクリーンショットで正しく表示されます)。
別のブラウザーを試して(またはブラウザーのキャッシュをクリーンアップして)、正しいテンプレートを再度保存してください。次に、それをテストします。動作するはずです。