Neden PHP şablon sistemi kullanmalıyım?

21 Cevap php

Neden PHP şablon sistemi kullanmalıyım?

Benim soru arkasında bir mantıktır: PHP kendisi özellik zengin şablon sistemi, neden başka şablon motoru yüklemeniz gerekir?

Ben buldum sadece iki profesyoneller kadar şunlardır:

  1. Biraz temiz sözdizimi (bazen)
  2. Şablon motor genellikle endişeleri ayırmak için sizi zorlar böylece iş mantığını uygulamak için yeterince güçlü değildir. PHP ile çiftleşmiş Eğer çiftleşmiş ilkeler etrafında yürüyüş ve tekrar kod çorba yazmaya başlamak için yem olabilir.

Eksilerini göre ... ve her ikisi de oldukça önemsizdir.

Küçük bir örnek:

PHP

<h1><?=$title?></h1>
<ul>
  <?php foreach ($items as $item) {?>
  <li><?=$item?></li>
  <?php } ?>
</ul>

Smarty

<h1>{$title}</h1>
<ul>
  {foreach item=item from=$items}
  <li>{$item}</li>
  {/foreach}
</ul>

Ben gerçekten hiç bir fark görmüyorum.

21 Cevap

Dediğin gibi PHP (çiftleşmiş motoru) içinde bir çiftleşmiş motoru kullanmak için kendinizi zorlamayın Evet, eğer, o ayırma endişeleri kayma ve durdurmak kolay olur.

However, sorunları endişeleri ayıran olan aynı insanlar Smarty en zor senin endişe ayrılık problem çözme, böylece HTML üreten ve Smarty için besleme veya Smarty PHP kod yürütme sonunda.

Ayrıca bkz:

Ben kod ateşleyici gibi bir MVC framework kullanarak mutluyum. Ben 'görüşleri' Ben sadece değerler görüntülenir nasıl ilgilidir php koduna sopa eğiliminde olduğunu bulmak. Ben bu yönde görünümlerde kullanabilirsiniz biçimlendirme fonksiyonları bir kütüphanesi var. Kod ateşleyici tesislerinde biri çünkü sen ve tahakkuk yavaş aşağı kısıtlayabilirsiniz şekilde bir çiftleşmiş dili kaçınmaktır.

Ben onlar örneğin yapmanız gereken şeyi elde böylece tasarımcılar, bazı PHP öğrenmek için daha iyi olduğunu bulmak. alternatif sınıf adları. Ayrıca uzun vadede daha yararlı hale getirecek ve diğer bir sözdizimi büyük bir sıçrama değil.

Sizin analizi makul. Sanırım:

  • Şablon tasarımcılar ve arka-uç programcılar aynı biri olmayabilir, bu nedenle ayrışmasını sağlar.
  • Bu gerçekten şablonları "çok fazla" PHP yapamaz biraz kendinizi sizi korur.
  • Bazı senaryolarda / precompile şablonları optimize etmek daha kolay olabilir? (Bu spekülasyon)

Personally, I think they're more hassle than they're worth. Particularly they don't work if you want to hand the templates to "designers" since the WYSIWYG tools don't know what to do with them.

Asp.net kontrolleri gibi bir şey - Ben görmedim Bir şablon motoru avantajı dinamik html elemanlarının olasılığı idi. Örneğin, PEAR'ın HTML Şablon Flexy ile otomatik durumunu korumak dinamik form elemanları olabilir. Şablonda döngüler ve koşullara olmadan düzenli bir html select eleman doldurulur ve seçilen ürün arkasındaki kodu belirledik.

Ben temiz sözdizimi oldukça büyük bir kazan olduğunu düşünüyorum. Sadece birkaç karakter gibi görünebilir, ancak rağmen her gün bunu yaparken, daha sonra her karakter saymaya başlar.

Ve {$myvar|escape} IMHO <?php echo htmlspecialchars($myvar); ?> daha biraz daha kısadır. (Özel olarak PHP Konf etkin olduğunda, akılda tutulması <?=$foo?> sözdizimi yalnızca kullanılabilir olduğunu.)

