Overview
2009 yılı sonuna etrafında, ben broşür dağıtan tip web siteleri için bizim tasarımcılar tarafından içi kullanılacak PHP / HTML için basit bir şablon sistemini yazdı. Sistemin amacı PHP ile işlenen özel etiketleri ile aksi saf HTML çiftleşmiş izin vermektir. Örneğin, bir şablonu sayfası bu gibi görünebilir:
<tt:Page template="templates/main.html">
<tt:Content name="leftColumn">
<p> blah blah </p>
...
</tt:Content>
<tt:Content name="rightColumn">
<p> blah blah </p>
...
</tt:Content>
</tt:Page>
Şablon kendisi böyle bir şey olabilir:
<html>
<head>...</head>
<body>
<div style="float:left; width:45%">
<tt:Container name="leftColumn" />
</div>
<div style="width:45%">
<tt:Container name="rightColumn" />
</div>
</body>
</html>
Sayfa ve İçerik / Konteyner etiketleri yanı sıra, diğer birkaç etiketleri kendi set of eklemek çok kolay yüzden çerçeve tasarlanmıştır, vb dinamik değerleri çıktısı, bir koleksiyon üzerinde yineleme, akış kontrolü gibi şeyler için çekirdeğe dahil vardır etiketleri başka bir önek ve ad altında kayıtlı.
Custom Tags to PHP
Nasıl bu özel etiketleri ayrıştırmak? HTML dosyası, iyi biçimlendirilmiş XML olduğunu the're hiçbir garanti yana, XSLT / XPATH gibi çözümler güvenilir olmayacaktır. Bunun yerine, biz kayıtlı öneklerle etiketleri aramak için bir düzenli ifade kullanın, ve PHP kodu ile yerini alır. PHP kodu bir yığın tabanlı tasarım ... bir açılış etiketi ile karşılaştığında, etiketini temsil eden bir nesne oluşturulduğunda yığını itti ve onun "başlatma fonksiyonu" (varsa) çalışır. Kayıtlı bir kapanış etiketi karşılaşıldığında, en son nesne yığını kapalı attı, ve "rendering fonksiyonu" çalışır.
Çerçeve PHP ile çiftleşmiş etiketleri değiştirir sonra Yani, bizim örnek bir sayfadır böyle bir şey (realty biraz çirkin olduğunu) görünebilir:
<?php $tags->push('tt', 'Page', array('template'=>'templates/main.html')); ?>
<?php $tags->push('tt', 'Content', array('name'=>'leftColumn')); ?>
<p> blah blah </p>
...
<?php $tags->pop(); ?>
<?php $tags->push('tt', 'Content', array('name'=>'rightColumn')); ?>
<p> blah blah </p>
...
<?php $tags->pop(); ?>
<?php $tags->pop(); ?>
The good, the bad, and eval
strong>
Şimdi, nasıl bizim yeni oluşturulan PHP kodu çalıştırmak için? Ben burada birkaç seçenekleri düşünmek yapabilirsiniz. Kolay basitçe eval
dize olduğunu ve yeterince iyi çalışıyor. Ancak, herhangi bir programcı "eval kötü olduğunu, bunu kullanmayın ..." söyleyecektir, burada kullanabilirsiniz eval
Bundan daha uygun bir şey olduğunu bir soru yani?
Ben, vb php://
çıkış akışlarını kullanarak, geçici veya önbelleğe alınmış bir dosya kullanarak kabul ettik, ama bildiğim kadarıyla gördüğünüz gibi bu eval
üzerinde gerçek herhangi bir avantajı sunmuyor. Önbelleğe alma hızlandırmak olabilir, ama pratikte bu şeye sahip tüm siteler zaten cayır cayır yanan hızlı, bu yüzden bu noktada hız optimizasyonları yapmak gerek görmüyorlar.
Questions
Bu listedeki şeylerin her biri için: bu iyi bir fikir mi? Daha iyi bir alternatif düşünebiliyor musunuz?
- Bütün fikir genel olarak (html / php için özel etiketler)
- yerine doğrudan işleme php kod etiketleri dönüştürmek
- yığın tabanlı bir yaklaşım
eval
(veya benzeri) kullanılmasıdır
Herhangi bir tavsiye için okuma ve TIA için teşekkürler. :)