/ Yüklemek için hızlı yolu PHP şablonu içerir?

6 Cevap php

MySQL çekti listelerinin farklı aracılığıyla döngüler ve bir Facebook-vari "yem" olarak görüntüleyen bir işlevi var. Her liste türü farklı bir görünüme sahiptir ve bu nedenle farklı bir şablon gerektirir.

İşte aşağıda işlevi örneği (100 listeleri varsa) 100 kez denilebilir olduğunu:

function display_listing($id,$type) {
    global $abs_path;

    switch($type) {

        case 'photo':
            include($abs_path . '/templates/photo.php');
            break;

        case 'video':
            include($abs_path . '/templates/video.php');
            break;

    }

}

Bunu yapmak için daha iyi bir yolu var mı, nerede potansiyel 100 içerir ile bitmiyor - Benim sürecini yavaşlatabilir hangileri? Ben bir şekilde sayfadaki kez dahil kaydetmek ve gerektiğinde bunun için birçok kez ifade edebilir?

... Ya bu iyi bir uygulamadır?

Ayrıca, ben bir şablon motoru olmadan, kendi başıma bunu bilmek istiyorum ...

EDIT: Sorun sadece include_once tarafından çözülmüş değil (I dont inanmak) ... Ben her zaman değişkenleri yerine dahil dosyayı birden çok kez yeniden gerekiyor.

6 Cevap

Bir anahtarı bu kodu yazmak için en ölçeklenebilir yolu olmasa da, ben burada, ayrı dosyalarda şablonları tutmak için tek yoldur içerir korkuyorum.

Sen, makul, ancak, bir işlevde her şablon kodunu saklanması olabilir:

/*
photoTemplate.php
*/

<?php
function loadPhotoTemplate($id) {
?>
  <div id="photo">
...
  </div>
<?php
}
?>


/*
listing.php
*/

function display_listing($id,$type) {
    global $abs_path;

    switch($type) {

        case 'photo':
            include_once($abs_path . '/templates/photo.php');
            loadPhotoTemplate($id);
            break;

        case 'video':
            include_once($abs_path . '/templates/video.php');
            loadVideoTemplate($id);
            break;
    }

}

Bu en fazla bir kez, her şablon dosyasını yüklemek, ve sonra sadece bu madde için spesifik veri şablonu görüntülemek istediğiniz her zaman işlevini çağırır.

Edit

Muhtemelen sonra sadece anahtarı uygun işlevini çağırın başında tüm şablon dosyaları dahil etmek için daha iyi olurdu. Daha önce dahil / gerekli dosyaların listesini dedikleri her zaman danışmak gerekir gibi PHP'nin * _once () işlevleri, yavaş.

izin şablonları bir dizi oluşturmak. Eğer istenen şablon dizide olup olmadığını görmek için bakmak işlev var. o ise, o dosyayı içerecek $ türü değişkeni kullanın. evet, genel bir içeren dosya adı kullanıcı tarafından sağlanan verileri kullanmak gerekir, ama değerler iyi bilinen dizisine karşı valide beri, güvenli.

Sizin endişe performans ise, ben şahsen tüm bu döngü içine almak olmaz.

Öğeleri oluşturulan ve veritabanındaki verilerin yanında çıktısını depolamak gibi listedeki öğeleri daha sık oluşturulduktan daha inceledi olduğunu varsayarsak, ben HTML üretecektir. (Ya memcache veya dosyaları veya başka bir yerde -. Ama üretmek ve depolamak)

Eğer aynı switch deyimi yapıyoruz öylesine yaparken size geri öğelerin oluşturulması sürecine bu mantığı hareket ediyorum, ama bir seferde sadece tek bir öğe için - Eğer döngü dışında kesiyoruz.

Sonra gösterim zamanında yerine çağıran display_listing(), sadece zaten sakladığınız HTML echo.

Ben bir kaç şeyler bakmak gerektiğini düşünüyorum. Öncelikle, aynı "şablon" 100 kez yer alacak bir olasılık bile var? Yani bir sayfaya koymak için içerik büyük bir miktar gibi görünüyor.

Diyelim ki, birçok kez tekrarlanan olan bir tablo satırı - - Ben minik "parçacıkları" kullanıyorum ben bu gibi bir dize döndüren bir işlev kullanma eğiliminde:

/* snippets.php */
function tableRow( $row )
{
    return
        '<tr><td>' . $row['var1'] . '</td>' .
        '<td>' . $row['var2'] . '</td></tr>';
}

/* main page/view */
foreach ( $data as $row )
    echo tableRow( $row );

Burada ana avantajı fonksiyonu döngüler ve her türlü sahip olabilirsiniz.

Eğer düz bir değişken değiştirme arıyorsanız, bir HTML dosyasında kendi mini-şablonları oluşturabilir; gibi bir şey:

<p>{name}<br />
  Posted {date} by {author}</p>

Ardından, şablonda okumak str_replace tüm değişkenler {} çalışır sizin display_listing işlevi, bütün dize geçmek. Ben bir performans isabet çok fazla olacağını sanmıyorum, ama emin olmak için denemek gerekiyor.

Sen include_once function instead of include kullanmak istiyorum.

The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once.

Farklı anahtar kelimeler için bir anahtar kullanılarak şablonları dahil olmak için gidiyoruz eğer, o zaman bir değişkeni ayarlamak gerekir, $ template_filename sen anahtarının patlak kez ve sonra, şöyle eklerim anahtarı, ki:

include_once("/templates/{$filename}.php");

Eğer her dahil kullanmak istemiyorsanız, o zaman siz de bir çiftleşmiş motoru kullanabilirsiniz ...

Bu yöntem, ancak bana makul görünüyor.