Ben bir şablon motoru kullanmak gerektiğini sanmıyorum. Bunun yerine Zend_View sunum ayrı mantık yapmak için teşvik eder gibi bir şey kullanmak, ancak PHP sunum katmanı oluşturmanıza olanak verir gerekir.

  • Bir şablon olarak PHP kodu ile bir dosya kullanmak istiyorsanız? Güzel.
  • Dedin şablonunuzda değişkenleri kullanmak istiyor? Güzel.

Sadece mantık ve son çıkış (sunum) ayırmak için hatırlıyorum. Bu bir çiftleşmiş çerçeve ile daha başarılı olduğunu. Ama Smarty gibi bir şey öğrenmek zorunda değilsiniz.

  • Eğer Zend_View veya benzer kullanırsanız PHP kodu her şekilde kullanabilirsiniz.

Burada birçok kişi doğru cevap vardır. Smarty PHP çiftleşmiş değildir. Alakası. Smarty çoğunlukla sayfaların görüntülenmesini düzenlemek ve kurulum için tasarımcılar (yani olmayan-programcılar) kullanmak zorunda olanlar için vardır. Olacak sayfalarınızın düzenini değiştirmek olan herkes programlayabilir, bir PHP kodu odaklı çiftleşmiş sistemi ile gidebilirsiniz. Ama gerçekten tüm çıkış verileri hazır olmalı ve şablona gönderebilirsiniz. Her sayfa içerik, getir süreci ve görüntülemek izin verirseniz, daha sonra sonra er refactor gerekir.

Eğer başkası için kod yazarken. Örneğin, ben bir kez müşterilerimiz için özelleştirilebilir olmalıdır sert bir web uygulaması çerçevesinde oluşturulması dahil edildi. Bir önemli isteği müşteri without programlamak mümkün olan şablonları değiştirmek için bir tasarımcısı olabilir oldu. Hatta daha önemlisi, o authorized kodunu değiştirmek için olmayabilir.

Smarty Örneğin şablonu ne yapabileceğimizi oldukça katı kısıtlamalar uygulamak için izin verir. Temelde, bizim uygulama en temel kod yapıları ve değiştirici fonksiyonları seçilmiş kümesi ancak tüm devre dışı. simplicity ve security: Yani bir şablon motoru ile de servis iki gol vardı.

Sen htmlspecialchars() kez unuttum. Eğer çiftleşmiş sisteme ihtiyacımız var bu yüzden.

Smarty kötüdür. Buna göre çiftleşmiş sistemleri karar vermeyin.

Ve bize geleceğini unutmayalım. Web siteleri yayınlanmadan neredeyse dakikada eski. Sen görünümünü güncelleştirmek ve bir noktada hissetmek gerekir OLACAKTIR. Eğer çoğu kez ayrılığı korumak ise tek başına bir tasarımcı arka ucunda aynı programlama ile yepyeni bir web sitesi tamamlayabilirsiniz. Bu yeni işlevsellik gerekli ise sadece programcı dahil sağlayan, daha hızlı ve daha ucuz redesigns sağlar.

Ben bir PHP şablon dili kullanmak için sizi zorlayacak şekilde zorlayıcı olsaydı, bunun tamamını kullanmak değil ki bahse girerim. Sorun PHP attractives biri olduğunda 'atlamak' ve şeyleri yolunuzu yapmak için yeteneği.

Ben ilk hususlar, tamamen beni engelledi bir şablon dili tercih olmaz, sadece bu kod sürdürülebilir olacağını bunun iyi bir şey olduğunu söylemek, ne de yok.

Aksi takdirde, ben çiftleşmiş sistemleri kodlama ve tasarım arasındaki iş bölmek yardımcı olduğunu kabul, ve muhtemelen bize tasarımcıların tasarım ve kodlama icar.

Şahsen her zaman PHP, Python veya herneyse çiftleşmiş motorlarını kullanın.

Zaten başkaları tarafından bahsedilen ilk belirgin nedeni:

Bu sizin şablonları herhangi bir iş mantığı kullanmak değil güçlerdir.

