İyi PHP 5 Templating Teknikleri?

5 Cevap php

Ben OOP Çerçevenin bir parçası olarak php benim kendi çiftleşmiş katman oluşturmak için arıyorum, ama ben bu yüzden düzgün bunu nasıl bazı örnek arıyorum. Ben çiftleşmiş motoru ne yapacağını değil, bir hızlı / temizleyici / modern tekniği kullanmak anlatmak yorum bulmak için her html dosyası ayrıştırma önlemek istiyorum. Ben google kullanarak etrafına baktım ve hiçbir şey gözüme çünkü ben sadece bazı örnekler gerekir. Ayrı benim sunum ve mantık tutmaya çalışıyorum ama ne yapıyorum html kodu boyunca mantığın ton gerektirir ediyorum.

, Teşekkürler

P.S. Böyle smarty gibi varolan bir çiftleşmiş motoru kullanmak isteyen değilim, benim kendi inşa etmek istiyorum.

5 Cevap

Ben Smarty düşündüren herkese sormak istiyorum o sizin aynı soruyu soracağım:

Neden bir çiftleşmiş dildir PHP bir çiftleşmiş dili eklemek istiyorsun?

PHP çiftleşmiş dildir. Ben insanların unutmak veya saf OO dil, which it isn't gibi onu tedavi etmek için denemek düşünüyorum. PHP'nin güçlü oynamak. Değil bir şey denemek ve onu yapmayın.

Eğer şablon sistemi desteklemek niyetinde özellikleri yani, ne kadar basit veya karmaşık deme, çünkü tüm bu söyleniyor, bu soruya cevap vermek zor.

Lütfen çiftleşmiş dili oldukça basit ise düzenli ifadeler gitmek için yol olabilir. Bu ancak bazı önemsiz durumlar için çalışmaz. Kontrol yapılarının Yerleştirme muhtemelen en yaygın olanıdır. Bu durumda ilkel çözümleyici çeşit yazmak gerekir.

Kullanıcının tüm çiftleşmiş yapılar bu gibi bloklar olduğunu varsayalım:

{:...:}

bütünlüğü için, kullanıcı aslında bu karakter kombinasyonlarını kullanmak istiyor durumda karşılamak gerekir, her ne kadar bu (bir HTML sayfası aksi ortaya nispeten düşüktür çünkü.

Bu tür ifadeler için dosyayı tarar ve buna göre işlemek gerekir. Düzenli ifadeler ama mutlaka koşullu örneğin içerir için olduğu gibi, olanları değil eşleşen tüm bunları bulmak için kullanılabilir:

{:if ...:}
Some conditional content
{:endif:}

Neden? Bu yüzünden:

{:if *some condition*:}
{:if *some other condition*:}
Some other conditional content
{:endif:}
Some conditional content
{:endif:}

Düzenli ifadeler ile bu eşleşen güvenilir yapılamaz böylece lexemelerin ağacının bazı forma dosyayı ayrıştırmak ve sonra işlemek gerekir.

Eğer Model-View-Controller desen düşündünüz mü? Sen görüşlerine onları soyut tüm fonksiyon ve değişkenlerin (iç denetleyicileri) ile mantık ve açığa olabilir. Bu şablonu için bir ilk adım olabilir.

PS: Ben PHPTAL (Şablon Özellik Language) adı verilen bir şablon motoru test ettik. Eğer tasarımı bozmadan, özel html nitelikleri içine gömülü mantığı ile html şablonları oluşturabilir çünkü ben onu sevdim.

Ben bu fikirleri sizin için yararlı olmuştur umarım

php bir çiftleşmiş dil IS çünkü fastest metodu, php kendisi kullanmaktır. Tabii, bazen güvenlik nedenlerinden dolayı bir seçenek, ve temel php öğrenmek zorunda tasarımcı değil (that really hurts a lot). Diğer, daha özel (ve daha az kudretli) çiftleşmiş sistemleri temiz tutmak nerede bazen, o gerçekten çok çirkin olur.

Eğer gerçekten kendi inşa etmek var eğer öyleyse, 3 seçenek fikrimi üstlük vardır ...

  1. Bir acemi olarak i (strpos, vb substr ve) ayrıştırma özel aracılığıyla bazı çiftleşmiş yaptım. eğilimli, çok yavaş, çirkin ve hata oldu. ben tavsiye etmem.

  2. Düzenli ifade kargaşa. Eğer regexplerde usta değilseniz, unutun. ama muhtemelen daha hızlı yöntemlerden biri.

  3. belki birlikte ile yol bir şey olabilir php tokenizer functions ...

  4. DOM-uzantı! Şablonlarınız xhtml uyumlu yapmak ve xml dosyaları olarak yükleyin. Dur, tüm ayrıştırma sizin için yapılır! Şimdi sizin gibi özel etiketler, ya güzel bir ağaç var


      <loop item="$myVariable" times="$x">
        <print name="$myVariable->name" entities="yes" nl2br="yes" purify="removeemptytags, xss"/>
        <hr/>
      </loop>

Zaten imho, biraz smarty gibi görünüyor. Sadece var ya yapmak, bazı (loop-düğüm $ x kez subnodes yankılanan), ya da belki (smarty performans için yapar) php ve önbellek çevirmek yorumlama.

yorum, böyle bir şey isterseniz ya da, (burada ama özel etiketler kullanarak daha fazla ayrıştırma yapmak zorunda)


    <!-- begin loop:myVariable -->
      <-- print:myVariable->name() -->
      <hr/>
    <!-- end loop -->

i DOM yöntem çok hızlı olmasını hayal edemiyorum, ama sen gerçekten moar hız gerekiyorsa, yerli php kodu ve / veya işlenmiş html önbelleğe çeviri (if speed really is that önemli değil, mutlaka daha iyi olurdu siz) belki Carmack veya skeet iseniz dışında. kendi kod yazmak.

iyi şanslar.

... I'm trying to keep my presentation and logic separate but what i'm doing requires tons of logic through out the html code....

Hey, there's this...

Neden bize yapmaya çalıştığınız ne bir örnek vermek değil mi? Belki bize bir durum, belki tipi sorunu için özel bir çözüm özel olduğunu neden bir fikir verecektir? Sadece bu kadar yardım etmez yapmak bestest, en hızlı yolu nedir, ben bir şablon motoru yazmak istiyorum, diyerek. Cidden, I would take a number of them, look at what they do, understand why they've done, learn, and do something different if I want something better.

Sen ayrıştırıcıları uygulamak için gerektirecektir. Ama bunun yerine her zaman bunu ayrıştırma Smarty ve diğerleri daha sonra kullanmak için çözümlenen çıktısını kaydetmek ne yapmak. Lütfen çözümleyici çıkış PHP kodu kendisi eğer daha iyi olurdu.