Smarty 기여 요약은 한 사이트에서 작동하지만 동일한 서버에서는 작동하지 않습니다.
나는 이것에 시간을 태우고 벽을 느낀다. 새로운 탐험의 길을 밝히기 위해 신선한 눈을 주시면 감사하겠습니다.
나는 기여 목록을 생성하기 위해 "기여 찾기"를 사용하고있다. 그런 다음 "감사 편지"를 선택한 다음 내가 만든 템플릿을 선택합니다.
템플릿에서 저는 작년에 온라인에서 찾은 몇 가지 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>
깔끔한 테이블을 생성하는 한 사이트에서 훌륭하게 작동합니다.

그러나 동일한 서버의 다른 사이트에서 "이 웹 사이트에 심각한 오류가 있습니다. 지침은 사이트 관리자 이메일받은 편지함을 확인하십시오."라는 메시지가 표시됩니다.
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)
해당 오류에 대한 웹 검색하는 것은 밝혀 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 편집기였으며 업데이트 된 구성 (스크린 샷에서 바로 보이는)을 선택하는 것을 거부했습니다.
다른 브라우저 (또는 브라우저 캐시 정리)를 시도하고 올바른 템플릿을 다시 저장하십시오. 그런 다음 테스트하십시오. 작동합니다.