Eğer buna sahip olduğunda emin olun Evet, disiplin, sadece iyi yapardı.

Ama bu just a tiny aspect of why you would use a templating engine. Bunların çoğu sadece bir motoru daha vardır ve bunu gibi olsun veya olmasın, çiftleşmiş çerçeveler düşünülebilir.

Örneğin, Smarty da kısmi önbelleğe alma gibi önbelleğe gelişmiş özelliklere sahiptir. Gerçekten yararlı şeyler, kullanırken kendiniz todo tüm olurdu şeyler sadece çiftleşmiş dili olarak php.

Ve dokümanlar sadece bir hızlı arama uzakta bütün bu gerçekten yararlı yardımcı işlevlerini unutmayın lütfen. Bunların çoğu da kendi fonksiyonları ve / veya araç seti eklentisi için kolay bir yol sağlar.

Yani evet, bu bir seçim meselesi. Gerçekten basit çiftleşmiş için ihtiyaç, bazı disiplin gösteren düşünün bir şablonlara dışarı mantığı tutmak zaman. Eğer uygulama büyümesini bekliyoruz ama ne zaman, sonunda şablon çerçevesinde özelliklerinden ihtiyacı olacaktır. Ve o zaman, umarım bunu bütün yourslef kodlama ile tekerleği yeniden icat değil.

Ve son ama en az değil, benim için bazı çiftleşmiş çerçeveler bulunan bir öldürücü özelliği vardır.

Template Inheritance

I Django onu bilmek geldi ettik ve şimdi son Smarty 3 bunu kullanıyorum. Senfoni çerçevesinden adamlar da Django sözdizimi ile bir bağlantı noktasını düşünün, hangi Twig var.

Bu ilk başta biraz garip görünebilir, ama son derece güçlüdür. Sen iskeleti oluşturmak ve çeşitli bloklar tanımlar. Bu tür iskeleti genişletmek ve içerik ile (geçersiz kılma) in blokları doldurabilirsiniz.

Benim için bu bir kaleci!

şablon yönetim sistemi, ayrı ayrı şablon dosyalarını yönetebilirsiniz. sistem yürütme süresi, normal PHP projesi daha sonra daha hızlı olacaktır. işte PHP dosyaları ve şablon dosyaları ayrı ayrı tutulur.

bir zamanlar dosyaları kod bunu template_c kaydedilir çalıştırın. bu yüzden onun çok kez derleme değil.

Ben oldukça düzgün ve basit bir sözdizimi vardır tinybutstrong kullanılan birkaç kez. Html şablonda yok döngüler veya pseudocode.

Kendi anasayfasından:

TinyButStrong is a library that enables you to dynamically create XML/HTML pages and any other files based on text source. It's a Template Engine for the PHP language. It enables you to easily display information from your database, but also to seriously harmonize and simplify your PHP programming.

TinyButStrong is oriented to HTML but not specialized to Html. This means it can work as well with Text files, XML, RSS, RTF, WML, Excel (xml), ... The OpenTBS plug-in enables your to merge OpenOffice and Ms Office documents.

Bazı Smarty PHP zaten ne yapabilirim yaptığı iddia olabilir: iş mantığını sunum ayrı. PHP programlama dili kod geliştirme için harika ama HTML ile karıştırıldığında, PHP ifadelerin sözdizimi yönetmek için bir karmaşa olabilir. Smarty çok daha basit bir etiket tabanlı sözdizimi ile sunum PHP yalıtım bu kadar yapar. Etiketleri PHP (uygulama) kodundan temiz bir ayrım uygulanması, uygulama içeriğini ortaya koyuyor. Hiç PHP bilgisi Smarty şablonları yönetmek için gereklidir.

