Le résumé des contributions Smarty fonctionne sur un site, mais pas sur un autre sur le même serveur
J'ai brûlé des heures là-dessus et je me sens contre un mur. J'apprécierais quelques yeux frais pour faire la lumière sur de nouvelles pistes d'exploration.
J'utilise "rechercher des contributions" pour générer une liste de contributions. Je choisis ensuite «Lettres de remerciement» puis je choisis le modèle que j'ai créé.
Dans le modèle, j'utilise du code Smarty que j'ai trouvé en ligne l'année dernière qui résume les contributions et crée un tableau soigné:
{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>
Cela fonctionne très bien sur un site produisant une table soignée:

Cependant, sur un autre site sur le même serveur, j'obtiens "Une erreur critique s'est produite sur ce site Web. Veuillez vérifier la boîte de réception de l'e-mail de l'administrateur de votre site pour obtenir des instructions."
En vérifiant le journal des erreurs Apache, je trouve une erreur quelque peu non spécifique:
[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
J'ai désactivé des entités dans CKEditor sur les deux sites:

Je me suis assuré que Smarty est activé dans les modèles de message et le journal des erreurs le confirme, car l'erreur est clairement liée à Smarty.
J'ai littéralement copié-collé le code d'un site à l'autre et je ne l'ai en aucun cas modifié.
Je suis capable de faire un test très simple avec succès en mettant le code suivant dans un modèle:
<p>{$smarty.now|date_format}</p> <p>{$smarty.version}</p>
J'obtiens une sortie valide pour ce test simple sur les deux sites:

J'ai également essayé d'écrire d'autres codes Smarty, mais je n'ai eu aucune chance de faire fonctionner autre chose que ce cas de base. Cela a probablement au moins quelque chose à voir avec mon expérience limitée de Smarty. Cependant, le premier code que j'ai partagé fonctionne très bien sur un site et échoue sur l'autre.
Site 1 (fonctionne): WordPress 5.6, PHP 7.3.22, CiviCRM 5.30.0, Smarty 2.6.31 (bien que cela semble très ancien donc je suppose que c'est la version CiviCRM depuis longtemps)
Site 2 (ne fonctionne pas - erreur ci-dessus): WordPress 5.6, PHP 7.3.22, CiviCRM 5.32.2, Smarty 2.6.31
Bien que les versions de CiviCRM diffèrent, j'espère que ce n'est pas une régression. Cela semble d'autant plus improbable que la version Smarty n'a pas changé.
En espérant que quelqu'un puisse faire la lumière ou proposer d'autres endroits pour rechercher des journaux utiles qui pourraient fournir un indice.
Réponses
Merci à @demerit d'avoir suggéré un moyen de capturer l'erreur Smarty complète dans le journal. J'ai découvert que je n'obtenais pas l'erreur entière dans le journal Apache. En utilisant, CRM_Core_Error::debug_log_message($error_msg);
j'ai pu capturer toute l'erreur qui comprenait la ligne utile suivante:
line 17]: [plugin] (secure mode) modifier 'number_format' is not allowed (Smarty_Compiler.class.php, line 1934)
La recherche de cette erreur sur le Web a révélé un article de janvier 2016 qui montrait que ce number_format
n'était pas pris en charge, mais qu'il fallait l'utiliser à la crmNumberFormat
place.
Faire ce remplacement a résolu le problème. Cela reste un mystère pourquoi number_format
fonctionne dans une autre de mes installations CiviCRM alors que cela semble avoir été un problème depuis au moins 2016. Cependant, c'est un problème pour un autre jour. Pour l'instant, je suis heureux d'avoir résolu le problème de cette installation.
Le tableau corrigé est le suivant:
<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>
J'ai récemment dépensé beaucoup de temps sur ce qui ressemble au même problème. Pour moi, c'était un éditeur CK qui persistait dans le cache du navigateur, refusant de récupérer la configuration mise à jour (qui semble juste dans votre capture d'écran).
Essayez un autre navigateur (ou nettoyez le cache du navigateur) et enregistrez à nouveau le modèle correct. Alors testez-le. Ça devrait marcher.