Ringkasan kontribusi Smarty berfungsi di satu situs, tetapi tidak di situs lain di server yang sama

Dec 24 2020

Saya telah menghabiskan waktu berjam-jam untuk ini dan merasa di dinding. Akan sangat menghargai beberapa mata baru untuk menjelaskan jalan eksplorasi baru.

Saya menggunakan "temukan Kontribusi" untuk menghasilkan daftar kontribusi. Saya kemudian memilih "Surat terima kasih" dan kemudian memilih template yang saya buat.

Dalam template saya menggunakan beberapa kode Smarty yang saya temukan online tahun lalu yang merangkum kontribusi dan membuat tabel yang rapi:

{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>

Ini berfungsi dengan baik di satu situs menghasilkan tabel yang rapi:

Namun, di situs lain di server yang sama, saya mendapatkan "Telah terjadi kesalahan kritis di situs ini. Silakan periksa kotak masuk email admin situs Anda untuk mendapatkan petunjuk."

Memeriksa log kesalahan Apache saya menemukan kesalahan yang agak tidak spesifik:

[Wed Dec 23 13:51:44.466136 2020] [php7:error] [pid 31786] [client maskedIP:43002] PHP Fatal error:  Smarty error: [in string:&lt;table align=&quot;left&quot; border=&quot;1&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; class=&quot;table&quot; style=&quot;margin-top:15px;&quot;&gt;\r\n\t&lt;tbody&gt;\r\n\t\t&lt;tr&gt;\r\n\t\t\t&lt;th&gt;Date&lt;/th&gt;\r\n\t\t\t&lt;th style=&quot;text-align:right;&quot;&gt;Amount&lt;/th&gt;\r\n\t\t\t&lt;th&gt;Method&lt;/th&gt;\r\n\t\t\t&lt;th&gt;Campaign&lt;/th&gt;\r\n\t\t\t&lt;th&gt;Note&lt;/th&gt;\r\n\t\t&lt;/tr&gt;\r\n\t\t&lt;!--\r\n    {foreach from=$contributions item=contribution} {assign\r\n var=&quot;date&quot; value=$contribution.receive_date|date_format:&quot;%d %b\r\n    %Y&quot;}\r\n  --&gt;\r\n\t\t&lt;tr&gt;\r\n\t\t\t&lt;td&gt;{$date}&lt;/td&gt;\r\n\t\t\t&lt;td style=&quot;text-align:right;&quot;&gt;${$contribution.total_amount|number_format:2:&quot;.&quot;:&quot;,&quot;}&lt;/td&gt;\r\n\t\t\t&lt;td&gt;{$contribution.payment_instrument}{if $contribution.check_number neq&quot;&quot;} - #{$contribution.check_number}{/if}&lt;/td&gt;\r\n\t\t\t&lt;td&gt;{$contribution.campaign}&lt;/td&gt;\r\n\t\t\t&lt;td&gt;{$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

Saya telah menonaktifkan entitas di CKEditor di kedua situs:

Saya telah memastikan Smarty diaktifkan di template pesan dan log kesalahan mengonfirmasi bahwa karena kesalahan tersebut jelas terkait dengan Smarty.

Saya benar-benar telah memotong dan menempelkan kode dari satu situs ke situs lain dan tidak mengubahnya dengan cara apa pun.

Saya berhasil melakukan tes yang sangat sederhana dengan memasukkan kode berikut ke dalam template:

<p>{$smarty.now|date_format}</p> <p>{$smarty.version}</p>

Saya mendapatkan hasil yang valid untuk pengujian sederhana itu di kedua situs:

Saya juga mencoba menulis kode Smarty lainnya, tetapi tidak beruntung mendapatkan apa pun selain kasus dasar itu untuk bekerja. Mungkin itu ada hubungannya dengan pengalaman Smarty saya yang terbatas. Namun, kode pertama yang saya bagikan berfungsi dengan baik di satu situs dan gagal di situs lain.

Situs 1 (berfungsi): WordPress 5.6, PHP 7.3.22, CiviCRM 5.30.0, Smarty 2.6.31 (meskipun ini tampaknya sangat tua jadi saya berharap ini telah menjadi versi CiviCRM untuk waktu yang lama)

Situs 2 (tidak berfungsi - kesalahan di atas): WordPress 5.6, PHP 7.3.22, CiviCRM 5.32.2, Smarty 2.6.31

Meskipun versi CiviCRM berbeda, saya berharap ini bukan regresi. Tampaknya sangat tidak mungkin karena versi Smarty tidak berubah.

Berharap seseorang dapat menjelaskan atau menawarkan tempat lain untuk mencari catatan berguna yang mungkin memberikan petunjuk.

Jawaban

2 kapn Dec 29 2020 at 01:20

Terima kasih kepada @demerit karena telah menyarankan cara untuk menangkap kesalahan Smarty penuh di log. Saya menemukan bahwa saya tidak mendapatkan seluruh kesalahan di log Apache. Menggunakan CRM_Core_Error::debug_log_message($error_msg);saya dapat menangkap seluruh kesalahan yang mencakup baris berguna berikut:

 line 17]: [plugin] (secure mode) modifier 'number_format' is not allowed (Smarty_Compiler.class.php, line 1934)

Menelusuri web untuk kesalahan itu mengungkapkan postingan dari Jan 2016 yang menunjukkan bahwa number_formattidak didukung, tetapi harus digunakan crmNumberFormatsebagai gantinya.

Membuat penggantian ini menyelesaikan masalah. Masih menjadi misteri mengapa number_formatbekerja di instalasi CiviCRM saya yang lain ketika tampaknya telah menjadi masalah setidaknya sejak 2016. Namun, itu adalah masalah untuk hari lain. Untuk saat ini saya senang telah menyelesaikan masalah pada penginstalan ini.

Tabel yang diperbaiki adalah sebagai berikut:

<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>&nbsp;</th>
        <th>&nbsp;</th>
        <th>&nbsp;</th>
    </tr>
</tbody>
1 Marko Dec 28 2020 at 06:39

Saya baru-baru ini menghabiskan banyak waktu untuk membahas apa yang tampak seperti masalah yang sama. Bagi saya itu adalah editor CK yang bertahan di cache browser, menolak untuk mengambil konfigurasi yang diperbarui (yang terlihat tepat di tangkapan layar Anda).

Coba browser lain (atau bersihkan cache browser) dan simpan template yang benar lagi. Kemudian ujilah. Ini harus berhasil.