Bu ayrılık önemi durumsal olduğunu. Bu PHP geliştiricileri için daha web tasarımcıları için genellikle daha önemlidir. Bu nedenle, Smarty geliştiricileri ve tasarımcılarının rolleri ayrıldığı zaman genellikle iyi bir seçimdir. Doğru ya da yanlış cevap yoktur: Her geliştirme ekibi kod ve şablonları yönetmek için kendi tercihleri ​​vardır. Birkaç isim taneli verileri önbelleğe, şablon miras ve fonksiyonel sandboxing: Kenara temiz bir etiket tabanlı sözdizimi, Smarty da sunum yönetmek için araçları geniş bir yelpazede sunuyor. Iş gereksinimleri ve PHP kodu Smarty ile kullanılan Smarty iyi bir uyum olup olmadığını belirlemede büyük bir rol oynayacaktır.

Insanlar şablon sistemleri kullanmak temel nedeni sunum mantığı ayırmaktır. O gelen çeşitli faydaları vardır.

Öncelikle, uygun gördükleri gibi onları kod akışını tutmak hakkında endişe etmeden, bir şeyler taşıyabilirsiniz bir web tasarımcısı için bir şablon teslim edebiliyorum. Onlar sadece tek başına özel etiketleri bırakmak bilmek, PHP anlamak gerekmez. Birkaç etiketleri için bir kaç basit semantik öğrenmek zorunda kalabilirsiniz ama bu bütün dil öğrenme çok daha basittir.

Ayrıca, ayrı dosyalar halinde sayfasını bölerek, programcı ve tasarımcı hem de ihtiyaç duydukları gibi çatışmalar olmadan, kaynak denetimi için denetleme, aynı anda aynı 'sayfasında' üzerinde çalışabilirsiniz. Programcı kendi kopyasını karşı, diğer potansiyel kırılma değişiklikler yapıyor iken Tasarımcılar kod kararlı sürüme karşı şablon görselleri test edebilirsiniz. Bu insanlar her ikisi aynı dosya düzenleme ve farklı değişiklikler birleştirmek zorunda olsaydı ama, sorunlarla karşılaşabilirsiniz.

Ayrıca uzak sunum mantığı iş mantığı tutmak iyi bir programlama uygulama zorlar. Eğer sunum ile karışık iş mantığı koyarsanız o zaman daha zor bir zaman size farklı daha sonra sunmak gerekiyorsa bunu ayıklamak var. Web uygulamaları sunum şekilleri bu gün giderek daha popüler: RSS / ATOM bunlar genellikle bir şablon ile tamamen yapılır ve hiçbir şey ya da çok az bir değişiklik olabilir bir şablon sistemi ile vb, taşınabilir cihazlar için, JSON veya AJAX yanıtları, WML beslemeleri başka.

Fakat herkes bu yardımlardan ihtiyaç veya takdir edecektir. Java / Python / Ruby / etc üzerinde PHP'nin avantajı hızlı onlara bazı mantığı ile web sayfalarını kesmek olabilir, ve tüm iyi ve güzel.

Orada bir şablon sistemi kullanmak için iyi bir nedeni değil ancak Smarty hala, ama PHPTAL. PHPTAL şablonları geçerli XML (ve dolayısıyla XHTML) dosyalarıdır. Siz uzak PHPTAL kukla içerik kullanmak ve böylece işlenmiş ve standart araçları ile test edilebilir nihai görünümü ile geçerli XHTML dosyasını alabilirsiniz. İşte küçük bir örnek:

<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody>
    <tr tal:repeat="users user">
      <td tal:content="user/first_name">Max</td>
      <td tal:content="user/last_name">Mustermann</td>
      <td tal:content="user/age">29</td>
    </tr>
  </tbody>
</table>

PHPTAL motor şablonu otomatik olarak kullanıcıların dizideki tüm değerleri eklemek ve bizim kukla değerlerin yerini alacaktır. Bununla birlikte, tablo zaten sizin seçtiğiniz bir tarayıcıda görüntülenebilir geçerli XHTML.

PHP is oldukça fazla bir çiftleşmiş sistem. Anahtar kendi sunum mantığı ayırmak kendinizi zorlamaktır. Smarty ya da buna benzer bir şey kullanarak sadece biraz daha rahatsız edici mantık ve sunum mix yapar. Kendinizi bir çiftleşmiş sistemi kullanarak, kendi bunları ayrı yapamıyorsanız yardım edecek değildir. Bunu yapmak için gidiyor tüm ek işleme gücünü yemek olduğunu.

