Ayrıştırma ve PHP hatalarını gömme bölümü

Yani temel olarak bir segmentin modelini kontrol etmemiz gerekiyor ve eğer bizim modellerimizle uyuşmuyorsa, girişlerimize başlamak için devam ediyoruz (seg2cat aracılığıyla).

{segment_2} bir tarihse, ya YYYY-MM veya YYYY-AA-DD şeklinde biçimlendirilir, aksi halde bir dizedir.

<?php 

    $this->EE =& get_instance();
    $seg2 = $this->EE->uri->segment(2);

    $date_pattern_half = '/^[0-9]{4}-(0[1-9]|1[0-2])$/';
    $date_pattern_full = '/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/';

    if( preg_match($date_pattern_full, $seg2) || preg_match($date_pattern_half, $seg2) ) {
?>
        {exp:low_events:entries channel="calendar" date="{segment_2}"}
<?php } else { ?>
        {exp:low_events:entries channel="calendar" category="{segment_2_category_id}"}
<?php } ?>

... do stuff with entries here ...

{/exp:low_events:entries}

Geri döndüğümüz hata şu:

Ayrıştırma hatası: /server/domain/system/expressionengine/libraries/Functions.php(679 içindeki sözdizimi hatası, beklenmeyen '}': eval() '68 satırındaki d kodu

referans için, Functions.php dosyasındaki yukarıdaki işlev:

/**
 * eval()
 *
 * Evaluates a string as PHP
 *
 * @access  public
 * @param   string
 * @return  mixed
 */
function evaluate($str)
{
    return eval('?'.'>'.$str.'<?php ');
}

As for the 'line 68' val it's just a closing tag.


Açılış döngülerini ( {exp: low_events: entries} ) kaldırdığımızda, bu hatayı almadığımıza da dikkat etmeliyiz.

Alternatif sözdizimini <? PHP else:?> vb. Denedik ancak yukarıdakiler yerine beklenmedik bir T_ELSE aldık.

0

1 cevap

Muhtemelen girdiden ziyade PHP'nin çıkıştan kaynaklanıyor olmasından kaynaklanıyor ama PHP'yi tamamen kullanmaktan kaçınabilirsiniz. Düşük Olayların ayarlandığı yol ve Düşük Seg2Cat'ın çalışması, her iki parametreyi de biçimlerine bakılmaksızın ayarlamanızı sağlar:

{exp:low_events:entries date="{segment_2}" category="{segment_2_category_id}"}
    ...
{/exp:low_events:entries}

2. segment bir tarihse, bir kategori ile eşleşmeyeceği için {segment_2_category_id} boş olacaktır.

2. segment bir kategori ise, bir tarihle eşleşmez, böylece date parametresi bu değeri yok sayar ve bugün çalışma tarihi olarak kullanılır.

2
katma
Çözüm için teşekkürler! Yalnızca şablon işaretlemesine güvenmemek yerine, problemleri programlı olarak çözmek için varsayılan öneriyorum.
katma yazar John T, kaynak