Smarty katkı özeti bir sitede çalışıyor, ancak aynı sunucuda başka bir sitede çalışıyor

Dec 24 2020

Bunun üzerinde saatlerce yandım ve kendimi bir duvarda hissediyorum. Yeni keşif yollarına ışık tutacak taze gözleri takdir ederdim.

Bir katkı listesi oluşturmak için "Katkı Bul" u kullanıyorum. Daha sonra "Teşekkür mektupları" nı seçiyorum ve ardından oluşturduğum şablonu seçiyorum.

Şablonda, geçen yıl çevrimiçi olarak bulduğum, katkıları özetleyen ve düzgün bir tablo oluşturan bazı Smarty kodunu kullanıyorum:

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

Düzgün bir masa üreten bir sitede harika çalışıyor:

Ancak, aynı sunucudaki başka bir sitede "Bu web sitesinde kritik bir hata oluştu. Talimatlar için lütfen site yöneticisi e-posta gelen kutunuzu kontrol edin" mesajı alıyorum.

Apache hata günlüğünü kontrol ederken, biraz spesifik olmayan bir hata buldum:

[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

Her iki sitede de CKEditor'daki varlıkları devre dışı bıraktım:

Smarty'nin mesaj şablonlarında etkinleştirildiğinden emin oldum ve hata günlüğü bunu onaylıyor çünkü hata açıkça Smarty ile ilgili.

Kodu bir siteden diğerine tam anlamıyla kesip yapıştırdım ve hiçbir şekilde değiştirmedim.

Aşağıdaki kodu bir şablona yerleştirerek çok basit bir testi başarıyla yapabiliyorum:

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

Her iki sitede de bu basit test için geçerli çıktı alıyorum:

Diğer Smarty kodunu da yazmayı denedim, ancak çalışmak için bu temel durumdan başka bir şey elde etme şansım olmadı. Muhtemelen bunun en azından benim sınırlı Smarty deneyimimle bir ilgisi var. Ancak, paylaştığım ilk kod bir sitede harika çalışıyor ve diğerinde başarısız oluyor.

Site 1 (çalışıyor): WordPress 5.6, PHP 7.3.22, CiviCRM 5.30.0, Smarty 2.6.31 (bu çok eski görünmesine rağmen uzun süredir CiviCRM sürümü olmasını bekliyorum)

Site 2 (çalışmıyor - yukarıdaki hata): WordPress 5.6, PHP 7.3.22, CiviCRM 5.32.2, Smarty 2.6.31

CiviCRM sürümleri farklı olsa da, bunun bir gerileme olmadığını umuyorum. Smarty sürümü değişmediği için özellikle olası görünmüyor.

Birinin ışık tutmasını veya ipucu sağlayabilecek yararlı günlükler aramak için başka yerler önerebileceğini ummak.

Yanıtlar

2 kapn Dec 29 2020 at 01:20

Günlükteki tam Smarty hatasını yakalamanın bir yolunu önerdiği için @demerit'e teşekkürler. Apache günlüğünde hatanın tamamını almadığımı keşfettim. Kullanarak CRM_Core_Error::debug_log_message($error_msg);, aşağıdaki yararlı satırı içeren tüm hatayı yakalayabildim:

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

Web'de bu hatayı araştırmak , Ocak 2016'danumber_format desteklenmediğini, ancak crmNumberFormatbunun yerine kullanılması gerektiğini gösteren bir gönderi ortaya çıkardı .

Bu değişimi yapmak sorunu çözdü. number_formatEn az 2016'dan beri bir sorun gibi görünürken, neden başka bir CiviCRM kurulumumda çalıştığı bir muamma olarak kalır . Ancak, bu başka bir gün için bir sorun. Şimdilik bu kurulumdaki sorunu çözdüğüm için mutluyum.

Düzeltilmiş tablo aşağıdaki gibidir:

<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

Geçenlerde aynı soruna benzeyen şeyler üzerine çok zaman harcadım. Benim için tarayıcı önbelleğinde devam eden ve güncellenmiş yapılandırmayı almayı reddeden bir CK düzenleyicisiydi (ekran görüntünüzde tam olarak görünüyor).

Farklı bir tarayıcı deneyin (veya tarayıcı önbelleğini temizleyin) ve doğru şablonu yeniden kaydedin. Sonra test edin. İşe yaramalı.