Anahtar sunum kodunda herhangi değerleri değiştirmek değil etmektir. Bunu yapmak için, sana / endif eğer sözdizimi kullanırsanız PHP kendisi Smarty kadar etkili olduğunu düşünüyorum:

<?php if($some_test): ?>
   <em>Some text!</em>
<?php endif; ?>

Mantığını ayırma bahanesiyle olmayan PHP şablonları kullanarak saçmalıktır. Geliştirici yapılmalı nasıl iş görünümü mantığı ayırma ne olduğunu anlamak ve değilse, o zaman sorun uygun şekilde ele alınmalıdır. Aksi takdirde şablonları iş mantığı veya iş mantığı HTML ile sona - hiçbir çiftleşmiş motoru seni kurtarmaya gidiyor. Sen geliştirici temellerini öğretmek zorundayız.

Ve geliştirici does çiftleşmiş sistem sadece bir sınırlama olduğunu anlıyoruz eğer. Bu, any value geliştirme sürecine, yeni bir sözdizimi öğrenme güncel bir kütüphane tutmak ve yavaş yürütme sadece yükü katmıyor. Ikincisi önbelleğe alma ve etajer, bu sadece ilaçları, aksi takdirde yok olur bir sorun çözülebilir iken. Yani, çiftleşmiş sistemleri, hiçbir avantajı yok değeri sunuyor.

Ben olmayan bir PHP çiftleşmiş sistemini kullanarak makul olduğunu düşünüyorum burada bir istisna olsa da, vardır: view-mantık programcılar şablonları sınırlı erişimi olmalıdır zaman. Örneğin bir blog barındırma sistemi için bir sağlayıcı konum ve kullanıcıların bunları keyfi kod çalıştırmasına izin vermeden, kendi şablonları kişiselleştirmek ve kod izin vermek istiyorsanız. Bu argüman, ancak, not bir tasarımcı UI programlama yardım için küçük bir kod öğrenmek için istekli olduğunu durumlar için geçerli değildir. O Smarty öğrenebilirsiniz, o surely PHP öğrenebilirsiniz.

for me, one of the big features of templates engines is that the cache layer its transparent for you. I've been using smarty long time ago, and the cache stuff make the life easier. also the smarty design allow you to use your own cache function. In my case I choose if for some page should use memcache or disk to store the template output.

Sitenizin büyük bir trafik ve varsa diğer yandan size smarty yönetmek ve de bu herhangi bir motor şablonu bir site katil olabilir bunu ayarlama nasıl bilmiyorum. ama hatta smarty sitenizi kullanarak değil de ölebilir.

flickr anda smarty kullanıyor. onun soo kötü olmamalı, değil mi?

Ben trivially herhangi bir PHP dosyası herhangi bir şablonu görüntülemek (ve nav bar gibi ortak elemanlar için birbirleriyle iç şablonları fragmanları dahil) için yetenek ister. Örneğin, sen değilsen yapman veya bir hata eğer normal olarak bazı bilgiler yazdıran bir sayfa vardı varsayalım. PHP ile, gibi bir şey yazmak isterim:

if (loggedIn)
{
    // print lots of HTML here
}
else
{
    // print error message
}

Smarty, böyle bir şey olabilir (benim muhtemelen yanlış sözdizimi bağışla, bir süre oldu):

if (loggedIn)
{
    $smarty->bind("info", someObject);
    $smarty->display("info.template");
}
else
    $smarty->display("error.template");

Eğer gerçekten zeki olsaydı, hatta isteğe bağlı olarak kullanıcı sona erdi nedenini açıklayan bir mesajla, giriş sayfası şablonu yerine hata şablonu görüntüleyebilirsiniz. Eğer ben yazdım ve sonra giriş kutusunu görüntülemeden geçmek istedim karar verdi tekniği ile gitti ve eğer sadece tek bir satır bir değişiklik! Benim için, ama birçok yerden görüş yaygın öğeleri yeniden yeteneği hakkında, sadece görünümü ve mantık ayrımı tutmak değil.